← Blog

Integração · 10 de junho de 2026 · 9 min de leitura

Gerar documentos por API com idempotência

POST /v1/render com Idempotency-Key: retries seguros, replays sem custo e erros RFC 9457 que dizem exatamente o que corrigir.


Sistemas que geram documentos transacionais têm um inimigo clássico: o retry. A rede falha depois do pedido chegar, o cliente repete, e nascem dois contratos. A API da DOPTIZER elimina esta classe de bugs com idempotência nativa.

Autenticação

curl -X POST https://api.doptizer.pavulla.com/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "integracao@empresa.pt", "password": "•••"}'
# → { "token": "eyJ…", "expires_at": "…" }

Use o token em todas as chamadas: Authorization: Bearer {token}. Cada resposta traz um correlation id — inclua-o quando reportar problemas.

O render idempotente

A Idempotency-Key é o contrato de segurança
curl -X POST https://api.doptizer.pavulla.com/v1/render \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: pedido-8842" \
  -H "Content-Type: application/json" \
  -d '{
    "templateVersionId": "9d2f…",
    "format": "pdf",
    "data": { "cliente": { "nome": "Ana Silva" }, "valor": 1250.5 }
  }'
  • Primeira chamada: gera o documento, devolve documentId e checksum.
  • Chamadas repetidas com a MESMA chave: devolvem o MESMO documento com replayed: true — sem gerar de novo, sem consumir quota.
  • Use uma chave estável derivada do vosso domínio (ex.: o id do pedido no vosso sistema).

Erros que se corrigem sozinhos

Todos os erros seguem RFC 9457 (problem+json): um type estável para programar contra, um detail legível para humanos e, quando aplicável, a lista de campos inválidos.

{
  "type": "https://errors.doptizer.com/render/template_not_published",
  "title": "Template rule violated",
  "status": 409,
  "detail": "A versão indicada não está publicada — só versões publicadas geram documentos.",
  "correlationId": "01J…"
}

Quota excedida responde 402 com metric, used, limit e resets_at — trate-o como sinal de negócio, não como bug.

Preview sem custo

POST /v1/render/preview corre o mesmo pipeline mas não persiste nem consome quota, e devolve HTML com watermark — perfeito para mostrar o documento na vossa UI antes de gerar a sério.

Experimenta o que acabaste de ler — grátis durante o lançamento.

Criar conta gratuita