We use cookies to improve your experience and analyze site traffic. By clicking “Accept”, you agree to our use of cookies.

Learn more about our privacy practices
Corvo
English

Erros

Formato dos erros, códigos `ERROR_*` e códigos HTTP retornados pela API.

Campos não declarados nos DTOs são rejeitados, inclusive em objetos aninhados. Toda falha REST usa o mesmo corpo; não existe mais um campo error separado.

Formato do erro

json

{
  "statusCode": 400,
  "code": "ERROR_VALIDATION",
  "message": "Request validation failed",
  "details": [
    {
      "field": "customer.taxId",
      "code": "ERROR_INVALID_TAX_ID",
      "message": "Invalid tax ID"
    }
  ],
  "requestId": "9f1fc995-4ee4-4a92-b285-cf8dff227a97"
}

Decida pelo code e pelo status HTTP. message é sempre uma string em inglês (nunca um array) e serve para diagnóstico. details é opcional: em validação é um array de { field, code, message }; em erros de aplicação são objetos públicos tipados. requestId corresponde ao header X-Request-Id e pode ser informado ao suporte. Falhas 5xx usam mensagens sanitizadas, sem detalhes internos.

Códigos HTTP

HTTPUso
200 / 201 / 202Ação concluída / recurso criado / processamento assíncrono aceito.
204Operação concluída sem corpo.
400DTO, parâmetro, JSON, UUID, limit ou cursor inválido.
401 / 403Autenticação ausente ou inválida / acesso negado (escopo, endpoint não habilitado para API key, empresa bloqueada).
404Recurso inexistente, inclusive de outro tenant.
409 / 410Conflito (CNPJ duplicado, idempotência conflitante, documentos ainda não prontos) / recurso encerrado.
413 / 415Payload excessivo / codificação não suportada.
422Validação fiscal no domínio ou regra de negócio rejeitada (prontidão, certificado, cota).
429Rate limit ou cooldown; respeite Retry-After.
500 / 502 / 503 / 504Erro interno / dependência inválida / indisponibilidade / timeout.

Códigos frequentes

codeQuando ocorre
ERROR_VALIDATIONCorpo ou query inválidos; veja details[].
ERROR_INVALID_LIMITlimit fora de 1–1000 ou não inteiro (400).
ERROR_INVALID_CURSORCursor adulterado ou de outra coleção, tenant ou filtro (400).
ERROR_RATE_LIMIT_EXCEEDEDLimite de requisições excedido (429).
ERROR_INSUFFICIENT_CREDITS / ERROR_QUOTA_EXCEEDEDCréditos ou cota insuficientes para emitir.
ERROR_COMPANY_NOT_READY / ERROR_COMPANY_BLOCKEDEmpresa sem certificado em live, ou bloqueada.
ERROR_IDEMPOTENCY_CONFLICTMesma Idempotency-Key com payload diferente (409).
ERROR_TAX_REGIME_NOT_SUPPORTEDSó empresas MEI e Simples Nacional são atendidas (422).
ERROR_VALIDATION com details[].code ERROR_DEDUCTION_NOT_ALLOWED_FOR_REGIME ou ERROR_SIMPLES_SUBLIMIT_NOT_SUPPORTEDDedução da base do ISS que o MEI ou o Simples não pode declarar, ou Simples acima do sublimite (regApTribSN 2 ou 3), que ainda não é suportado (422).
ERROR_GONEOperação encerrada, como a compra avulsa de créditos (410).

Boas práticas

  • Para respostas não 2xx, preserve status, code e requestId no diagnóstico, sem registrar a API key.
  • Faça retry com backoff para 429/503; em 429, aguarde o Retry-After. Na emissão, preserve a chave de idempotência e o payload.
  • Não repita erros de validação sem corrigir os dados indicados em details.