Documentação

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

HTTPcodeQuando ocorre
401UNAUTHORIZEDHeader Authorization ausente, malformado, ou chave revogada
403FORBIDDENChave válida mas organização com API desabilitada
402PAYMENT_REQUIREDSaldo abaixo do creditLineLimit (data: balance, limit, pricePerReport)
404NOT_FOUNDreportId inexistente ou pertencente a outra organização
422UNPROCESSABLE_CONTENTCPF inválido, validado antes de qualquer efeito colateral
429TOO_MANY_REQUESTSRate limit excedido (data: retryAfter, reason; header Retry-After)
500INTERNAL_SERVER_ERRORErro 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
  }
}