Atualizado em .
Arquitetura parruda e tolerante a falhas
O motor fiscal da Contora foi desenhado sob o princípio de que redes falham e servidores do governo saem do ar. Nossa arquitetura não tenta apenas repassar a falha para o seu ERP; ela implementa mecanismos de proteção ativa, como idempotência, filas resilientes e circuit breaker.
Chave de Idempotência (Idempotency Key)
Para evitar que falhas de conexão de rede ou retentativas automáticas gerem notas fiscais duplicadas ou cobranças repetidas, a API aceita uma chave de idempotência.
Envie o cabeçalho Idempotency-Key (ou X-Idempotency-Key) com um valor único (recomenda-se um UUID v4 por requisição).
curl -X POST https://fiscal.contora.com.br/api/v1/nfe/drafts/18f017f7-a69c-4fa6-89c7-05f52fcc8be4/dispatch \
-H 'Authorization: Bearer fct_...' \
-H 'Idempotency-Key: e9a2c3d4-b5e6-4f7a-8b9c-0d1e2f3a4b5c' \
-H 'Content-Type: application/json' \
-d '{"action": "authorize"}'
X-Fiscal-Idempotency-Replayed: 1.idempotency_key_conflict).Proteção automática contra duplicidade (Rejeição 539)
Além da Idempotency-Key, o dispatch com action: authorize confere,
antes de falar com a SEFAZ, se aquele número e série já foram autorizados antes para a mesma empresa e
ambiente — mesmo sem chave de idempotência, e mesmo que a chamada venha de um documento diferente. Se já
existir, a API devolve o documento já autorizado na hora (HTTP 200, com o mesmo access_key e
protocolo), sem enviar uma nova tentativa à SEFAZ.
numero + serie — seja
por engano, seja reagindo a um timeout que na verdade tinha dado certo — costumava gerar a
Rejeição 539 (Duplicidade com chave diferente) só depois de um
envio inteiro à SEFAZ. Agora isso é resolvido localmente, sem esperar o retorno do governo.
Idempotency-Key: ela cobre reenvio da mesma requisição
(mesmo payload) dentro de 24h; a checagem de número/série cobre reenvio do mesmo número de nota
por qualquer via, sem prazo de expiração.
Fila assíncrona com retentativas automáticas
A autorização de notas fiscais não bloqueia sua conexão HTTP. Ao disparar o dispatch, o documento entra em nossa fila de alta prioridade.
queued ou processing imediatamente, e é notificado via Webhook assim que a SEFAZ devolve o resultado definitivo.
Retry do cliente HTTP
Repita apenas timeouts, HTTP 408, 429 e 5xx. Não repita automaticamente erros 4xx permanentes de
autenticação, validação ou regra de negócio. Quando houver Retry-After, aguarde o período
informado; caso contrário, use backoff exponencial com jitter.
Idempotency-Key e o
mesmo corpo. Trocar o payload com a mesma chave retorna HTTP 409.
Indisponibilidade da SEFAZ
Em falhas transitórias, a plataforma registra a tentativa e usa fila, retry e circuit breaker para proteger a operação. Emissão SVC e contingência offline de NFC-e ainda não fazem parte do contrato público da API; o ERP não deve presumir chaveamento automático de modalidade.
Disponibilidade e Circuit Breakers
Para proteger tanto a nossa infraestrutura quanto o tempo de resposta do seu ERP, implementamos Circuit Breakers em todas as comunicações com órgãos públicos.
Fluxo recomendado para integração "inquebrável"
- Gere chaves de idempotência únicas para cada documento (ex: concatenar
ID_PEDIDO + TIPO_ACAO). - Cadastre Webhooks para ouvir os eventos definitivos (
document.authorized,document.rejected). - Monitore os cabeçalhos de Rate Limit para não exceder a capacidade do seu plano.
- Se receber um erro 5xx ou timeout, repita a requisição usando exatamente a mesma chave de idempotência.