Errores y límites
MarkdownCódigos de respuesta, su significado y qué hacer. Todos los errores están en JSON e incluyen el Request ID.
Guía completa
Formato del error
El error llega en el formato de la API que has llamado: el objeto error para OpenAI, {"type": "error", "error": {...}} para Anthropic y error con los campos status y details para Gemini. Por eso, los SDK los reconocen como errores normales de API.
error.codeyerror.reasonindican la misma clase de error de la tabla siguiente.error.typees el valor estándar del formato (por ejemplo,invalid_request_erroroserver_error).error.request_id(en Anthropic,request_iden el nivel superior), la cabeceraX-Request-IDy el final del mensaje contienen el identificador de solicitud.- En Gemini, la clase se encuentra en
error.details:ErrorInfo.reason: el mismo código en mayúsculas (por ejemplo,MODEL_OVERLOADED),domain—ailoot.ai; el identificador de solicitud está enRequestInfo.requestId. - En Gemini, los errores 5xx que no se deben reintentar automáticamente y
result_pending_checkse devuelven con el código de estado 409 ystatusABORTED, para que los SDK y CLI de Gemini no los reintenten automáticamente. La clase de error está enErrorInfo.reason(por ejemplo,MODEL_TIMEOUToRESULT_PENDING_CHECK). - La respuesta en formato OpenAI también incluye los campos de nivel superior
codeymessagepara los clientes antiguos.
{
"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 error
| HTTP | Clase (reason) | Qué ha ocurrido | Qué hacer |
|---|---|---|---|
| 400 | invalid_request | Solicitud no válida: cuerpo o parámetro incorrecto; el modelo no admite un campo, adjunto o herramienta de la solicitud; la clave se ha enviado en la URL | Corrige la solicitud según el mensaje de error: elimina el campo, adjunto o herramienta no admitidos y envía la clave en una cabecera. El rechazo por un campo, adjunto o herramienta no admitidos se produce antes de la reserva; no se cobra nada |
| 400 | context_length_exceeded | La solicitud supera el contexto del modelo | Acorta el historial o elige un modelo con más contexto |
| 400 | content_policy_violation | Las reglas del modelo rechazan la solicitud | Reformula la solicitud |
| 401 | invalid_api_key | La clave falta o no es válida | Comprueba que hayas enviado la clave completa |
| 401 | api_key_disabled | La clave está desactivada | Actívala o crea una clave nueva |
| 402 | insufficient_balance, insufficient_quota | No hay suficiente saldo disponible ni para la reserva mínima (insufficient_quota representa el mismo caso en el formato habitual de OpenAI SDK) | Recarga el saldo o reduce max_tokens |
| 402 | api_key_quota_exhausted | Se ha agotado el límite total de gasto de la clave | Aumenta el límite de la clave en el panel de control |
| 402 | payment_disputed | La cuenta tiene una deuda por un pago impugnado | Las nuevas solicitudes quedan suspendidas hasta pagar la deuda; contacta con soporte |
| 403 | api_key_expired | La clave ha caducado | Crea una clave nueva |
| 403 | account_inactive | Tu cuenta está desactivada | Contacta con soporte |
| 403 | permission_denied | La clave no permite esta solicitud, por ejemplo, por la IP | Comprueba las restricciones de la clave |
| 404 | model_not_found | El modelo no existe | Comprueba el ID en /v1/models |
| 404 | unsupported_endpoint | El modelo no funciona en este formato | Elige otro formato o modelo |
| 404 | not_found | La ruta o el objeto, como una tarea, no existe | Comprueba la URL y el identificador |
| 409 | duplicate_request | Ya se ha aceptado una operación con la misma clave de idempotencia y puede que haya terminado | Comprueba el resultado de la primera operación; no envíes una nueva |
| 409 | not_ready, video_not_ready | El vídeo u otra tarea aún no está listo | Consulta el estado más tarde |
| 409, 503 | result_pending_check | Estamos comprobando el resultado de la solicitud. En las tareas de vídeo, se indica con result_pending_check: true en la respuesta de estado; la tarea sigue en in_progress | No vuelvas a enviar la solicitud: el estado aparecerá en el historial (GET https://ailoot.ai/api/v1/usage). No crees de nuevo la tarea de vídeo; consúltala más tarde mediante GET /v1/videos/{id} |
| 410 | model_retired | El modelo se ha retirado del servicio | Elige una versión nueva en GET /v1/models |
| 413 | request_too_large | El cuerpo de la solicitud es demasiado grande | Reduce los archivos o el historial |
| 429 | rate_limit_exceeded, gateway_concurrency_limit, gateway_queue_full | Demasiadas solicitudes o solicitudes simultáneas desde tu cuenta | Espera (cabecera Retry-After, normalmente 10 s) y vuelve a intentarlo |
| 429 | usage_limit_reached | Se ha agotado el límite de gasto de la clave para este periodo (5 horas, 1 día o 7 días) | Espera a que se renueve el periodo o aumenta el límite de la clave |
| 500 | internal_error | Error de Ailoot | Contacta con soporte e indica el Request ID |
| 502 | invalid_model_response, empty_response, incomplete_response | El modelo ha devuelto una respuesta no válida, vacía o incompleta | Busca el Request ID en el historial del panel de control. Si ya hay un resultado o un cargo, reintentar creará una segunda solicitud facturable. La ausencia de un registro no confirma que la solicitud no se haya enviado o ejecutado: no repitas un envío cuyo resultado se desconoce; contacta con soporte e indica el Request ID. |
| 502 | result_not_delivered | El resultado no se ha entregado por un fallo de Ailoot; la reserva o el cargo se ha devuelto | Puedes volver a enviar la solicitud |
| 503 | model_overloaded | El modelo está temporalmente sobrecargado | Si X-Should-Retry: true, vuelve a intentarlo tras los segundos indicados en Retry-After; si es false, consulta primero el Request ID en el historial |
| 503 | model_unavailable | El modelo no está disponible temporalmente | Elige otro modelo. Si X-Should-Retry: true, vuelve a intentarlo tras los segundos indicados en Retry-After; si es false, consulta primero el Request ID en el historial |
| 503 | service_unavailable | Fallo temporal de Ailoot | Si X-Should-Retry: true, vuelve a intentarlo tras los segundos indicados en Retry-After; si es false, consulta primero el Request ID en el historial |
| 503 | charge_not_confirmed | No se ha entregado la respuesta porque no se ha podido confirmar el cargo; la reserva se ha devuelto y no se ha cobrado nada | Si X-Should-Retry: true, vuelve a intentarlo tras los segundos indicados en Retry-After; si es false, consulta primero el Request ID en el historial |
| 504 | model_timeout | El modelo no ha respondido a tiempo; el resultado aún puede aparecer | No vuelvas a enviar la solicitud hasta consultar el Request ID en el historial |
Los códigos de respuesta del modelo y comprobación del resultado (502, 503 y 504) ahora hacen referencia al modelo o a la solicitud: model_unavailable, model_timeout, invalid_model_response, incomplete_response, charge_not_confirmed y result_pending_check. Si tu código compara error.code con los valores antiguos, sustitúyelos por los de la tabla; para saber la equivalencia entre los códigos antiguos y los nuevos, consulta con soporte.
Cuándo reintentar una solicitud
- Comprueba primero X-Should-Retry: si ves
false,result_pending_checkomodel_timeout, no reintentes automáticamente. Busca el Request ID en el historial del panel de control para consultar el resultado y el cargo. - Es seguro reintentar cuando recibes X-Should-Retry: true: espera
Retry-Aftersegundos. En los errores 5xx, el código por sí solo no basta: el resultado podría haberse generado ya. Consulta primero el historial del panel de control o contacta con soporte e indica el Request ID. Es especialmente importante para imágenes, vídeos, música y pasos largos de agentes. - Reintentar no solucionará el problema: 400, 401, 402, 403 y 404; corrige primero la solicitud, la clave o el saldo.
Límites
La frecuencia y el número de solicitudes simultáneas se limitan para tu cuenta en su conjunto, no para cada clave. Si se supera el límite, recibirás 429 rate_limit_exceeded con la cabecera Retry-After: 10. Si el propio modelo está sobrecargado, recibirás 503 model_overloaded con Retry-After: 30. Si necesitas más capacidad, contacta con soporte.
Los límites de gasto se configuran en la clave: el límite total devuelve 402 api_key_quota_exhausted y los periodos de 5 horas, 1 día y 7 días devuelven 429 usage_limit_reached. Más información en Claves y URL de la API.
Modelos NVIDIA: cola
Puedes consultar la lista de modelos con saldo cero; para generar necesitas saldo para la reserva. Los modelos NVIDIA, como Nemotron, funcionan mediante una cola compartida: con una carga alta, la respuesta puede tardar más o se puede devolver un error de «modelo temporalmente sobrecargado» con la cabecera Retry-After. Reintenta tras el tiempo indicado. Los precios están en el catálogo y los cargos se calculan igual que en los demás modelos.
El modelo define los límites de tamaño: contexto, es decir, cuántos tokens puedes enviar, y longitud máxima de respuesta. Se indican en el catálogo.
Historial y gastos
Historial y gastos · GET https://ailoot.ai/api/v1/usage · JWT · Authorization: Bearer $TOKEN
JWT ≠ sk-… · Inicio de sesión y sesiones