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:
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:

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 (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

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: 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:

Orientação de retentativas


Nem todos os erros devem ser retentados. A tabela a seguir ajuda a decidir:

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:

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.