Erros e limites
MarkdownCódigos de resposta, o seu significado e o que fazer. Todos os erros são apresentados em JSON e incluem o Request ID.
Guia completo
Formato do erro
O erro chega no formato da API que chamou: objeto error para OpenAI, {"type": "error", "error": {...}} para Anthropic e error com os campos status e details para Gemini. Por isso, os SDK reconhecem-nos como erros normais da API.
error.codeeerror.reason— classe do erro da tabela abaixo; os dois coincidem.error.type— valor padrão do formato (por exemplo,invalid_request_errorouserver_error).error.request_id(em Anthropic —request_idno nível superior), o cabeçalhoX-Request-IDe o fim do texto da mensagem — identificador do pedido.- Em Gemini, a classe está em
error.details:ErrorInfo.reason— o mesmo código em maiúsculas (por exemplo,MODEL_OVERLOADED),domain—ailoot.ai; o identificador do pedido está emRequestInfo.requestId. - No formato Gemini, um erro 5xx que não deve ser repetido automaticamente e
result_pending_checkchegam com o estado 409 estatusABORTED: assim, o Gemini SDK e o CLI não os repetem automaticamente. A classe do erro está emErrorInfo.reason(por exemplo,MODEL_TIMEOUTouRESULT_PENDING_CHECK). - A resposta no formato OpenAI também inclui campos de nível superior
codeemessage— para clientes antigos.
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}{
"type": "error",
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"reason": "invalid_api_key",
"message": "… Nothing was charged. … Request ID: 94ed3e31-4373-41ce-bf8a-0d1ed3f7235e."
},
"request_id": "94ed3e31-4373-41ce-bf8a-0d1ed3f7235e"
}{
"error": {
"code": 401,
"status": "UNAUTHENTICATED",
"message": "The API key is not valid. Nothing was charged. … Request ID: e7aa743b-9d0d-4064-b206-2562609f545b.",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "INVALID_API_KEY",
"domain": "ailoot.ai",
"metadata": {
"code": "invalid_api_key",
"reason": "invalid_api_key",
"request_id": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
},
{
"@type": "type.googleapis.com/google.rpc.RequestInfo",
"requestId": "e7aa743b-9d0d-4064-b206-2562609f545b"
}
]
}
}Códigos de erro
| HTTP | Classe (reason) | O que aconteceu | O que fazer |
|---|---|---|---|
| 400 | invalid_request | Pedido inválido: corpo ou parâmetro incorreto; o modelo não suporta um campo, anexo ou ferramenta do pedido; a chave foi transmitida no endereço | Corrija o pedido de acordo com o texto do erro: remova o campo, anexo ou ferramenta não suportado; envie a chave num cabeçalho. A rejeição por um campo, anexo ou ferramenta não suportado ocorre antes da reserva — não há qualquer débito |
| 400 | context_length_exceeded | O pedido excede o contexto do modelo | Reduza o histórico ou escolha um modelo com contexto maior |
| 400 | content_policy_violation | O pedido foi rejeitado pelas regras do modelo | Reformule o pedido |
| 401 | invalid_api_key | A chave está em falta ou é inválida | Verifique se a chave foi transmitida na íntegra |
| 401 | api_key_disabled | A chave está desativada | Ative a chave ou crie uma nova |
| 402 | insufficient_balance, insufficient_quota | O saldo disponível não chega sequer para a reserva mínima (insufficient_quota — o mesmo caso apresentado na forma habitual do OpenAI SDK) | Carregue o saldo ou reduza max_tokens |
| 402 | api_key_quota_exhausted | O limite total de despesas da chave está esgotado | Aumente o limite da chave na área pessoal |
| 402 | payment_disputed | A conta tem uma dívida por um pagamento contestado | Os novos pedidos estão suspensos até à liquidação da dívida — contacte o suporte |
| 403 | api_key_expired | A chave expirou | Crie uma nova chave |
| 403 | account_inactive | A sua conta está desativada | Contacte o suporte |
| 403 | permission_denied | A chave não tem permissão para este pedido (por exemplo, devido ao IP) | Verifique as restrições da chave |
| 404 | model_not_found | O modelo não existe | Compare o ID com /v1/models |
| 404 | unsupported_endpoint | O modelo não funciona neste formato | Escolha outro formato ou modelo |
| 404 | not_found | O caminho ou objeto não existe (por exemplo, uma tarefa) | Verifique o endereço e o identificador |
| 409 | duplicate_request | Uma operação com a mesma chave de idempotência já foi aceite e pode estar concluída | Verifique o resultado da primeira operação; não envie uma nova |
| 409 | not_ready, video_not_ready | O vídeo ou outra tarefa ainda não está concluído | Consulte o estado mais tarde |
| 409, 503 | result_pending_check | Estamos a verificar o resultado do pedido. Numa tarefa de vídeo, é a indicação result_pending_check: true na resposta de estado; a tarefa permanece em in_progress | Não repita o pedido — o estado aparecerá no histórico (GET https://ailoot.ai/api/v1/usage). Não volte a criar a tarefa de vídeo: consulte-a mais tarde através de GET /v1/videos/{id} |
| 410 | model_retired | O modelo foi retirado de serviço | Escolha uma nova versão em GET /v1/models |
| 413 | request_too_large | O corpo do pedido é demasiado grande | Reduza os ficheiros ou o histórico |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | Demasiados pedidos ou pedidos simultâneos da sua conta | Aguarde (cabeçalho Retry-After, normalmente 10 s) e tente novamente |
| 429 | usage_limit_reached | A janela de despesas da chave está esgotada (5 horas, 1 dia ou 7 dias) | Aguarde a renovação da janela ou aumente o limite da chave |
| 500 | internal_error | Erro do Ailoot | Contacte o suporte com o Request ID |
| 502 | invalid_model_response, empty_response, incomplete_response | O modelo devolveu uma resposta inválida, vazia ou incompleta | Procure o Request ID no histórico da área pessoal. Se existir um resultado ou débito, a repetição criará um segundo pedido pago. A ausência de um registo não confirma que o pedido não tenha sido enviado ou executado: não repita um envio não confirmado; contacte o suporte com o Request ID. |
| 502 | result_not_delivered | O resultado não foi entregue por responsabilidade do Ailoot; a reserva ou o débito foi devolvido | Pode voltar a enviar o pedido |
| 503 | model_overloaded | O modelo está temporariamente sobrecarregado | Se X-Should-Retry: true — tente novamente após o número de segundos de Retry-After; se false — consulte primeiro o Request ID no histórico |
| 503 | model_unavailable | O modelo está temporariamente indisponível | Escolha outro modelo. Se X-Should-Retry: true — tente novamente após o número de segundos de Retry-After; se false — consulte primeiro o Request ID no histórico |
| 503 | service_unavailable | Falha temporária do Ailoot | Se X-Should-Retry: true — tente novamente após o número de segundos de Retry-After; se false — consulte primeiro o Request ID no histórico |
| 503 | charge_not_confirmed | A resposta não foi entregue: não foi possível confirmar o débito; a reserva foi devolvida e não foi debitado dinheiro | Se X-Should-Retry: true — tente novamente após o número de segundos de Retry-After; se false — consulte primeiro o Request ID no histórico |
| 504 | model_timeout | O modelo não respondeu a tempo; o resultado ainda pode aparecer | Não volte a enviar o pedido antes de consultar o Request ID no histórico |
Os códigos de resposta do modelo e de verificação do resultado (502, 503 e 504) referem agora o modelo ou o pedido: model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed e result_pending_check. Se o seu código comparar error.code com valores anteriores, substitua-os pelos códigos da tabela; para saber a correspondência entre códigos antigos e novos, contacte o suporte.
Quando repetir um pedido
- Consulte primeiro X-Should-Retry: se for
false,result_pending_checkoumodel_timeoutnão repita automaticamente. Procure o Request ID no histórico da área pessoal: aí poderá ver o resultado e o débito. - É seguro repetir quando receber X-Should-Retry: true: aguarde
Retry-Aftersegundos. Para 5xx, o código por si só não basta: o resultado pode já ter aparecido. Consulte primeiro o histórico da área pessoal ou contacte o suporte com o Request ID. Isto é especialmente importante para imagens, vídeo, música e passos longos de agentes. - Repetir não ajuda: 400, 401, 402, 403, 404 — corrija primeiro o pedido, a chave ou o saldo.
Limites
A frequência e o número de pedidos simultâneos são limitados para a conta no seu conjunto, e não por chave. Se exceder o limite, receberá 429 rate_limit_exceeded com o cabeçalho Retry-After: 10. Se for o próprio modelo a estar sobrecarregado — 503 model_overloaded com Retry-After: 30. Se precisar de uma carga maior, contacte o suporte.
Os limites de despesas são definidos na chave: limite total — 402 api_key_quota_exhausted, janelas de 5 horas, 1 dia e 7 dias — 429 usage_limit_reached. Saiba mais — Chaves e endereço da API.
Modelos NVIDIA: fila
Pode consultar a lista de modelos mesmo com saldo zero; a geração exige saldo para a reserva. Os modelos NVIDIA (Nemotron e outros) funcionam através de uma fila partilhada: com carga elevada, a resposta pode demorar mais ou receberá um erro «modelo temporariamente sobrecarregado» com o cabeçalho Retry-After — repita após o tempo indicado. Os preços estão no catálogo e o débito funciona como nos restantes modelos.
Os limites de tamanho são definidos pelo modelo: contexto (quantos tokens pode enviar) e comprimento máximo da resposta. Estão indicados no catálogo.
Histórico e despesas
Histórico e despesas · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · Início de sessão e sessões