Erros
Toda resposta de erro da API da Aeses tem o mesmo formato. Faça branching pelos campos type e code — não pela message, que é legível por humanos e pode mudar.
Formato da resposta
{
"error": {
"type": "invalid_request_error",
"code": "insufficient_balance",
"message": "Available USDC balance is 12.50 — requested 50.00.",
"param": "amount",
"request_id": "req_01HXYZ7M2P5RT4VG3K8AQWE9FN",
"doc_url": "https://docs.aeses.io/errors#insufficient_balance"
}
}| Campo | Sempre presente | Descrição |
| ------------ | ---------------- | ----------------------------------------------------------------- |
| type | Sim | Categoria de alto nível. Use para decidir comportamento de retry. |
| code | Sim | Código estável, legível por máquina. Use para lógica de branch. |
| message | Sim | Texto em inglês legível por humanos. Não é estável — não parsei. |
| param | Quando aplicável | Parâmetro da requisição que causou o erro. |
| request_id | Sim | Devolvido em toda resposta. Inclua ao contatar o suporte. |
| doc_url | Quando aplicável | Link direto para a documentação deste código. |
Tipos de erro
| Tipo | HTTP | Refazer? | Significado |
| ----------------------- | ----- | ------------------------------ | ---------------------------------------------------------- |
| authentication_error | 401 | Nunca — corrija a chave antes. | Chave da API ausente, inválida ou revogada. |
| forbidden | 403 | Nunca. | Chave válida mas sem permissão para este recurso. |
| invalid_request_error | 400 | Nunca — corrija o payload. | Violação de validação, schema ou regra de negócio. |
| not_found | 404 | Nunca. | O recurso solicitado não existe. |
| idempotency_error | 409 | Nunca — gere uma chave nova. | Chave de idempotência reutilizada com corpo diferente. |
| rate_limit_error | 429 | Sim, com backoff. | Requisições demais. Respeite Retry-After. |
| api_error | 500 | Sim, com backoff. | Erro interno do servidor. |
| service_unavailable | 503 | Sim, com backoff. | Indisponibilidade temporária. Refaça após uma pausa curta. |
Estratégia de retentativas
- Nunca refaça em erros
4xx, exceto429. - Refaça com backoff exponencial em
429,500e503. Comece em 500ms, dobre até 8s e desista após 5 tentativas. - Envie sempre a mesma
Idempotency-Keyem cada retentativa para a operação rodar no máximo uma vez. Veja Idempotência.
Códigos de erro comuns
| Código | Tipo | Descrição |
| ----------------------------- | ----------------------- | ------------------------------------------------------------------- |
| api_key_missing | authentication_error | Header x-api-key ausente. |
| api_key_invalid | authentication_error | A chave não existe ou foi revogada. |
| key_environment_mismatch | authentication_error | Chave de teste usada em modo live (ou vice-versa). |
| parameter_missing | invalid_request_error | Um parâmetro obrigatório foi omitido. param indica qual. |
| parameter_invalid | invalid_request_error | Um parâmetro tem tipo ou formato errado. |
| unsupported_asset | invalid_request_error | A combinação asset/chain solicitada não é suportada. |
| insufficient_balance | invalid_request_error | A conta não tem saldo suficiente para a operação. |
| withdrawal_below_minimum | invalid_request_error | O valor do saque está abaixo do mínimo da rede. |
| invalid_destination_address | invalid_request_error | O endereço de destino é malformado ou inválido para a rede. |
| idempotency_key_reused | idempotency_error | A Idempotency-Key foi usada com um corpo de requisição diferente. |
| rate_limited | rate_limit_error | Requisições demais na janela. Honre o Retry-After. |
| internal_error | api_error | Falha inesperada no servidor. Seguro refazer. |
Sempre logue o request_id
Toda resposta — de sucesso ou erro — inclui um header Request-Id e (em erros) um campo request_id. Logue em toda requisição. Ao contatar o suporte, fornecer o request_id reduz o tempo de diagnóstico de horas para minutos.