Pular para o conteúdo
AdigitalMAX AdigitalMAX API v1
Referência

Referência da API

As oitenta e três operações do contrato, mais dezesseis objetos e doze enumerações, espelhando docs/CONTRATO_API.openapi.yaml. Cada operação traz o escopo de chave e o papel mínimo que exige, e tem link permanente. A busca da barra lateral filtra esta página inteira sem sair dela e sem enviar o que você digita para lugar nenhum; a tecla / leva o foco até ela.

>>> PENDENTE DE BACKEND <<< (página inteira)

Esta página foi conferida contra o contrato canônico docs/CONTRATO_API.openapi.yaml, e não contra um servidor em execução. Nenhuma operação foi exercida em produção. Onde este texto divergir do contrato, o contrato vence e o texto está errado. Pendências específicas trazem a marcação no próprio cabeçalho da operação.

Convenções

Vale para toda a API, e não se repete em cada operação.
ItemRegra
URL base, produçãohttps://api.adigitalmax.com.br/v1
URL base, sandboxhttps://api.adigitalmax.com.br/v1/sandbox
Exceção de hostDuas rotas anônimas moram no host institucional e não em api.: a validação pública e o formulário de contato do site. Isso evita abrir CORS justamente no endpoint mais exposto.
AutenticaçãoAuthorization: Bearer adx_live_<prefixo>.<segredo> para chave de API, cookie adx_sessao para o painel, e OAuth 2.0 para aplicações de terceiros. Veja Autenticação.
Formatoapplication/json, exceto envio de arquivo, que é multipart/form-data, e download, que devolve application/pdf.
Nomes de campocamelCase. Valores de enumeração em MAIUSCULA_COM_SUBLINHADO, com a única exceção dos nomes de evento de webhook, que são minúsculos no formato recurso.acao.
IdentificadoresUUID v4 em toda rota. Não há sequencial. Identificador opaco não é autorização: toda operação revalida o direito no servidor.
Escopo de organizaçãoNenhuma operação aceita identificador de organização. Não existe tenantId nem organizacaoId em corpo, consulta, caminho ou cabeçalho. O escopo vem do token, sempre. Um campo desses chegando na requisição é descartado e registrado como evento de segurança.
Data e horaRFC 3339 com fuso. 2026-08-16T14:32:07-03:00.
DinheiroInteiro em centavos. Nunca ponto flutuante.
Coordenada de campoFração de 0 a 1 relativa à página, origem no canto superior esquerdo.
Campo ausente em PATCHSó altera o que veio no corpo. Enviar null apaga; omitir preserva.
Campo novo em respostaPode ser acrescentado sem aviso. Seu cliente precisa ignorar o que não conhece, em vez de falhar.

Recurso de outra organização responde 404, nunca 403. O corpo e a latência do 404 de "não existe" e do 404 de "é de outro" são indistinguíveis, de propósito: 403 significaria "existe, e você não pode", e isso é um oráculo de existência. 403 aparece em um caso só, e ali é correto e acionável: recurso da própria organização que o papel do usuário não alcança.

Paginação por cursor

Toda listagem é paginada por cursor. Os parâmetros de consulta são limite e cursor, e a resposta é o objeto Pagina.

Forma de toda listagem
{
  "itens": [ { "id": "6f2a1c94-8b3d-4e57-9a20-71c5f0d3ab48" } ],
  "total": 412,
  "proximoCursor": "Y3Vyc29yOjIwMjYtMDgtMTZUMTQ6MzI6MDdaOjZmMmExYzk0"
}

Pare quando proximoCursor vier ausente ou null, e não quando a página vier com menos itens que o limite: as duas coisas não são equivalentes. O total obedece ao mesmo escopo dos itens; um total calculado fora do escopo entregaria o volume de negócio de outra organização mesmo sem entregar uma linha. O cursor é opaco e não deve ser construído nem decomposto.

Idempotência

Toda operação de criação aceita o cabeçalho Idempotency-Key. Repetir a chamada com a mesma chave dentro de 24 horas devolve a resposta original em vez de criar de novo. Sem isso, um tempo limite de rede no envio de um documento vira dois documentos e duas cobranças.

Use um identificador do seu domínio, como o número do pedido ou do contrato, e não um UUID aleatório gerado na hora da chamada. Aleatório gerado na hora muda a cada retentativa, que é exatamente o caso que a idempotência deveria cobrir.

Documentos

POST

/documentos

#

Cria um documento a partir de um PDF, com signatários e campos posicionados. O documento nasce em RASCUNHO e não dispara nada: enviar é uma operação separada e explícita, porque disparar por efeito colateral de uma criação é como se envia contrato errado para cliente.

Escopodocumentos:escrever PapelOPERADOR IdempotenteIdempotency-Key

O corpo é multipart/form-data. O arquivo é limitado a 20 MB e apenas application/pdf; o tipo real é conferido pelo conteúdo, e não pela extensão nem pelo cabeçalho declarado. Os demais campos seguem DocumentoEntrada.

Corpo, parte de dados
{
  "titulo": "Contrato de prestação de serviços",
  "descricao": "Vigência de 12 meses, renovação automática.",
  "nivelAssinatura": "SEGURA",
  "fatoresExigidos": ["EMAIL", "SMS_OTP"],
  "ordenado": true,
  "recusavel": true,
  "pararSeRecusado": true,
  "lembrete": "SEMANAL",
  "prazoEm": "2026-09-15T23:59:59-03:00",
  "expiraEm": "2026-09-30T23:59:59-03:00",
  "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,
      "obrigatorio": true
    }
  ]
}

Dois fatores simultâneos é simplesmente informar dois valores em fatoresExigidos. Não há booleano de "exigir todos": a lista é o conjunto exigido, e todos os seus itens precisam ser cumpridos. O signatário pode exigir mais que o documento, nunca menos.

GET

/documentos

#

Lista os documentos da organização, do mais recente para o mais antigo, paginada por cursor.

Escopodocumentos:ler PapelVISUALIZADOR

Parâmetros de consulta

ParâmetroTipoDescrição
limiteintegerItens por página.
cursorstringO proximoCursor da página anterior.
statusStatusDocumentoFiltra por estado.
pastaIduuidRestringe a uma pasta.
buscastringTrecho do título ou de nome e e-mail de signatário.

A listagem devolve DocumentoResumo, sem campos nem auditoria. Para o objeto inteiro, use a leitura individual.

GET

/documentos/{documentoId}

#

O Documento completo, com signatários, campos e o estado de cada assinatura.

Escopodocumentos:ler PapelVISUALIZADOR

Documento de outra organização responde 404, e não 403.

PATCH

/documentos/{documentoId}

#

Altera o que o estado atual permite. Em RASCUNHO, quase tudo. Depois de enviado, o conteúdo já foi apresentado a alguém e mudá-lo destruiria a prova: a tentativa devolve 409 com o código DOCUMENTO_IMUTAVEL.

Escopodocumentos:escrever PapelOPERADOR
DELETE

/documentos/{documentoId}

#

Exclusão lógica com carência. O documento sai das listagens e o arquivo continua guardado até a política de retenção alcançá-lo. Documento concluído é prova documental e não sai por esta rota.

Escopodocumentos:escrever PapelADMINISTRADOR

Exigir ADMINISTRADOR aqui, e apenas OPERADOR para criar e enviar, é deliberado: quem opera o dia a dia não apaga acervo.

POST

/documentos/{documentoId}/enviar

#

Tira o documento do rascunho e dispara os convites conforme a ordem configurada. É esta chamada que consome um envelope da franquia do plano. Só funciona a partir de RASCUNHO.

Escopodocumentos:escrever PapelOPERADOR

Emite o evento document.sent. Franquia esgotada devolve FRANQUIA_ESGOTADA.

POST

/documentos/{documentoId}/reenviar

#

Reenvia o convite a quem ainda não assinou. Não consome envelope novo e não altera o prazo.

Escopodocumentos:escrever PapelOPERADOR
POST

/documentos/{documentoId}/cancelar

#

Interrompe o processo. Os links dos signatários deixam de funcionar na hora, quem já assinou continua registrado na auditoria, e o motivo entra na trilha. Não tem volta: para retomar, crie um documento novo.

Escopodocumentos:escrever PapelOPERADOR

Emite o evento document.cancelled.

POST

/documentos/{documentoId}/mover

#

Move o documento para outra pasta da mesma organização. pastaId: null devolve à raiz.

Escopodocumentos:escrever PapelOPERADOR
GET

/documentos/{documentoId}/versoes

#

Lista as versões do arquivo do documento. Substituir o PDF não apaga o anterior; cria uma versão.

Escopodocumentos:ler PapelVISUALIZADOR
POST

/documentos/{documentoId}/versoes

#

Sobe uma versão nova do arquivo, em multipart/form-data. A anterior permanece registrada e verificável.

Escopodocumentos:escrever PapelADMINISTRADOR
GET

/documentos/{documentoId}/arquivo

#

Baixa o arquivo do documento. O parâmetro de consulta tipo aceita ORIGINAL, ASSINADO, PADES e CERTIFICADO, com ASSINADO como padrão.

Escopoarquivos:ler PapelVISUALIZADOR
Exemplo
GET /v1/documentos/6f2a1c94-8b3d-4e57-9a20-71c5f0d3ab48/arquivo?tipo=ASSINADO

A API resolve o objeto dentro do escopo da organização, verifica o direito e só então delega a entrega ao servidor web por X-Accel-Redirect, apontando para um caminho marcado como interno. Não existe caminho público previsível para o arquivo, e o diretório nunca é servido como estático.

GET

/documentos/{documentoId}/auditoria

#

A trilha de auditoria completa, em ordem cronológica, como uma página de EventoAuditoria. É o mesmo conteúdo que vai para o certificado, em JSON. A trilha é imutável: não há rota que altere ou apague evento.

Escopoauditoria:ler PapelVISUALIZADOR

Note que o escopo é auditoria:ler, e não documentos:ler: uma chave pode ler documentos sem ler a trilha deles.

GET

/documentos/{documentoId}/certificado

#

O certificado de conclusão e as evidências, que é a peça central do produto: o que prova quem assinou, quando, de onde e depois de passar por qual autenticação. Veja Certificado.

Escopodocumentos:ler PapelVISUALIZADOR
200 OK
{
  "id": "b81d4f9c-2a06-4e13-88f5-3c7e9012ab64",
  "codigo": "ADX-CERT-9F2K4M7Q1B",
  "versao": 1,
  "nivelAssinatura": "SEGURA",
  "hashDocumento": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8",
  "hashConteudo": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "hashAnterior": null,
  "hash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
  "emitidoEm": "2026-08-18T16:04:11-03:00",
  "arquivoUrl": "/v1/documentos/6f2a1c94-8b3d-4e57-9a20-71c5f0d3ab48/arquivo?tipo=CERTIFICADO",
  "qrConteudo": "https://adigitalmax.com.br/validar?codigo=ADM-7K4Q-2M9X-B3TD"
}

O certificado é versionado e encadeado. Emitir de novo cria uma versão nova ligada por hash à anterior, em hashAnterior, e não sobrescreve. Isso é o que permite provar que a prova não foi trocada.

Antes de o documento chegar a ASSINADO o certificado não existe, e a rota responde com o código CERTIFICADO_INDISPONIVEL. Certificado parcial seria uma prova de algo que ainda não aconteceu.

Signatários e campos

GET

/documentos/{documentoId}/signatarios

#

Signatários do documento, com estado, marcos e fatores exigidos de cada um.

Escoposignatarios:lerPapelVISUALIZADOR
POST

/documentos/{documentoId}/signatarios

#

Acrescenta um signatário. O corpo é um SignatarioEntrada. Quando o método de entrega é LINK, a resposta traz a URL pessoal de assinatura e a entrega passa a ser sua.

Escoposignatarios:escrever PapelOPERADOR
GET

/documentos/{documentoId}/signatarios/{signatarioId}

#

Detalhe do signatário, incluindo fatores exigidos, fatores cumpridos e os marcos de cada passo.

Escoposignatarios:lerPapelVISUALIZADOR
PATCH

/documentos/{documentoId}/signatarios/{signatarioId}

#

Corrige dados de quem ainda não assinou. É a rota para o caso mais comum de todos, o e-mail digitado errado: corrigir e reenviar resolve sem cancelar o documento nem consumir envelope novo. Signatário que já assinou é imutável.

Escoposignatarios:escrever PapelOPERADOR
DELETE

/documentos/{documentoId}/signatarios/{signatarioId}

#

Remove signatário pendente e invalida o link dele na hora. Os campos que eram dele saem junto.

Escoposignatarios:escreverPapelOPERADOR
GET

/documentos/{documentoId}/campos

#

Todos os campos do documento, com página, coordenada relativa e o signatário dono de cada um.

Escopodocumentos:lerPapelVISUALIZADOR
PUT

/documentos/{documentoId}/campos

#

Substitui em lote o mapa inteiro de campos. É PUT, e não PATCH, de propósito: posicionamento de campo é um desenho, e desenho se troca inteiro. O que não vier no corpo deixa de existir.

Escopodocumentos:escrever PapelOPERADOR

Envelopes

Envelope agrupa vários documentos em um único ato de envio: o signatário recebe um link só e assina o conjunto. É também a unidade de medição da franquia do plano.

GET

/envelopes

#

Lista os envelopes da organização, paginada por cursor.

Escopodocumentos:lerPapelVISUALIZADOR
POST

/envelopes

#

Cria o envelope. Os documentos entram nele pelo campo envelopeId de DocumentoEntrada, na criação de cada um.

Escopodocumentos:escreverPapelOPERADORIdempotenteIdempotency-Key
POST

/envelopes/{envelopeId}/enviar

#

Dispara o envelope inteiro em um ato. Consome um envelope da franquia, independentemente de quantos documentos estejam dentro.

Escopodocumentos:escreverPapelOPERADOR

Pastas

GET

/pastas

#

Pastas da organização com a contagem de documentos de cada uma.

Escopopastas:lerPapelVISUALIZADOR
POST

/pastas

#

Cria pasta. O corpo é { "nome": "Contratos 2026", "paiId": null }.

Escopopastas:escreverPapelOPERADOR
PATCH

/pastas/{pastaId}

#

Renomeia ou move a pasta. Mover para dentro da própria descendência é recusado.

Escopopastas:escreverPapelOPERADOR
DELETE

/pastas/{pastaId}

#

Remove pasta vazia. Nunca apaga documento em cascata: pasta com conteúdo é recusada, com a contagem do que há dentro.

Escopopastas:escreverPapelADMINISTRADOR

Modelos

GET

/modelos

#

Modelos de documento visíveis à credencial: os pessoais de quem criou e os publicados na organização.

Escopomodelos:lerPapelVISUALIZADOR
POST

/modelos

#

Cria um modelo a partir de um PDF, em multipart/form-data. O modelo define papéis de signatário, e não pessoas: quem preenche cada papel é decidido ao instanciar.

Escopomodelos:escreverPapelOPERADOR
GET

/modelos/{modeloId}

#

Detalhe do modelo, com papéis, campos e a lista de variáveis que ele aceita.

Escopomodelos:lerPapelVISUALIZADOR
PATCH

/modelos/{modeloId}

#

Edita o modelo. Documentos já gerados a partir dele não mudam.

Escopomodelos:escreverPapelOPERADOR
DELETE

/modelos/{modeloId}

#

Remove o modelo. Documentos gerados a partir dele continuam íntegros e verificáveis.

Escopomodelos:escreverPapelADMINISTRADOR
POST

/modelos/{modeloId}/documentos

#

Instancia um documento a partir do modelo. Sem upload de arquivo, sem posicionar campo de novo: você manda as variáveis e quem preenche cada papel. É a rota que transforma envio em uma chamada de JSON puro, e a mais usada em integração de volume.

Escopodocumentos:escrever PapelOPERADOR IdempotenteIdempotency-Key

Como toda criação, o documento nasce em RASCUNHO; o disparo continua sendo uma chamada separada.

Validação pública

POST

https://adigitalmax.com.br/api/v1/validacao/consultar

#

A única operação do produto totalmente sem autenticação, junto com o formulário de contato do site. Ela existe porque quem valida costuma ser exatamente quem não é cliente de ninguém: a contraparte, o cartório, o banco, o juiz.

AutenticaçãoNenhuma Limite30 por minuto por IP, rajada de 10

O host é diferente do resto da API, e a diferença é proposital. A página de validação mora no domínio raiz, em adigitalmax.com.br/validar, e a API mora em api.. Consulta entre origens obrigaria CORS aberto justamente no endpoint mais exposto do sistema. A borda roteia /api/v1/validacao/ no próprio host institucional, e a chamada vira mesma origem, sem CORS nenhum.

Corpo, ao menos um dos três

CampoFormatoDescrição
codigoADM-XXXX-XXXX-XXXXO código impresso no rodapé do PDF. Alfabeto sem caracteres ambíguos.
hashArquivo64 hexadecimaisSHA-256 do PDF. O arquivo nunca é enviado: o navegador calcula o hash localmente com crypto.subtle e transmite apenas os 64 caracteres. Isso importa porque quem valida costuma não confiar na outra parte, e não teria por que confiar na plataforma dela também.
qrCodestringO conteúdo lido do QR Code impresso no documento.
curl
curl --request POST "https://adigitalmax.com.br/api/v1/validacao/consultar" \
  --header "Content-Type: application/json" \
  --data '{"codigo":"ADM-7K4Q-2M9X-B3TD"}'

Os três desfechos, que são diferentes e não podem ser confundidos

ResultadoSignifica
AUTENTICOO registro existe e o hash informado bate com o hash final gravado. O documento é o mesmo que foi assinado.
ADULTERADOO registro existe, o código confere, e o hash do arquivo apresentado não bate. O arquivo em mãos do visitante não é o que foi assinado. É o único desfecho que afirma algo negativo sobre o arquivo, e ele exige o hash: nunca é retornado a partir do código sozinho.
NAO_ENCONTRADOA plataforma não tem registro daquele código ou hash. Não significa que o documento é falso. Ele pode ter sido assinado em outra plataforma, pode ter sido excluído por política de retenção, ou o código pode ter sido digitado errado. A interface precisa dizer isso com essas palavras.

A resposta é sempre 200, inclusive em NAO_ENCONTRADO: o desfecho vai no corpo, e não no status, para que o status não vire oráculo de existência consultável sem ler a resposta. A latência é uniforme entre os três desfechos pela mesma razão. O e-mail dos signatários vem mascarado pelo servidor; o mascaramento no navegador é segunda linha, nunca a primeira. Não há busca por título, por nome nem por data: seria transformar a página pública em ferramenta de raspagem.

O limite de 30 por minuto é inseparável da entropia do código, que tem 60 bits. Os dois controles são um só: afrouxar o limite sozinho transformaria o endpoint em oráculo para varrer códigos.

Assinatura pelo token do signatário

Estas seis rotas são consumidas pela página de assinatura, e não pela sua integração. Elas usam o token de uso pessoal que o signatário recebe no link, um espaço de credencial distinto do da chave de API e do cookie do painel. Nenhum endpoint aceita um no lugar do outro. Estão documentadas aqui para você entender o que acontece do outro lado, e porque quem usa metodoEntrega: "LINK" monta a própria entrega.

GET

/assinatura/{token}

#

Abre a sessão de assinatura: o documento, os campos daquele signatário e os fatores que ele ainda precisa cumprir. Registra a visualização na trilha e dispara document.viewed.

AutenticaçãoToken do signatário
POST

/assinatura/{token}/leitura

#

Relata até que ponto o signatário percorreu o documento, com paginasLidas e segundos. Quando as páginas lidas alcançam o total, o servidor grava a conclusão da leitura na trilha e passa a permitir o aceite.

AutenticaçãoToken do signatário

A operação existe porque a exigência de "ler o documento inteiro antes de assinar" vivia apenas no navegador, e regra que existe só na interface não existe: uma chamada direta à API pulava a leitura sem deixar rastro. Com ela, a trava passa a ser do servidor.

Isto é evidência de percurso declarado, e não prova de leitura. O progresso é relatado pelo cliente. O servidor sabe que aquele token afirmou ter chegado à última página, de tal IP, em tal horário, após tantos segundos; ele não sabe, e não tem como saber, se olhos humanos leram o texto. Medir o tempo torna um percurso instantâneo implausível, nunca impossível.

A consequência é comercial, e vale repetir: material que prometer "comprovamos que o signatário leu o documento" afirma mais do que o sistema entrega, e é exatamente a frase que aparece citada quando alguém contesta. A formulação que o certificado usa é "o signatário percorreu as N páginas do documento, tendo permanecido X segundos, com registro de IP e horário".

POST

/assinatura/{token}/aceite

#

Registra que o signatário leu e concordou com um texto específico, em uma versão específica, identificado por textoAceiteId ou textoHash. Grava o aceite na trilha com IP, navegador e horário.

AutenticaçãoToken do signatário

É uma operação própria, e não um booleano dentro do assinar, por três razões. Um booleano não prova que alguém concordou com um texto: ele afirma que um campo veio marcado, e dois anos depois a pergunta em disputa nunca é se a pessoa clicou, e sim com o quê ela concordou, exatamente. Aceitar e assinar são atos distintos, e a distância entre eles às vezes é o que se discute. E quem concordava e abandonava não deixava registro nenhum, porque a linha de assinatura nunca chegava a ser criada, descartando um fato relevante em negociação interrompida.

POST

/assinatura/{token}/otp

#

Dispara o código de uso único pelo canal exigido. Cada disparo consome a medição correspondente, e é por isso que o reenvio de código aparece na fatura.

AutenticaçãoToken do signatário
POST

/assinatura/{token}/autenticar

#

Cumpre um fator: valida o código de OTP, o código do aplicativo autenticador ou os dados pessoais. Quando o último fator exigido é cumprido, dispara signer.authenticated.

AutenticaçãoToken do signatário
POST

/assinatura/{token}/assinar

#

Consuma a assinatura com os valores dos campos, registrando IP, agente, horário e localização aproximada. Recusa com AUTENTICACAO_INCOMPLETA se algum fator exigido não foi cumprido.

AutenticaçãoToken do signatário
POST

/assinatura/{token}/recusar

#

Recusa com motivo, aplicando pararSeRecusado quando configurado. Dispara document.refused.

AutenticaçãoToken do signatário
GET

/assinatura/{token}/arquivo

#

Permite ao signatário baixar o documento que está assinando, e a cópia assinada depois da conclusão.

AutenticaçãoToken do signatário
POST

https://adigitalmax.com.br/api/v1/contatos

#

Registra o contato do formulário do site institucional. Junto com a validação pública, é uma das duas únicas operações anônimas do sistema, e mora no host institucional pelo mesmo motivo: manter a chamada de mesma origem, sem CORS e sem afrouxar a política de segurança de conteúdo do site.

AutenticaçãoNenhuma Limite5 por hora e 20 por dia por IP

Não existe versão em api.adigitalmax.com.br, e a ausência é deliberada: formulário de contato não tem caso de uso servidor a servidor, e uma segunda cópia significaria manter dois conjuntos de defesa anti-robô em sincronia, sendo que o que sai de sincronia vira a porta que o robô usa. Esta rota não interessa à sua integração; está listada para completude do contrato.

Organização e membros

Não existe rota /me. Para conferir se a sua credencial funciona, use GET /organizacao: ela é a chamada mais barata autenticada da API e devolve a organização dona da chave.

GET

/organizacao

#

A organização dona da credencial, com dados cadastrais, plano e a marca aplicada aos e-mails de convite e à página de assinatura.

Escopoorganizacao:lerPapelVISUALIZADOR
PATCH

/organizacao

#

Altera dados cadastrais e a marca: cor primária, logotipo, nome do remetente, endereço de resposta e mensagem padrão.

Escopoorganizacao:escreverPapelADMINISTRADOR
GET

/organizacao/membros

#

Membros da organização com papel, estado e último acesso.

Escopoorganizacao:lerPapelOPERADOR
POST

/organizacao/membros

#

Convida alguém para a organização. O convite é amarrado ao e-mail e de uso único. Não é possível convidar como PROPRIETARIO: a propriedade se transfere, não se concede.

Escopoorganizacao:escreverPapelADMINISTRADOR
PATCH

/organizacao/membros/{membroId}

#

Troca o papel ou o estado do membro. Não permite remover o último proprietário.

Escopoorganizacao:escreverPapelADMINISTRADOR
DELETE

/organizacao/membros/{membroId}

#

Remove o membro e invalida as sessões dele na organização. Remover precisa cortar o acesso agora, e não no vencimento do token.

Escopoorganizacao:escreverPapelADMINISTRADOR

Chaves de API e webhooks

GET

/chaves-api

#

Chaves da organização, com prefixo, escopos, último uso e último IP. Nunca devolve o segredo.

AutenticaçãoSomente sessão de usuário PapelADMINISTRADOR

As três rotas de chave não aceitam chave de API, apenas a sessão do painel. Uma chave que pudesse criar outra chave tornaria a revogação inútil: quem roubasse uma emitiria outra antes de você cortar a primeira.

POST

/chaves-api

#

Cria a chave com os escopos escolhidos. O valor completo, adx_live_<prefixo>.<segredo>, aparece uma única vez, nesta resposta. A plataforma guarda apenas o hash do segredo.

AutenticaçãoSomente sessão de usuárioPapelADMINISTRADOR
DELETE

/chaves-api/{chaveId}

#

Revoga a chave imediatamente, sem carência. Requisições com ela passam a responder CREDENCIAL_INVALIDA.

AutenticaçãoSomente sessão de usuárioPapelADMINISTRADOR
GET

/webhooks

#

Webhooks cadastrados, com URL, eventos assinados, estado e resultado da última entrega.

Escopowebhooks:gerenciarPapelADMINISTRADOR
POST

/webhooks

#

Cadastra um endpoint. O segredo de assinatura HMAC é devolvido uma única vez, nesta resposta, e não se repete em nenhuma outra.

Escopowebhooks:gerenciar PapelADMINISTRADOR

A URL é validada a cada entrega, e não só no cadastro: IP privado, loopback, link-local, endereço de metadados de nuvem e redirecionamento para faixa interna são recusados. Validar só no cadastro não basta, porque o DNS pode mudar depois.

O formato do envio e a validação da assinatura estão em Webhooks.

PATCH

/webhooks/{webhookId}

#

Edita URL, eventos ou estado.

Escopowebhooks:gerenciarPapelADMINISTRADOR
DELETE

/webhooks/{webhookId}

#

Remove a assinatura de eventos.

Escopowebhooks:gerenciarPapelADMINISTRADOR
GET

/webhooks/{webhookId}/entregas

#

Histórico de entregas com evento, estado, número de tentativas, código de resposta do seu servidor e o erro, quando houve.

Escopowebhooks:gerenciarPapelADMINISTRADOR

Consumo e cobrança

GET

/consumo

#

A medição do período vigente, por tipo, com franquia e excedente. É como você prevê custo sem esperar a fatura. Veja Consumo e o detalhamento em Limites e consumo.

Escopoconsumo:ler PapelADMINISTRADOR
GET

/consumo/extrato

#

O consumo linha a linha, em vez de agregado por tipo. É o que permite atribuir custo a um cliente seu, e não só ao período.

Escopoconsumo:lerPapelADMINISTRADOR
GET

/assinatura-plano

#

Plano vigente, franquias e estado de pagamento.

Escopoconsumo:lerPapelPROPRIETARIO
GET

/faturas

#

Faturas emitidas, com itens e links de pagamento. Faturamento é do proprietário: o administrador não alcança por padrão.

Escopoconsumo:lerPapelPROPRIETARIO

Retenção e LGPD

GET

/lgpd/politicas-retencao

#

As políticas de retenção vigentes da organização, por categoria de documento.

PapelADMINISTRADOR
PUT

/lgpd/politicas-retencao

#

Define os prazos por categoria. Exige papel de proprietário porque expurgo é irreversível e alcança prova documental.

PapelPROPRIETARIO

Veja o estado da política em Limites. >>> PENDENTE DE BACKEND <<<

GET

/lgpd/solicitacoes

#

Solicitações de titular de dados abertas na organização, com estado e prazo legal.

PapelADMINISTRADOR
POST

/lgpd/solicitacoes

#

Abre uma solicitação de titular: acesso, correção, exportação ou exclusão. O tratamento tem carência e confirmação, e nunca apaga documento sob obrigação legal de guarda.

PapelOPERADOR

Sessão do painel

Estas dezesseis rotas são do usuário do painel, não da sua integração. Elas usam o cookie adx_sessao, e não aceitam chave de API. Se você está integrando um sistema, nenhuma delas lhe interessa: use chave de API ou OAuth. Estão listadas para completude do contrato.

grupo

Autenticação do painel

#
RotaO que faz
POST /autenticacao/cadastroCria conta e a primeira organização.
POST /sessoesLogin. Emite o cookie de sessão e o valor do X-CSRF-Token.
GET /sessoesSessões ativas do usuário, com dispositivo e último uso.
DELETE /sessoesRevoga todas as sessões. É o botão de pânico depois de um vazamento de senha.
DELETE /sessoes/atualLogout.
POST /sessoes/renovarRenova a sessão. O identificador é trocado a cada renovação.
DELETE /sessoes/{sessaoId}Revoga uma sessão específica.
POST /sessoes/desafioResponde ao segundo fator do login.
POST /autenticacao/senha/recuperacaoDispara o e-mail de redefinição. A resposta é idêntica exista ou não a conta.
POST /autenticacao/senha/redefinicaoTroca a senha por token de uso único e invalida todas as sessões.
GET /autenticacao/convites/{token}Mostra o convite antes do aceite.
POST /autenticacao/convites/{token}/aceitarAceita e entra na organização.
POST /autenticacao/2faRegistra o segundo fator do usuário do painel.
POST /autenticacao/2fa/confirmacaoConfirma o registro com o primeiro código.
POST /autenticacao/2fa/recuperacaoReemite os códigos de recuperação.
DELETE /autenticacao/2faDesativa o segundo fator.

Toda operação com efeito colateral autenticada por cookie exige o cabeçalho X-CSRF-Token, cujo valor acompanha a criação da sessão. Cookie sozinho é vulnerável a requisição forjada entre sites, e SameSite=Lax reduz o problema sem eliminá-lo. Este grupo tem limite próprio de 10 requisições por minuto por IP.

Objetos

objeto

Documento

#
CampoTipoDescrição
iduuidIdentificador do documento.
titulostringNome visível ao signatário.
descricaostringTexto interno, não mostrado ao signatário.
statusStatusDocumentoEstado no ciclo de assinatura.
nivelAssinaturaNivelAssinaturaNível contratado para o documento.
fatoresExigidosarray de FatorAutenticacaoExigido de todo signatário.
pastaIduuid|nullnull quando está na raiz.
envelopeIduuid|nullEnvelope a que pertence, quando houver.
ordenadobooleanRespeita a ordem dos signatários, um de cada vez.
recusavelbooleanPermite ao signatário recusar com motivo.
pararSeRecusadobooleanInterrompe o fluxo na primeira recusa.
lembreteDIARIO|SEMANALCobrança automática de quem não assinou.
prazoEmdate-timeData limite para assinar.
expiraEmdate-timeExpiração do documento. É distinta do prazo, e o contrato mantém as duas.
criadoEm, atualizadoEmdate-timeMarcos do documento.
signatariosarray de Signatario 
camposarray de CampoAusente na forma resumida da listagem.
entrada

DocumentoEntrada

#

O que vai na parte de dados de POST /documentos. Obrigatório: titulo.

CampoRegraDescrição
titulo !1 a 300 caracteresNome do documento.
descricaoaté 2000Texto interno.
pastaIduuid|nullPasta de destino.
envelopeIduuid|nullEnvelope a que o documento pertence.
nivelAssinaturaenumVeja NivelAssinatura.
fatoresExigidosmínimo 1 itemFatores exigidos de todo signatário. Nível SEGURA exige ao menos um fator de OTP.
ordenadopadrão falseAssinatura em fila conforme a ordem.
recusavelpadrão true 
pararSeRecusadopadrão true 
mensagematé 2000Texto do convite.
lembreteDIARIO|SEMANALOmitir desliga o lembrete.
prazoEm, expiraEmdate-timePrazo para assinar e expiração do documento.
modeloEmailIduuid|nullModelo de e-mail do convite.
responderParaemailEndereço de resposta deste envio.
signatariosarrayVeja SignatarioEntrada.
camposarrayVeja CampoEntrada. Ficam no nível do documento, e cada um aponta o dono por signatarioId.

Não há campo de organização. Se tenantId, organizacaoId ou equivalente chegar neste corpo, é descartado antes da desserialização e a tentativa vira evento de segurança.

objeto

Signatario

#

Os campos de SignatarioEntrada, mais os somente-leitura: id, status (StatusSignatario), link (presente quando metodoEntrega é LINK), enviadoEm, visualizadoEm, assinadoEm, motivoRecusa e fatoresCumpridos.

entrada

SignatarioEntrada

#
CampoTipoDescrição
funcao !FuncaoSignatarioÉ o único campo obrigatório.
nomestringAté 200 caracteres, como deve constar no certificado.
emailemail 
telefonestringE.164. Obrigatório quando a entrega ou o fator for SMS ou WhatsApp.
cpfstringConferido no fator DADOS_PESSOAIS.
dataNascimentodateConferida junto com o CPF.
metodoEntregaMetodoEntrega 
fatoresExigidosarrayReforça os fatores do documento para este signatário. Nunca reduz: o conjunto do signatário precisa conter o do documento.
ordemintegerA partir de 1. Só tem efeito em documento ordenado.
travarDadosbooleanImpede o signatário de corrigir nome ou CPF na tela de assinatura.
clienteIduuid|nullLiga o signatário a um contato do seu cadastro.
entrada

CampoEntrada

#
CampoRegraDescrição
tipo !TipoCampoO que o campo recebe.
pagina !a partir de 1Como o leitor humano conta.
x, y !0 a 1Fração da largura e da altura da página, origem no canto superior esquerdo.
largura, altura !maior que 0, até 1Frações das mesmas dimensões.
signatarioIduuid|nullDono do campo. null em campo de leitura preenchido pelo remetente.
zpadrão 0Ordem de sobreposição.
rotuloaté 100Texto de apoio mostrado ao signatário.
obrigatoriopadrão true 
valorPadraostringPré-preenchimento.

A coordenada é relativa e não absoluta em pontos porque o mesmo posicionamento precisa valer para A4, carta e paisagem, e porque o PDF pode ser reescalado na renderização. Ponto fixo quebra em silêncio quando o cliente sobe o mesmo contrato em outro tamanho de papel. O campo tem que caber na página: x + largura <= 1 e y + altura <= 1.

objeto

Envelope

#

id, titulo, status, criadoEm, enviadoEm e a lista de documentos que ele contém. O envelope é a unidade de medição de ENVELOPE_ENVIADO.

objeto

Pasta

#

id, nome, paiId (null na raiz), quantidadeDocumentos e criadaEm.

objeto

Modelo

#

id, nome, descricao, escopo, paginas, vezesUsado, variaveis (nomes declarados no PDF), papeis (cada um com id, rotulo, funcao, ordem e fatoresExigidos) e campos.

objeto

EventoAuditoria

#

id, acao, tipoAtor, ator, ocorridoEm, ip, porta, agenteUsuario, detalhe, hash do elo na cadeia, e geolocalizacao com país, estado, cidade, latitude, longitude e precisão. A geolocalização é aproximada por IP e a precisão vem declarada; não é GPS e não deve ser apresentada como se fosse.

objeto

Certificado

#

id, codigo (formato ADX-CERT-XXXXXXXXXX), versao, nivelAssinatura, hashDocumento, hashConteudo (SHA-256 do pacote de evidências), hashAnterior, hash, emitidoEm, arquivoUrl, qrConteudo e conteudo.

O conteudo é o pacote de evidências congelado: dados do documento, hashes, e para cada signatário o identificador da transação, nome, contato usado, fatores exigidos e usados, datas de cada passo, IP e dados técnicos, mais a sequência integral de eventos com o hash de cada elo.

objeto

ResultadoValidacao

#

resultado (AUTENTICO, ADULTERADO ou NAO_ENCONTRADO), codigo, hashRecebido, documento (nome, páginas, criadoEm, finalizadoEm, algoritmoHash, hashArquivo e nivelAssinatura), signatarios (nome, emailMascarado, papel, status, assinadoEm, ip e uma descrição legível dos fatores usados) e manifesto (versão, emitidoEm e codigoCertificado).

objeto

Webhook

#

id, url, eventos, ativo, descricao, criadoEm, ultimaEntregaEm e ultimaEntregaStatus. O campo segredo aparece apenas na resposta da criação.

objeto

EntregaWebhook

#

id, eventoId, webhookId, evento, status, tentativas, ocorridaEm, proximaTentativaEm, respostaHttp, duracaoMs e erro. O eventoId é a chave de idempotência do seu lado.

objeto

Consumo

#

periodo com inicio e fim, e medicoes, uma lista de Medicao com tipo (TipoMedicao), quantidade, franquia, excedente e valorExcedenteCentavos.

objeto

Pagina

#

itens (array), total (integer, sob o mesmo escopo dos itens) e proximoCursor (string ou null, ausente na última página).

objeto

Erro

#

Erro no formato RFC 9457 (problem details), com um campo codigo estável para o cliente ramificar sem depender do texto.

application/problem+json
{
  "type": "https://docs.adigitalmax.com.br/erros.html#nao_encontrado",
  "title": "Recurso não encontrado",
  "status": 404,
  "detail": "Recurso não encontrado.",
  "instance": "/v1/documentos/6f2a1c94-8b3d-4e57-9a20-71c5f0d3ab48",
  "codigo": "NAO_ENCONTRADO",
  "requestId": "01J9M4X7QK2ZB8N3P6R0T5V2WY"
}

Em erro de validação há também erros, um arranjo de objetos com campo e mensagem. A mensagem nunca revela nome de tabela, consulta, rastro de pilha nem a razão exata de uma negação entre organizações; o detalhe completo vai para o log interno, ligado ao requestId. O catálogo completo está em Erros.

Enumerações

Pode ser acrescentado valor novo a qualquer enumeração sem mudar a versão da API. Trate valor desconhecido como um caso a registrar e ignorar, e nunca como erro fatal: um switch sem ramo padrão é a causa mais comum de integração que quebra em uma terça-feira sem ninguém ter mexido nela.

enum

NivelAssinatura

#
ValorO que o produto entrega
ELETRONICAE-mail mais evidências básicas.
SEGURAE-mail mais OTP por SMS ou TOTP, com trilha completa.
AVANCADAIdentidade verificada, integridade e evidências reforçadas.
ICP_BRASILAssinatura qualificada por prestador. Ainda não disponível; declarado no contrato porque o modelo o suporta desde o início. >>> PENDENTE DE BACKEND <<<
enum

StatusDocumento

#
ValorSignifica
RASCUNHOCriado e ainda não enviado. É o único estado em que quase tudo é editável.
AGUARDANDO_ASSINATURASEnviado, ninguém assinou ainda.
PARCIALMENTE_ASSINADOPelo menos um assinou e falta alguém.
ASSINADOTodos assinaram. É aqui que o certificado passa a existir.
RECUSADOAlguém recusou e pararSeRecusado estava ativo.
CANCELADOInterrompido por quem enviou.
EXPIRADOO prazo venceu sem conclusão.
enum

FatorAutenticacao

#
ValorO que exigeExige do payload
EMAILAcesso ao link enviado ao e-mail declarado.email
SMS_OTPCódigo de uso único por SMS. Consome a medição SMS_ENVIADO, inclusive nos reenvios.telefone
WHATSAPP_OTPCódigo de uso único por WhatsApp.telefone
TOTPCódigo do aplicativo autenticador do signatário, como o Google Authenticator. Não tem custo por uso.nada além do e-mail
DADOS_PESSOAISConferência de CPF e data de nascimento contra o que você declarou.cpf e dataNascimento
SELFIECaptura de selfie sem prova de vida. >>> PENDENTE DE BACKEND <<< 
BIOMETRIA_FACIALSelfie com prova de vida, comparada ao documento. >>> PENDENTE DE BACKEND <<<cpf
DOCUMENTO_FOTOFoto do documento de identidade. >>> PENDENTE DE BACKEND <<< 
CERTIFICADO_ICPCertificado digital ICP-Brasil A1 ou A3. >>> PENDENTE DE BACKEND <<<cpf

Exigir dois fatores simultâneos é simplesmente informar dois valores em fatoresExigidos. Não existe booleano de "exigir todos", e não existe modo "qualquer um destes": a lista é o conjunto exigido, e todos precisam ser cumpridos. ["EMAIL", "SMS_OTP"] significa e-mail e SMS.

enum

FuncaoSignatario

#
  • ASSINAR
  • APROVAR
  • RECONHECER
  • TESTEMUNHAR
  • ACUSAR_RECEBIMENTO
  • ENDOSSAR

A equivalência com SIGN, APPROVE, RECOGNIZE, SIGN_AS_A_WITNESS, ACKNOWLEDGE e ENDORSE do Autentique está em Migração.

enum

StatusSignatario

#
  • PENDENTE
  • ENVIADO
  • VISUALIZADO
  • ASSINADO
  • RECUSADO
  • CANCELADO
  • FALHA_ENTREGA

FALHA_ENTREGA significa que o e-mail voltou ou o SMS não foi aceito. Trate como acionável: quase sempre é endereço errado, e a correção é corrigir e reenviar.

enum

MetodoEntrega

#
  • EMAIL
  • LINK
  • WHATSAPP
  • SMS

LINK não envia nada: devolve a URL no campo link do signatário e a entrega passa a ser sua. É o método certo quando o seu produto já tem um canal com o cliente.

enum

TipoCampo

#
  • ASSINATURA
  • RUBRICA
  • NOME
  • DATA
  • CPF
  • CNPJ
  • EMAIL
  • TEXTO
  • CHECKBOX
  • IMAGEM
enum

Papel

#
ValorAlcance
PROPRIETARIOFaturamento, exclusão da organização e transferência de propriedade.
ADMINISTRADORUsuários, perfis, integrações e configuração.
OPERADORCria e envia documentos.
VISUALIZADORSomente leitura do que lhe foi compartilhado.

OPERADOR aqui é o usuário operacional da organização cliente. O operador da plataforma, funcionário do AdigitalMAX, é outro ator, tem superfície de rede separada com autenticação própria, nunca aparece neste enum e não é aceito nesta API.

enum

EscopoChave

#
  • organizacao:ler
  • organizacao:escrever
  • documentos:ler
  • documentos:escrever
  • signatarios:ler
  • signatarios:escrever
  • pastas:ler
  • pastas:escrever
  • modelos:ler
  • modelos:escrever
  • arquivos:ler
  • auditoria:ler
  • webhooks:gerenciar
  • consumo:ler

O que cada um concede está em Autenticação. Os mesmos nomes valem como escopos de OAuth 2.0.

enum

EventoWebhook

#
EventoDisparado quando
document.createdO documento é criado, sempre como rascunho.
document.sentSai do rascunho e os convites partem. Marca o consumo de um envelope.
document.viewedUm signatário abre o documento pela primeira vez.
signer.authenticatedUm signatário cumpre todos os fatores exigidos.
document.signedUm signatário assina. Dispara uma vez por signatário.
document.completedO último signatário assinou. É aqui que o PDF assinado e o certificado passam a existir.
document.refusedUm signatário recusa, com motivo no payload.
document.expiredO prazo venceu sem conclusão.
document.cancelledQuem enviou cancelou.

São os únicos valores minúsculos do contrato, no formato recurso.acao, por serem contrato público já definido. O formato do envio e a validação da assinatura estão em Webhooks.

enum

TipoMedicao

#
  • ENVELOPE_ENVIADO
  • DOCUMENTO_ENVIADO
  • ASSINATURA_COLETADA
  • REQUISICAO_API
  • EMAIL_ENVIADO
  • SMS_ENVIADO
  • WHATSAPP_ENVIADO
  • VERIFICACAO_BIOMETRICA
  • CARIMBO_TEMPO
  • ARMAZENAMENTO_MB_DIA

O que dispara cada contador está em Limites e consumo.

enum

Código de erro

#

Os dezesseis valores estáveis do campo codigo. É por eles que o seu cliente ramifica, e não pelo texto nem pelo status.

  • NAO_AUTENTICADO
  • CREDENCIAL_INVALIDA
  • MFA_OBRIGATORIO
  • SENHA_FRACA
  • TOKEN_INVALIDO
  • ESCOPO_INSUFICIENTE
  • PAPEL_INSUFICIENTE
  • NAO_ENCONTRADO
  • ENTRADA_INVALIDA
  • DOCUMENTO_IMUTAVEL
  • CERTIFICADO_INDISPONIVEL
  • AUTENTICACAO_INCOMPLETA
  • LINK_INDISPONIVEL
  • FRANQUIA_ESGOTADA
  • LIMITE_EXCEDIDO
  • CONFLITO

O que fazer em cada um está em Erros.

Nada nesta página casa com a sua busca. Tente o nome da rota sem barra, o nome do campo em camelCase, ou um valor de enumeração em maiúsculas.