Pular para o conteúdo principal
Ao integrar com as APIs da Lerian, um tratamento robusto de erros é essencial para uma experiência de usuário fluida e um desempenho de aplicação resiliente. Este guia explica como os erros são estruturados, como classificá-los e como responder a diferentes categorias de erro.

Modelo de resposta de erro


Todas as APIs da Lerian retornam um objeto de erro estruturado para cada erro. O formato é consistente em todos os serviços:
{
   "code": "<error_code>",
   "title": "<error_title>",
   "message": "<error_message>"
}
Definições dos campos:
  • code: Um identificador único e estável para o erro. Use este campo para tratamento programático de erros.
  • title: Um resumo breve do problema.
  • message: Orientação detalhada e legível para resolver o erro.
Sempre use o campo code para identificar erros programaticamente. Títulos e mensagens podem evoluir para melhorar a clareza, mas os códigos de erro permanecem estáveis.

Detalhes de erro em nível de campo

Quando um erro se relaciona a campos específicos no payload da requisição, a resposta inclui um objeto fields com detalhes granulares:
{
   "code": "CRM-0003",
   "title": "Missing Fields in Request",
   "message": "Your request is missing one or more required fields. Please refer to the documentation to ensure all necessary fields are included in your request.",
   "fields": {
      "document": "document is a required field"
   }
}

Estrutura de códigos de erro


Cada código de erro segue um formato padronizado que identifica tanto o serviço quanto o erro específico:
<PREFIX>-<NNNN>
  • PREFIX (3 letras): Identifica o serviço ou plugin que produziu o erro.
  • NNNN (4 dígitos): Um número único dentro daquele serviço.

Prefixos de serviço

PrefixoServiço
AUTAccess Manager (autenticação)
IDEAccess Manager (identidade)
CRMCRM
FEEFees Engine
PIXPIX
BTFBank Transfer (TED)
TPLReporter
TRCTracer
O Midaz core usa códigos somente numéricos (ex.: 0002, 0009) sem prefixo. Todos os outros serviços incluem seu prefixo de 3 letras.

Faixas de números

Os códigos de erro são organizados em faixas que indicam a origem do erro:
FaixaCategoriaDescrição
00010099Sistema e middlewareAutenticação, autorização, cabeçalhos, rate limiting
01000999Específico do serviçoValidação, lógica de negócio e erros de domínio dentro do plugin
10001999Integração externaErros originados em provedores externos ou serviços upstream
Essa estrutura permite que você identifique rapidamente se um erro vem da sua requisição (números baixos), da lógica de negócio do serviço (faixa intermediária) ou de uma dependência externa (1000+).

Classificação de erros


Compreender o tipo de erro ajuda a decidir como responder. Os erros da Lerian se classificam em três categorias:

Erros de validação

Erros causados por dados incorretos ou ausentes na requisição. Características:
  • Status HTTP 400 (Bad Request)
  • Incluem um objeto fields quando campos específicos são os causadores
  • Sempre evitáveis validando os dados antes de enviar
Exemplos: Campos obrigatórios ausentes, UUIDs inválidos, valores de enumeração não suportados, campos que excedem o comprimento máximo. O que fazer: Verifique o objeto fields para detalhes específicos. Corrija os dados e tente novamente.

Erros de lógica de negócio

Erros causados por operações que violam regras de domínio ou restrições de estado de recursos. Características:
  • Status HTTP 404 (Not Found), 409 (Conflict) ou 422 (Unprocessable Entity)
  • Indicam que a requisição é sintaticamente válida mas não pode ser processada
Exemplos: Recurso não encontrado, conflitos de nome duplicado, transições de estado inválidas (ex.: ativar uma regra já ativa), saldo insuficiente. O que fazer: Verifique se o recurso existe e está no estado esperado. Leia a mensagem de erro para a restrição específica que foi violada.

Erros de sistema

Erros causados por problemas de infraestrutura, timeouts ou falhas inesperadas. Características:
  • Status HTTP 500 (Internal Server Error), 502 (Bad Gateway), 503 (Service Unavailable) ou 504 (Gateway Timeout)
  • Não são causados pelos seus dados — a mesma requisição pode ter sucesso depois
Exemplos: Erro interno do servidor, serviço temporariamente indisponível, gateway timeout. O que fazer: Tente novamente com backoff exponencial (veja orientação abaixo). Se o erro persistir, entre em contato com o suporte.

Códigos de status HTTP


As APIs da Lerian usam um conjunto focado de códigos de status HTTP:
CódigoSignificadoCategoria
400Bad RequestErro de validação — corrija a requisição
401UnauthorizedCredenciais de autenticação ausentes ou inválidas
403ForbiddenCredenciais válidas mas permissões insuficientes
404Not FoundO recurso solicitado não existe
409ConflictA operação conflita com o estado atual do recurso
422Unprocessable EntitySintaxe válida mas viola regras de negócio
429Too Many RequestsLimite de taxa excedido — aguarde e tente novamente
500Internal Server ErrorFalha inesperada do servidor — tente novamente depois
502Bad GatewayServiço upstream retornou uma resposta inválida
503Service UnavailableServiço temporariamente indisponível — tente novamente depois
504Gateway TimeoutRequisição expirou — tente novamente depois

Orientação de retentativas


Nem todos os erros devem ser retentados. A tabela a seguir ajuda a decidir:
Tipo de erroRetentávelAção recomendada
400 erros de validaçãoNãoCorrija o payload da requisição
401 / 403 erros de authNãoVerifique credenciais e permissões
404 não encontradoNãoVerifique o ID do recurso
409 conflitosÀs vezesVerifique o estado atual, depois tente novamente se o conflito foi resolvido
422 lógica de negócioNãoAjuste a operação para cumprir as regras de negócio
429 limite de taxaSimAguarde a janela de retentativa, depois tente novamente
500 erros internosSimTente novamente com backoff exponencial
502 / 503 / 504SimTente novamente com backoff exponencial

Estratégia de backoff exponencial

Para erros retentáveis, use backoff exponencial para evitar sobrecarregar o serviço:
  1. Primeira retentativa: Aguarde 1 segundo
  2. Segunda retentativa: Aguarde 2 segundos
  3. Terceira retentativa: Aguarde 4 segundos
  4. Máximo de retentativas: Pare após 3–5 tentativas
  5. Jitter: Adicione um pequeno atraso aleatório (0–500ms) a cada espera para prevenir efeito manada
Nunca tente novamente automaticamente erros 400, 401, 403 ou 422. Estes indicam problemas com sua requisição que devem ser corrigidos antes de tentar novamente.

Resolução de problemas por categoria


Campos ausentes ou inválidos (400)

A maioria dos erros 400 inclui um objeto fields que indica exatamente quais campos precisam de atenção. Causas comuns:
  • Campo obrigatório omitido do corpo da requisição
  • Valor do campo não corresponde ao tipo esperado (ex.: string em vez de UUID)
  • Valor do campo excede o comprimento máximo
  • Campos extras inesperados no corpo da requisição
Passos de resolução:
  1. Leia o objeto fields na resposta de erro
  2. Compare sua requisição com a referência da API para aquele endpoint
  3. Verifique se os nomes de campo usam lowerCamelCase (não snake_case)
  4. Verifique se as datas usam formato ISO 8601 com sufixo Z
  5. Verifique se os UUIDs são formato v4 válido

Autenticação e autorização (401/403)

Causas comuns:
  • Cabeçalho Authorization ausente
  • Token expirado ou revogado
  • O token não concede acesso ao endpoint solicitado
Passos de resolução:
  1. Confirme que o Access Manager está habilitado no seu ambiente
  2. Verifique se o token está presente no cabeçalho Authorization
  3. Solicite um novo token se o atual expirou
  4. Verifique se o escopo do token inclui as permissões necessárias

Recurso não encontrado (404)

Causas comuns:
  • ID de recurso incorreto no caminho da URL
  • Recurso foi deletado (soft-delete)
  • Recurso pertence a uma organização ou ledger diferente
Passos de resolução:
  1. Verifique o formato do ID (deve ser um UUID válido)
  2. Liste recursos para confirmar que o ID existe
  3. Verifique se está usando os parâmetros de caminho organizationId e ledgerId corretos

Erros de conflito (409)

Causas comuns:
  • Criar um recurso com um nome que já existe (ex.: nome de ledger duplicado, nome de regra duplicado)
  • Tentar uma operação que já foi concluída (ex.: transação duplicada)
Passos de resolução:
  1. Leia a mensagem de erro para identificar qual campo causou o conflito
  2. Use um valor diferente (ex.: renomeie) ou recupere o recurso existente
  3. Para operações idempotentes, verifique se o recurso existente corresponde à sua intenção

Limite de taxa (429)

Causas comuns:
  • Muitas requisições em um período curto
Passos de resolução:
  1. Implemente backoff exponencial com jitter
  2. Reduza a frequência de chamadas à API
  3. Agrupe operações onde possível

Erros de servidor e timeout (500/502/503/504)

Causas comuns:
  • Interrupção temporária do serviço
  • Alta carga na plataforma
  • Dependência upstream indisponível
Passos de resolução:
  1. Tente novamente com backoff exponencial (1s, 2s, 4s)
  2. Se o erro persistir após 3–5 retentativas, entre em contato com o suporte
  3. Registre a resposta de erro completa (incluindo code) para escalamento ao suporte

Listas de erros por serviço


Cada serviço da Lerian publica uma lista completa de seus códigos de erro. Use estas referências para buscar códigos de erro específicos:

Boas práticas


1. Use códigos de erro para tratamento programático

Códigos de erro são identificadores estáveis projetados para automação. Mapeie códigos específicos para caminhos de resolução na sua integração:
if error.code == "TRC-0100":
    # Rule not found — verify rule ID
elif error.code.startswith("TRC-01"):
    # Rule-related error — check rule configuration
elif error.code.startswith("TRC-0"):
    # Tracer validation error — check request format

2. Registre erros com contexto

Inclua a resposta de erro completa, a requisição que a disparou e o timestamp. Isso torna o escalamento ao suporte mais rápido e o debugging mais eficaz.

3. Trate erros em nível de campo

Quando a resposta inclui um objeto fields, exiba essas mensagens específicas para seus usuários em vez de mostrar um erro genérico.

4. Implemente circuit breakers para integrações

Se você receber erros 500, 502 ou 503 repetidos, use um padrão de circuit breaker para parar temporariamente de chamar o serviço com falha e prevenir falhas em cascata.

5. Mantenha-se atualizado

Revise as páginas de lista de erros periodicamente. Novos códigos de erro podem ser adicionados conforme os serviços evoluem.