Vindo do Autentique
Se a sua integração já fala com o Autentique v2, o modelo de domínio que você construiu continua valendo inteiro: documento, signatários, ordem, prazo, lembrete, pastas, arquivos e eventos são os mesmos conceitos, com os mesmos comportamentos. O que muda é a forma de chamar. Esta página é a tabela de tradução, campo por campo, com franqueza sobre o que ainda não temos.
Não há integração entre as duas plataformas e nenhuma relação comercial entre elas. Os nomes de operação e de campo do Autentique citados aqui vêm da documentação pública deles e servem exclusivamente para orientar quem está migrando. Onde a documentação pública não foi conclusiva, está escrito que não foi, em vez de haver um palpite apresentado como fato.
A diferença de fundo: GraphQL contra REST
O Autentique expõe um endpoint único, POST /v2/graphql, e você descreve na
consulta quais campos quer de volta. Aqui, cada recurso tem a sua rota, o verbo HTTP diz a
intenção e a resposta traz o objeto inteiro. Isso tem três consequências práticas na
migração, e nenhuma delas é grande:
Você para de escolher os campos. Onde havia uma query pedindo
id name status signatures { email signed }, passa a haver um
GET /v1/documentos/{documentoId} que devolve tudo. A resposta é maior e você descarta o
que não usa, o que em rede de servidor não é problema mensurável.
Você para de tratar erro em corpo de sucesso. Em GraphQL, uma operação que
falha ainda responde 200 com um arranjo errors; aqui o status HTTP
é a verdade. O tratamento fica mais simples e o seu cliente HTTP passa a ser útil de novo.
Você ganha idempotência de verdade. O cabeçalho
Idempotency-Key não tem equivalente no endpoint único, e é ele que impede um
timeout de rede de virar contrato duplicado. Veja
Idempotência.
O upload de arquivo, que no Autentique usa a especificação de multipart request
do GraphQL com as partes operations, map e file,
aqui é um multipart/form-data comum, com as partes dados e
arquivo. Na prática, o seu código de upload fica mais curto.
Mutations
| Autentique v2 | AdigitalMAX | Observação |
|---|---|---|
createDocument |
POST /v1/documentos |
Mesmos conceitos. document vira a parte dados, signers vira signatarios dentro dela, file vira a parte arquivo. A diferença de comportamento: aqui a criação nunca dispara. O documento nasce em RASCUNHO e enviar é uma segunda chamada, explícita. |
updateDocument |
PATCH /v1/documentos/{documentoId} |
Semântica idêntica: altera o que o estado ainda permite. |
deleteDocument |
DELETE /v1/documentos/{documentoId} |
Exclusão lógica com carência nos dois. Documento concluído não sai por aqui. |
resendSignatures |
POST /v1/documentos/{documentoId}/reenviar |
Mesmo comportamento: reenvia a quem ainda não assinou, sem consumir envelope novo. |
createFolder |
POST /v1/pastas |
Idêntico. FolderInput.name vira nome. |
updateFolder |
PATCH /v1/pastas/{id} |
Idêntico. |
deleteFolder |
DELETE /v1/pastas/{id} |
Nos dois, pasta com conteúdo não é apagada em cascata. |
Estas operações não existem no Autentique e passam a existir para você:
| AdigitalMAX | Para quê |
|---|---|
POST /v1/documentos/{documentoId}/enviar | Separa criar de disparar. Permite validar o posicionamento antes de qualquer coisa chegar ao signatário. |
POST /v1/documentos/{documentoId}/cancelar | Cancelamento explícito com motivo registrado na trilha, em vez de exclusão. |
POST /v1/documentos/{documentoId}/mover | Mover entre pastas. A documentação pública do Autentique não expõe uma mutation equivalente. |
GET /v1/documentos/{documentoId}/certificado | Certificado de conclusão e evidências, em JSON ou em PDF. |
GET /v1/documentos/{documentoId}/auditoria | Trilha de auditoria completa como recurso próprio, paginada. |
POST /v1/modelos/{id}/documentos | Modelos de documento com variáveis e papéis. Não confundir com emailTemplates, que é outra coisa. |
GET /v1/validar/{codigo} | Validação pública por código, arquivo ou QR Code, sem autenticação. |
GET /v1/consumo | Medição de consumo do período, para prever custo antes da fatura. |
POST /v1/webhooks | Webhook cadastrado por API. No Autentique a URL de callback é configurada pela tela. |
Queries
| Autentique v2 | AdigitalMAX | Observação |
|---|---|---|
me |
GET /v1/organizacao |
Não existe rota /me. A chave pertence a uma organização, e não a uma pessoa, então a identidade da credencial vem de /organizacao. É a chamada de teste de fumaça da integração. |
organization |
GET /v1/organizacao |
Mesmo conceito. |
organizations |
GET /v1/organizacoes |
Organizações das quais o usuário é membro. Com chave de API a lista tem sempre um item, porque a chave pertence a uma organização. |
document(id) |
GET /v1/documentos/{documentoId} |
Mesmo conteúdo, sem precisar declarar os campos. |
documents(limit, page) |
GET /v1/documentos?limite=&cursor= |
Muda a paginação. É a diferença que mais exige código novo; veja abaixo. |
documentsByFolder(folder_id) |
GET /v1/documentos?pastaId= |
Vira um filtro da listagem, em vez de uma operação separada. |
folders, folder(id) |
GET /v1/pastas, /v1/pastas/{id} |
Mesmo conceito. search vira busca. |
emailTemplates |
GET /v1/modelos-email |
Mesmo conceito, mesmo uso: referenciado por modelo_email_id na criação, equivalente a email_template_id. |
A paginação é a única mudança que exige reescrever lógica, e não só renomear.
O Autentique pagina por limit e page, devolvendo
total, data e has_more_pages. Aqui é cursor:
limite e cursor, devolvendo itens, total e
proximoCursor.
A troca não é gratuita e vale saber por quê: com página numerada, um documento criado
entre a leitura da página 1 e a da página 2 empurra tudo para baixo, e um item some do
percurso. Em uma conciliação de dez mil documentos, isso é um contrato que o seu
sistema nunca viu. O cursor elimina a classe inteira desse problema. O custo é que você
não consegue pular direto para a página 7; o total continua vindo,
calculado sob o mesmo escopo dos itens. O laço correto está
em Limites.
Campos do documento
| Autentique | AdigitalMAX | Situação |
|---|---|---|
name | titulo | Muda de nome. nome aqui é do signatário, não do documento. |
sortable | ordenado | Mesmo comportamento: assinatura em fila conforme a ordem. |
refusable | recusavel | Idêntico. |
stop_on_rejected | pararSeRecusado | Idêntico. |
reminder (DAILY, WEEKLY) | lembrete (DIARIO, SEMANAL) | Mesmos dois valores, mais NENHUM explícito. |
qualified | nivelAssinatura: "ICP_BRASIL" | Muda de forma. Onde havia um booleano, aqui há uma escala de quatro níveis. Veja abaixo. |
deadline_at | prazoEm | Data limite para assinar. |
expiration_at | expiraEm | Mantidos separados. O contrato preserva a distinção entre prazo para assinar e expiração do documento, exatamente como no Autentique. |
lifecycle_in | /v1/lgpd/politicas-retencao | Sai do documento. Retenção é política da organização, com rota própria, e não parâmetro por envio. Veja Limites. |
email_template_id | modeloEmailId | Só muda de nome. |
reply_to | responderPara | Continua no documento. Só muda de nome. |
footer | marca da organização | Sai do documento. Vira configuração da organização, em PATCH /v1/organizacao, para não haver rodapé diferente a cada envio. |
locale | — | Não existe. A interface de assinatura é em português. Veja o que não existe. |
sandbox | a URL base e o prefixo da chave | Muda de lugar. Em vez de um campo por documento, o ambiente é o sufixo /sandbox na URL e o prefixo adx_test_ da chave. Isso torna impossível mandar um documento de teste com a chave de produção por engano. |
folder_id | pastaId | Só muda de nome. |
| — | nivelAssinatura | Novo. ELETRONICA, SEGURA, AVANCADA, ICP_BRASIL. |
| — | fatoresExigidos | Novo. Lista de fatores exigidos de todo signatário. Informar dois valores é exigir dois fatores simultâneos. |
| — | envelopeId | Novo. Agrupa vários documentos em um único ato de envio. |
Sobre qualified: no Autentique ele é um booleano que liga a assinatura
qualificada. Aqui a mesma decisão virou uma escala, porque entre "clicou no link" e
"certificado ICP-Brasil" existem dois degraus que a maioria dos contratos realmente usa.
A tradução direta é qualified: true para nivelAssinatura: "ICP_BRASIL" e
qualified: false para nivelAssinatura: "ELETRONICA"; mas se os seus
signatários já recebem código por SMS hoje, o equivalente honesto é
SEGURA. A tabela dos quatro está na visão geral.
Campos do signatário
| Autentique | AdigitalMAX | Situação |
|---|---|---|
email | email | Idêntico. |
name | titulo | Muda de nome. nome aqui é do signatário, não do documento. |
phone | telefone | Aqui exigimos E.164 com +55. |
cpf | cpf | Idêntico. |
birthday | dataNascimento | AAAA-MM-DD nos dois. |
action | funcao | Muda de nome, e os valores também; veja a tabela de ações. |
delivery_method | metodoEntrega | Muda de nome, e os valores perdem o prefixo. |
lock_user_data | travarDados | Idêntico: impede o signatário de corrigir o próprio nome e documento na tela. |
positions (x, y, z, element, page) | campos no nível do documento (tipo, pagina, x, y, largura, altura, signatarioId) | Muda de forma. É a segunda mudança que exige código novo; veja abaixo. |
| — | fatoresExigidos | Novo. Reforça os fatores do documento para este signatário; nunca reduz. Inclui TOTP, e informar dois valores é exigir dois fatores simultâneos. |
| — | ordem | Novo como campo explícito. No Autentique a ordem vem da posição no arranjo signers; aqui é um número, o que evita bug de reordenação silenciosa. |
Sobre positions. A documentação pública do Autentique cita
os nomes x, y, z, element e
page, mas não publica a unidade nem o sistema de coordenadas, então não
existe fórmula de conversão que possamos afirmar com honestidade. O que a nossa API usa
está documentado sem ambiguidade: fração de 0 a 1, origem no canto superior esquerdo,
largura e altura também em fração. Se você tem posições
funcionando hoje, o caminho seguro é reposicionar uma vez, conferindo o PDF gerado no
sandbox, e não converter no escuro. A conversão a partir de pontos PostScript está em
Guias.
Ações do signatário e método de entrega
Os seis papéis são exatamente os mesmos, com o mesmo significado. Só o nome muda:
Autentique action | AdigitalMAX funcao | Significa |
|---|---|---|
SIGN | ASSINAR | Assina o documento. É o padrão nos dois. |
APPROVE | APROVAR | Aprova sem assinar como parte. |
RECOGNIZE | RECONHECER | Reconhece a firma. |
ACKNOWLEDGE | ACUSAR_RECEBIMENTO | Acusa recebimento, sem concordar com o conteúdo. |
ENDORSE | ENDOSSAR | Endossa. |
SIGN_AS_A_WITNESS | TESTEMUNHAR | Assina como testemunha. |
| Autentique | AdigitalMAX | Observação |
|---|---|---|
DELIVERY_METHOD_EMAIL | EMAIL | Padrão nos dois. |
DELIVERY_METHOD_LINK | LINK | Nada é enviado; a URL vem no campo link do signatário e a entrega é sua. |
DELIVERY_METHOD_WHATSAPP | WHATSAPP | Exige telefone em E.164. |
DELIVERY_METHOD_SMS | SMS | Exige telefone. Consome medição própria; veja Limites. |
// traduzir.mjs
// Converte um payload no formato do Autentique para o nosso. Serve para
// migrar sem reescrever de uma vez o codigo que monta o documento: voce
// mantem a sua estrutura atual e traduz na borda.
//
// O que ele NAO faz: converter positions. Nao ha formula publicada para
// isso, e chutar produziria campo no lugar errado em contrato real.
const ACAO = {
SIGN: "ASSINAR",
APPROVE: "APROVAR",
RECOGNIZE: "RECONHECER",
ACKNOWLEDGE: "ACUSAR_RECEBIMENTO",
ENDORSE: "ENDOSSAR",
SIGN_AS_A_WITNESS: "TESTEMUNHAR",
};
const ENTREGA = {
DELIVERY_METHOD_EMAIL: "EMAIL",
DELIVERY_METHOD_LINK: "LINK",
DELIVERY_METHOD_WHATSAPP: "WHATSAPP",
DELIVERY_METHOD_SMS: "SMS",
};
const LEMBRETE = { DAILY: "DIARIO", WEEKLY: "SEMANAL" };
export function traduzirDocumento(document, signers, opcoes = {}) {
const dados = {
nome: document.name,
ordenado: document.sortable ?? false,
recusavel: document.refusable ?? true,
pararSeRecusado: document.stop_on_rejected ?? true,
lembrete: LEMBRETE[document.reminder], // omitir desliga o lembrete
// Os dois prazos continuam separados, como no Autentique.
prazoEm: document.deadline_at ?? undefined,
expiraEm: document.expiration_at ?? undefined,
modeloEmailId: document.email_template_id ?? undefined,
responderPara: document.reply_to ?? undefined,
pastaId: opcoes.pastaId ?? undefined,
// qualified era booleano; aqui e uma escala de quatro degraus.
// ELETRONICA e o equivalente literal de qualified: false, mas
// confira se o seu fluxo real nao e SEGURA.
nivelAssinatura: document.qualified ? "ICP_BRASIL" : "ELETRONICA",
// Dois valores aqui = dois fatores simultaneos.
fatoresExigidos: opcoes.fatoresExigidos ?? ["EMAIL"],
signatarios: signers.map((s, indice) => ({
nome: s.name,
email: s.email,
telefone: s.phone ?? undefined,
cpf: s.cpf ?? undefined,
dataNascimento: s.birthday ?? undefined,
funcao: ACAO[s.action] ?? "ASSINAR",
metodoEntrega: ENTREGA[s.delivery_method] ?? "EMAIL",
travarDados: s.lock_user_data ?? false,
// No Autentique a ordem vem da posicao no arranjo. Aqui e explicita.
ordem: indice + 1,
})),
// s.positions NAO e convertido: reposicione uma vez no sandbox.
// Os campos ficam no NIVEL DO DOCUMENTO e apontam o dono por
// signatarioId, que so existe depois de criar o rascunho.
campos: [],
};
// Campos que saem do documento e viram configuracao da organizacao.
const avisos = [];
if (document.footer) avisos.push("footer agora e a marca da organizacao");
if (document.lifecycle_in) avisos.push("lifecycle_in agora e /v1/lgpd/politicas-retencao");
if (document.locale) avisos.push("locale nao existe: a interface de assinatura e em portugues");
if (document.sandbox !== undefined) avisos.push("sandbox agora e a URL base mais o prefixo da chave");
return { dados, avisos };
}
Arquivos
| Autentique | AdigitalMAX | Observação |
|---|---|---|
files.original | GET /v1/documentos/{documentoId}/arquivo?tipo=ORIGINAL | Mesmo conteúdo. |
files.signed | GET /v1/documentos/{documentoId}/arquivo?tipo=ASSINADO | Mesmo conteúdo. |
files.pades | GET /v1/documentos/{documentoId}/arquivo?tipo=PADES | Só existe no nível ICP_BRASIL. >>> PENDENTE DE BACKEND <<< |
| — | GET /v1/documentos/{documentoId}/arquivo?tipo=CERTIFICADO | Novo. O certificado de conclusão como arquivo próprio. |
| — | GET /v1/documentos/{documentoId}/certificado | Novo. O certificado em JSON, com hashDocumento, para você conferir a integridade do que baixou. |
A diferença de comportamento que importa: no Autentique, files traz URLs
dentro da resposta da query. Aqui, a URL é pedida no momento do download, vale 15
minutos e é de uso único. Isso significa que você não pode guardar a URL em banco nem
colocá-la em um href de página cacheada; em compensação, pode entregá-la ao
navegador do seu usuário sem entregar a sua chave de API.
Webhooks
O Autentique publica dezessete eventos; nós publicamos nove. Não é redução de
funcionalidade: é agrupamento. Os quatro eventos de biometria deles, por exemplo, viram
informação dentro de signer.authenticated, no campo
fatores_confirmados.
| Autentique | AdigitalMAX | Observação |
|---|---|---|
document.created | document.created | Nome idêntico. |
document.updated | — | Não publicamos evento de edição. Edição de rascunho é operação sua e você já sabe que a fez. |
document.deleted | — | Idem. A exclusão parte de você. |
document.finished | document.completed | Muda de nome, mesmo significado: o último signatário assinou. É o evento mais importante dos dois lados. |
signature.created | dentro de document.sent | Signatário criado deixa de ser evento próprio. |
signature.updated, signature.deleted | — | Operações suas, sem evento próprio. |
signature.viewed | document.viewed | Muda de nome. O signatário que abriu vem em dados.signatario. |
signature.accepted | document.signed | Muda de nome. Dispara uma vez por signatário nos dois. |
signature.rejected | document.refused | Muda de nome. O motivo vem no payload. |
signature.delivery_failed | estado FALHA_ENTREGA do signatário | Vira estado consultável em vez de evento. Aparece na conciliação e no document.viewed que nunca chega. |
signature.biometric_approved e as outras três | dentro de signer.authenticated | Agrupados. fatores_confirmados diz o que foi cumprido, incluindo ou não a biometria. |
member.created, member.deleted | — | Não existem aqui. Veja o que não existe. |
| — | document.sent | Novo. Marca o disparo, que aqui é separado da criação. |
| — | signer.authenticated | Novo. Traz os fatores que o signatário cumpriu, que é o que sustenta a prova. |
| — | document.expired, document.cancelled | Novos. Fecham os desfechos que antes só apareciam em consulta. |
A validação da assinatura do webhook é diferente e você vai escrever código novo para isso; ele está pronto, em quatro linguagens, em Webhooks.
O que não existe, de um lado e do outro
Esta seção existe para você não descobrir uma lacuna no meio da migração. Ela é a parte desta página que mais nos custa escrever e a que mais lhe serve.
O que o Autentique tem e nós não temos
| Recurso | Situação aqui |
|---|---|
locale, interface de assinatura em outro idioma |
Não existe e não está planejado. A tela de assinatura é em português. Se você tem signatários no exterior, isto é um impedimento real e vale conversar antes de migrar. |
| CRUD de membros da organização por API | Nós temos, e eles não expõem. /v1/organizacao/membros cobre listar, convidar, alterar papel e remover. A documentação pública do Autentique expõe apenas os eventos de webhook member.created e member.deleted. |
| Assinatura qualificada ICP-Brasil e PAdES | Ainda não disponível. O enum ICP_BRASIL existe no contrato e hoje responde 422. Se a sua operação depende de assinatura qualificada hoje, este é o item que deve pesar na sua decisão, e não vamos prometer data. >>> PENDENTE DE BACKEND <<< |
| Biometria facial com prova de vida | Especificada, não disponível. O fator BIOMETRIA_FACIAL está no contrato e ainda não está no ar. >>> PENDENTE DE BACKEND <<< |
| Três campos distintos de prazo | Fundidos em um. Se você usa deadline_at e expiration_at com valores diferentes, e a diferença importa para o seu processo, o comportamento vai mudar. |
| Anexos exigidos do signatário | Especificado, não disponível. Está no desenho e ainda não tem rota publicada. >>> PENDENTE DE BACKEND <<< |
| Endpoint GraphQL | Previsto como fachada de compatibilidade, sem data. Veja abaixo. |
O que nós temos e o Autentique não expõe
| Recurso | Por que importa |
|---|---|
| Níveis de assinatura em escala | Escolher entre quatro degraus, por documento, em vez de um booleano. Recibo interno não precisa do mesmo atrito que uma procuração. |
| TOTP e dois fatores simultâneos | Informar dois valores em fatoresExigidos já é dupla verificação de verdade, sem booleano nenhum. E TOTP não tem custo por uso, ao contrário do SMS. |
| Certificado de conclusão como recurso | Em JSON para o seu sistema indexar, e em PDF para anexar a um processo, sem precisar recompor a prova a partir de eventos soltos. |
| Validação pública por código, arquivo ou QR Code | Sem autenticação, e a validação por arquivo detecta adulteração, que é o caso que realmente importa quando alguém contesta. |
| Modelos de documento com variáveis | Envio em uma chamada de JSON puro, sem subir o mesmo PDF de novo. Em volume, reduz o consumo de forma mensurável. |
| Idempotência por cabeçalho | Retentativa depois de timeout deixa de duplicar contrato. |
| Envelopes | Vários documentos em um único ato de envio, com um link só para o signatário, contando um envelope na franquia. |
| Medição de consumo por API | Prever custo antes da fatura, e conseguir atribuí-lo a um cliente seu. |
| Trilha e certificado com fatores confirmados | A prova registra como a pessoa se autenticou, e não só que ela clicou. |
Lado a lado: o mesmo envio nas duas APIs
# Autentique v2: endpoint unico, multipart request do GraphQL.
# As partes operations, map e file precisam ser montadas na mao.
mutation CriarDocumento($document: DocumentInput!, $signers: [SignerInput!]!, $file: Upload!) {
createDocument(document: $document, signers: $signers, file: $file) {
id
name
refusable
sortable
created_at
signatures {
public_id
name
email
created_at
action { name }
link { short_link }
user { id name email }
}
}
}
# variables:
# {
# "document": {
# "name": "Contrato de prestacao de servicos",
# "sortable": true,
# "refusable": true,
# "stop_on_rejected": true,
# "reminder": "WEEKLY",
# "deadline_at": "2026-09-30",
# "qualified": false
# },
# "signers": [
# { "email": "maria@exemplo.com.br", "action": "SIGN",
# "delivery_method": "DELIVERY_METHOD_EMAIL" }
# ],
# "file": null
# }# AdigitalMAX: multipart/form-data comum, duas partes.
# A resposta ja traz o documento inteiro; nao ha campos a declarar.
curl --fail-with-body --silent --show-error \
--request POST "https://api.adigitalmax.com.br/v1/documentos" \
--header "Authorization: Bearer $ADM_CHAVE" \
--header "Idempotency-Key: pedido-88231" \
--form 'dados={
"titulo": "Contrato de prestacao de servicos",
"ordenado": true,
"recusavel": true,
"pararSeRecusado": true,
"lembrete": "SEMANAL",
"prazoEm": "2026-09-15T23:59:59-03:00",
"expiraEm": "2026-09-30T23:59:59-03:00",
"nivelAssinatura": "SEGURA",
"fatoresExigidos": ["EMAIL", "SMS_OTP"],
"signatarios": [
{
"nome": "Maria Oliveira",
"email": "maria@exemplo.com.br",
"telefone": "+5511988887777",
"funcao": "ASSINAR",
"metodoEntrega": "EMAIL",
"ordem": 1
}
],
"campos": [
{ "tipo": "ASSINATURA", "pagina": 7, "x": 0.10, "y": 0.72, "largura": 0.34, "altura": 0.07 }
]
};type=application/json' \
--form "arquivo=@./contrato.pdf;type=application/pdf"Roteiro de migração
Este roteiro assume que você não pode parar de enviar documentos durante a troca, que é o caso normal. Ele leva a integração dos dois lados no ar ao mesmo tempo, e o corte acontece quando você decidir, não quando o código exigir.
-
Isole o cliente atual atrás de uma interface
Se o seu código chama a API do Autentique espalhado por vários lugares, este é o primeiro trabalho e ele vale mesmo que você não migre. Uma interface com quatro ou cinco métodos, algo como
enviarParaAssinatura,consultarEstado,baixarAssinadoecancelar, com uma implementação por plataforma. Nada mais do seu sistema precisa saber qual das duas está em uso. -
Escreva a segunda implementação contra o sandbox
Use o tradutor pronto para converter o seu payload existente e reduzir o trabalho ao mínimo. Duas coisas exigem código novo de verdade, e não tradução: a paginação por cursor e o posicionamento de campos. Reserve tempo para as duas.
-
Reposicione os campos, uma vez, olhando o PDF
Não converta coordenadas no escuro. Envie um documento de teste para
assina@teste.adigitalmax.com.br, baixe o PDF assinado e olhe. Cinco minutos aqui evitam um contrato com a assinatura em cima de uma cláusula. -
Monte o receptor de webhook novo, em paralelo
Um endpoint separado, com o segredo novo e a validação HMAC. Não tente adaptar o receptor existente: os formatos e os nomes de evento são diferentes, e dois receptores independentes são mais simples de operar do que um com dois modos.
-
Exerça os doze casos de aceitação
A lista está em Sandbox. Os quatro primeiros são o caminho feliz; os oito seguintes são os que geram chamado depois. Recusa, expiração e falha de entrega são os que mais costumam faltar.
-
Corte por fatia, e não de uma vez
Uma chave de configuração escolhe a plataforma por tipo de documento ou por cliente. Comece pelo tipo de menor risco, deixe rodar uma semana, e vá subindo. Documento já enviado pelo Autentique continua lá até ser concluído; não há como movê-lo, e não precisa haver.
-
Antes de desligar, baixe o acervo antigo
Este é o passo que não tem volta. Percorra
documentsno Autentique e baixe, de cada documento concluído, o PDF assinado, o PAdES quando houver e o que a plataforma oferecer de relatório de auditoria. Guarde no seu armazenamento, com o identificador original. Depois de encerrar a conta, isso deixa de estar disponível, e um contrato de doze anos precisa da prova por doze anos. -
Mantenha as duas implementações por um trimestre
Custa pouco, já que ambas ficam atrás da mesma interface, e transforma um problema inesperado em uma linha de configuração em vez de um plantão.
Um lembrete jurídico que não é técnico. Documentos assinados no Autentique continuam válidos e continuam sendo verificados pela plataforma deles. Migrar não migra prova: os documentos antigos permanecem verificáveis lá, e os novos aqui. Se o seu processo depende de um endereço único de verificação para todo o acervo, isso precisa ser resolvido no processo, e não na API.
Sobre uma fachada GraphQL
Uma fachada GraphQL compatível com a forma do Autentique v2 está prevista, com um objetivo declarado: permitir que quem já integrou com eles reaproveite as consultas praticamente como estão, mudando endpoint e credencial.
Não temos data e não vamos estimar uma. Ela depende de a API REST estar estável em produção primeiro, porque uma fachada sobre um contrato que ainda muda seria duas superfícies instáveis em vez de uma. Se a sua decisão de migrar depende dessa fachada, fale conosco antes de planejar prazo, em vez de contar com ela.
Enquanto isso, a recomendação honesta é migrar para REST. O trabalho é menor do que parece, porque o modelo de domínio é o mesmo e só a chamada muda, e você não fica esperando por algo sem data. As duas coisas que exigem código novo de verdade, paginação e posicionamento, teriam que ser feitas de qualquer forma: uma fachada de compatibilidade não reproduz o que ela não tem por baixo.