4xx/5xx) e um corpo JSON no formato
padrão abaixo.
Formato do erro
| Campo | Sempre presente | Descrição |
|---|---|---|
code | Sim | Código estável e legível por máquina (ex.: NOT_FOUND, VALIDATION_ERROR). |
message | Sim | Mensagem legível (fallback em pt-BR). |
key | Não | Chave de i18n, quando a mensagem é traduzível. |
params | Não | Parâmetros de interpolação da mensagem (ex.: { "email": "..." }). |
details | Não | Detalhes adicionais (ex.: erros por campo na validação). |
Códigos HTTP
| Status | Código típico | Significado | O que fazer |
|---|---|---|---|
400 | VALIDATION_ERROR | Corpo/parâmetros inválidos. | Corrigir o payload. Ver details. |
401 | UNAUTHORIZED | API key ausente ou inválida. | Verificar o header x-api-key. |
403 | FORBIDDEN | Sem permissão para a operação. | Verificar o tipo/escopo da chave. |
404 | NOT_FOUND | Recurso não existe (ou é de outra conta). | Conferir o ID. |
409 | CONFLICT | Conflito de estado (duplicado, transição inválida). | Tratar o caso específico. |
422 | UNPROCESSABLE_ENTITY | Requisição entendida, mas não processável. | Revisar a regra de negócio. |
429 | RATE_LIMIT_EXCEEDED | Limite de requisições excedido. | Aguardar e repetir com backoff. |
500 / 502 / 503 | INTERNAL_ERROR | Erro no servidor. | Repetir com backoff; se persistir, contatar o suporte. |
Erros de validação (400)
Quando um ou mais campos são inválidos, details traz a mensagem por campo:
Tratamento recomendado
Retry com backoff
Em
429 e 5xx, repita com backoff exponencial. Combine com Idempotency-Key para não
duplicar a operação.Não faça retry em 4xx
400/409/422 não se resolvem repetindo — corrija a requisição.Logue o code e o request id
Guarde
code, status e o corpo para diagnóstico. Não logue a API key.Idempotência sempre
Em escrita, use
Idempotency-Key para que retries sejam seguros. Ver
Convenções.
