Pular para o conteúdo
AdigitalMAX AdigitalMAX API v1
Documentação da API

Assinatura eletrônica dentro do seu sistema

A API do AdigitalMAX envia um PDF para assinatura, acompanha cada signatário até a conclusão e devolve o arquivo assinado com trilha de auditoria, certificado de conclusão e código de validação pública. É REST sobre HTTPS, com JSON, descrita em OpenAPI 3.1. Se você já integrou com qualquer API de pagamento, isto vai parecer familiar em dez minutos.

>>> PENDENTE DE BACKEND <<<

Esta documentação foi escrita a partir do contrato canônico docs/CONTRATO_API.openapi.yaml, e o servidor de produção ainda não está no ar. Nenhum exemplo desta página foi executado contra uma API real. Tudo que ainda não pôde ser verificado está marcado com o mesmo aviso, no ponto exato em que aparece.

O que a API faz

O ciclo inteiro cabe em cinco passos, e a API existe para você automatizar todos:

  1. Você cria o documento com o PDF e os signatários

    Um POST multipart com o arquivo, a lista de signatários, a ordem em que eles assinam e onde cada campo de assinatura fica na página. O documento nasce em rascunho e não dispara nada.

  2. Você confere e manda enviar

    Enviar é uma chamada separada e explícita, e essa separação é deliberada: disparar por efeito colateral de uma criação é como se envia contrato errado para cliente. Entre uma coisa e outra você tem uma janela para validar.

  3. Nós entregamos e autenticamos cada signatário

    O signatário é externo e não tem conta na plataforma. Ele recebe um link por e-mail, WhatsApp ou SMS, passa pelos fatores que você exigiu (do simples clique em link até dois fatores simultâneos) e assina no navegador.

  4. Você acompanha por webhook, não por sondagem

    Cada mudança de estado vira um evento assinado com HMAC no seu endpoint. Existe consulta por GET para conciliação, mas quem integra bem usa webhook e economiza a cota de requisições.

  5. Você baixa o PDF assinado e o certificado

    O arquivo final sai com o manifesto: hash do original, trilha de auditoria com IP, horário e geolocalização aproximada de cada ato, e um código que qualquer pessoa confere em adigitalmax.com.br/validar, sem conta e sem login.

Níveis de assinatura, e como escolher

O nível é escolhido por documento, no campo nivelAssinatura, e determina o que a plataforma exige do signatário antes de aceitar a assinatura. Escolher acima do necessário encarece e aumenta o atrito; escolher abaixo enfraquece a prova quando ela for questionada.

Os quatro níveis, o que cada um entrega e onde cada um cabe.
Nível Valor O que o produto entrega Quando usar
Eletrônica ELETRONICA E-mail mais evidências básicas: IP, horário e agente registrados. Volume alto e risco baixo: recibo, termo de ciência, autorização interna.
Segura SEGURA E-mail mais OTP por SMS ou TOTP, com trilha completa. Exige ao menos um fator de OTP. Contrato de serviço, proposta comercial, termo com valor econômico.
Avançada AVANCADA Identidade verificada, integridade e evidências reforçadas. Crédito, locação, procuração, qualquer coisa que vá parar em juízo.
ICP-Brasil >>> PENDENTE DE BACKEND <<< ICP_BRASIL Assinatura qualificada por prestador, com PAdES e carimbo do tempo. Onde a lei exige assinatura qualificada.

O nível ICP-Brasil ainda não está disponível. Ele consta do contrato para que a integração já preveja o valor do enum, porque o modelo o suporta desde o início, e não porque ele funcione hoje. Não construa fluxo comercial em cima dele antes de nós anunciarmos a data.

Primeira chamada, em menos de cinco minutos

1. Pegue uma chave de sandbox

No painel, em Configurações → API → Chaves, crie uma chave com ambiente de teste. Ela tem o formato adx_test_<prefixo>.<segredo>, e o valor completo aparece uma única vez, na tela da criação: guardamos apenas o hash do segredo. Se você perder, revogue e crie outra. Detalhes de escopo, rotação e revogação estão em Autenticação.

2. Confirme que a chave funciona

GET /v1/organizacao é a chamada mais barata da API e serve de teste de fumaça: ela devolve a organização dona da chave. Se isto responder 200, sua autenticação está correta e todo o resto é detalhe de payload.

Não existe rota /me. Quem chega de outras APIs de assinatura procura por ela; aqui a identidade da credencial vem de /organizacao, porque a chave pertence a uma organização e não a uma pessoa.

#!/usr/bin/env bash
# Confere a chave e mostra a organizacao dona dela.
# A chave sai do painel: Configuracoes > API > Chaves.

set -euo pipefail

ADM_CHAVE="${ADM_CHAVE:?defina ADM_CHAVE com a sua chave adx_test_}"
ADM_BASE="https://api.adigitalmax.com.br/v1/sandbox"

curl --fail-with-body --silent --show-error \
  --request GET "$ADM_BASE/organizacao" \
  --header "Authorization: Bearer $ADM_CHAVE" \
  --header "Accept: application/json"

Primeiro envio de verdade

São duas chamadas: criar e enviar. O corpo da criação é multipart/form-data, porque tem arquivo dentro: a parte arquivo leva o PDF e a parte dados leva o JSON com tudo o mais.

#!/usr/bin/env bash
# Cria o documento e dispara. Duas chamadas, de proposito.

set -euo pipefail

ADM_CHAVE="${ADM_CHAVE:?defina ADM_CHAVE}"
ADM_BASE="https://api.adigitalmax.com.br/v1/sandbox"

# A parte "dados" e um JSON; a parte "arquivo" e o PDF.
DADOS='{
  "titulo": "Contrato de prestacao de servicos",
  "nivelAssinatura": "SEGURA",
  "fatoresExigidos": ["EMAIL", "SMS_OTP"],
  "ordenado": false,
  "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": 1, "x": 0.62, "y": 0.78, "largura": 0.28, "altura": 0.06 }
  ]
}'

DOC=$(
  curl --fail-with-body --silent --show-error \
    --request POST "$ADM_BASE/documentos" \
    --header "Authorization: Bearer $ADM_CHAVE" \
    --header "Idempotency-Key: primeiro-envio-2026-08-16-001" \
    --form "dados=$DADOS;type=application/json" \
    --form "arquivo=@./contrato.pdf;type=application/pdf"
)

DOC_ID=$(echo "$DOC" | jq -r '.id')
echo "Rascunho criado: $DOC_ID"

# Enviar e uma chamada separada. Ate aqui, nada saiu.
curl --fail-with-body --silent --show-error \
  --request POST "$ADM_BASE/documentos/$DOC_ID/enviar" \
  --header "Authorization: Bearer $ADM_CHAVE" \
  --header "Idempotency-Key: primeiro-envio-2026-08-16-001-enviar" \
  | jq '{id, status}'

As coordenadas de campo são fracionárias, de 0 a 1. A origem é o canto superior esquerdo da página, e x: 0.62 significa 62% da largura, não 62 pontos. Isso faz o campo cair no mesmo lugar em A4, carta e paisagem, e é a diferença mais comum entre a nossa API e as que usam pontos PostScript. O campo tem que caber na página: x + largura <= 1. Há um guia dedicado em Guias.

Coleção pronta e arquivo OpenAPI

Se o seu caminho preferido é clicar antes de programar, comece por aqui. A coleção do Postman traz as requisições desta documentação já montadas, com variáveis de ambiente para a chave e a URL base, e um exemplo de corpo em cada uma.

O arquivo OpenAPI é a fonte da verdade desta documentação, e não um subproduto dela. Se alguma coisa aqui divergir do contrato, o contrato vence e o texto está errado: nos avise em contato@adigitalmax.com.br com o trecho e a operação.

Seis conceitos que aparecem em todo lugar

O vocabulário da API. Vale ler uma vez antes de abrir a referência.
ConceitoO que é
Documento O PDF mais as regras de assinatura: quem assina, em que ordem, até quando, com que nível e com que fatores. É o recurso principal da API.
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 da franquia do plano, e um envelope enviado conta um, tenha ele um documento ou seis.
Signatário Quem assina. Não tem conta na plataforma e não precisa criar uma. É autenticado pelos fatores que você exigiu e acessa por um link de uso pessoal, com espaço de credencial separado do da sua chave.
Campo Um retângulo em uma página, ligado a um signatário, que recebe a assinatura, a rubrica, o CPF, uma data ou um texto. Sem campo de assinatura o documento não pode ser enviado.
Trilha de auditoria A lista imutável e encadeada por hash de tudo que aconteceu com o documento: criação, envio, abertura do link, cada fator cumprido, visualização, assinatura, recusa e download.
Certificado de conclusão O pacote de evidências congelado, com hash do original e do assinado, os fatores que cada signatário cumpriu e o código de validação pública. É versionado e encadeado: emitir de novo cria uma versão nova ligada por hash à anterior, e não sobrescreve.

Mapa da documentação