APIErros
Erros
Catálogo de erros HTTP e códigos de erro da API. Envelope JSON consistente em todas as respostas de erro.
Formato de erro
Todas as respostas de erro seguem o mesmo envelope:
{
"defined": false,
"code": "UNPROCESSABLE_CONTENT",
"status": 422,
"message": "Invalid CPF"
}Alguns erros incluem um objeto data com detalhes adicionais (por exemplo, 402 e 429):
{
"defined": false,
"code": "PAYMENT_REQUIRED",
"status": 402,
"message": "Credit line exceeded",
"data": {
"balance": -49000,
"limit": -50000,
"pricePerReport": 1500
}
}Catálogo de erros HTTP
| HTTP | code | Quando ocorre |
|---|---|---|
401 | UNAUTHORIZED | Header Authorization ausente, malformado, ou chave revogada |
403 | FORBIDDEN | Chave válida mas organização com API desabilitada |
402 | PAYMENT_REQUIRED | Saldo abaixo do creditLineLimit (data: balance, limit, pricePerReport) |
404 | NOT_FOUND | reportId inexistente ou pertencente a outra organização |
422 | UNPROCESSABLE_CONTENT | CPF inválido, validado antes de qualquer efeito colateral |
429 | TOO_MANY_REQUESTS | Rate limit excedido (data: retryAfter, reason; header Retry-After) |
500 | INTERNAL_SERVER_ERROR | Erro interno, reporte ao suporte |
Tratamento recomendado
const response = await fetch('https://minhacnh.doutormultas.com.br/api/v1/reports', { /* ... */ });
if (!response.ok) {
const err = await response.json();
switch (err.code) {
case 'UNAUTHORIZED':
// Chave inválida ou revogada — verificar configuração
break;
case 'PAYMENT_REQUIRED':
// Saldo insuficiente — err.data.balance / limit / pricePerReport disponíveis
break;
case 'TOO_MANY_REQUESTS': {
const retryAfter = response.headers.get('Retry-After');
// Aguardar retryAfter segundos e re-tentar
break;
}
case 'UNPROCESSABLE_CONTENT':
// CPF inválido — validar antes de enviar
break;
default:
// Logar e alertar
}
}