Códigos de erro

1. Formato

{
  "error_code": "field_missing",
  "message": "Field 'fund_id' is required",
  "field": "fund_id",
  "request_id": "req_8a3f2c1b9d4e"
}

Em rejeições de elegibilidade via webhook, a forma é:

{
  "event": "loan_rejected",
  "data": {
    "reason": "<código definido na homologação do fundo>",
    "reason_detail": "Explicação humana com os valores que causaram a rejeição"
  }
}

Programe contra error_code e reason — não contra o texto da mensagem (que pode mudar).

2. Códigos HTTP

HTTPSignificadoEstratégia
200Sucesso (operação síncrona)Processar resposta
201Criado (operação aceita para processamento assíncrono)Aguardar webhook
400Payload inválido — JSON malformado, campo ausente, formato erradoCorrigir e reenviar (não retentar idêntico)
401Não autenticado — token ausente, expirado ou inválidoRenovar via POST /token
403Sem permissão — token válido mas sem escopoRevisar escopo contratado
404Recurso inexistente — originator_proposal_code não encontradoVerificar se a operação existe
409Conflito — chave de idempotência já existe com payload diferenteUsar nova chave ou ajustar payload
422Estado inválido — operação não pode receber esta açãoConsultar estado atual via GET
429Rate limit excedidoBackoff exponencial — ver Rate limits
500Erro inesperado IORQRetentar com backoff; abrir chamado se persistir
503Serviço temporariamente indisponívelRetentar com backoff

3. Códigos canônicos de erro (síncronos)

Validação de payload

error_codeHTTPSignificado
invalid_json400JSON do loan_data malformado
field_missing400Campo obrigatório ausente
field_invalid_format400Tipo errado ou formato inválido (ex: data fora do ISO 8601)
field_out_of_range400Valor fora dos limites aceitos

Upload de arquivos

error_codeHTTPSignificado
file_type_invalid400Arquivo não é PDF
file_too_large400Arquivo maior que 2 MB
file_name_mismatch400Nome do PDF não bate com backing_documents[].value
file_count_exceeded400Mais de 5 arquivos na requisição
file_corrupted400PDF inválido ou criptografado

Autenticação e autorização

error_codeHTTPSignificado
not_authenticated401Header Authorization ausente ou malformado
token_expired401Token expirado
token_invalid401Assinatura inválida
scope_insufficient403Token sem escopo para o endpoint
fund_not_allowed403fund_id fora da lista permitida

Estado e idempotência

error_codeHTTPSignificado
resource_not_found404originator_proposal_code não encontrado
idempotency_conflict409Chave já existe com payload diferente
invalid_state_transition422Operação não pode receber essa ação no estado atual

Sistema

error_codeHTTPSignificado
rate_limited429Quota excedida — ver Rate limits
internal_error500Erro inesperado
service_unavailable503Manutenção ou degradação

4. Motivos de rejeição (webhook loan_rejected)

Os motivos canônicos de rejeição são definidos por fundo no momento em que os critérios de elegibilidade são desenhados. Cada reason corresponde a uma regra implementada para o regulamento do FIDC e a política do originador.

Ao homologar um fundo, o time da IORQ entrega a lista de reason aplicáveis e seus significados. Ver o processo de definição em Critérios de elegibilidade.

O campo reason sempre vem no formato snake_case e é estável dentro do ciclo de vida do fundo — mudanças requerem comunicação prévia.

5. Como reportar um erro

Para erros 5xx ou comportamento inesperado:

  1. Capture o header x-request-id da resposta
  2. Anote o originator_proposal_code envolvido (se aplicável)
  3. Anote o horário da chamada com timezone
  4. Abra um ticket no canal de suporte combinado com a IORQ

6. Próximos passos