Errores
Cada código de error con el que puede responder esta API, el estado HTTP que lo acompaña y qué hacer al respecto. La envoltura tiene forma de OpenAI con una adición con espacio de nombres.
La envoltura
error.message está escrito para una persona que lee un registro, error.type nombra la clase de fallo, y error.code es el identificador estable sobre el que ramificar — el texto del mensaje no es un contrato. Cuando la API tiene detalle estructurado (qué política, qué endpoint, qué modelo), llega en error.llmeu y nunca reemplaza los tres campos estándar.
{
"error": {
"message": "No endpoint satisfies residency eu-owned. Residency is never relaxed silently.",
"type": "conflict_error",
"code": "no_endpoint_for_policy",
"llmeu": { "requested": "llmeu-auto" }
}
}
el tipo sigue al estado
La asignación siguiente es la que aplica la API, generada a partir de la misma tabla que construye sus respuestas.
| HTTP | tipo |
|---|---|
| 400 | invalid_request_error |
| 401 | authentication_error |
| 402 | insufficient_quota |
| 403 | permission_error |
| 404 | not_found_error |
| 409 | conflict_error |
| 413 | invalid_request_error |
| 422 | invalid_request_error |
| 429 | rate_limit_error |
| 500 | api_error |
| 501 | api_error |
| 502 | api_error |
| 503 | api_error |
Códigos
Todos los códigos que pueden llegar a un cliente. Una prueba recorre el código fuente de la API y falla cuando esta tabla y el código no coinciden en ningún sentido, por lo que no se puede inventar un código aquí ni añadirlo allí sin documentarlo.
| HTTP | code | Qué significa y qué hacer |
|---|---|---|
| 400 | invalid_request | El cuerpo de la solicitud no superó la validación. |
| 400 | invalid_json | El cuerpo no era JSON válido. |
| 400 | invalid_llmeu | El objeto llmeu no era un objeto, o contenía un campo desconocido. |
| 400 | invalid_residency | La residencia solicitada no es una de las cuatro clases de alojamiento. |
| 400 | invalid_data_class | La data_class solicitada no es una de las cuatro clases. |
| 400 | invalid_retention | La retención solicitada no es cero, 24h, 7d o 30d. |
| 400 | invalid_max_tokens | max_tokens no era un entero positivo. |
| 400 | invalid_stream | stream no era un booleano. |
| 400 | invalid_stop | stop no era ni una cadena ni un arreglo de cadenas. |
| 400 | invalid_role | Un mensaje contenía un rol fuera de system, user, assistant y tool. |
| 400 | invalid_tools | tools o tool_choice estaba malformado. |
| 400 | missing_model | El campo model es obligatorio. |
| 400 | missing_messages | messages es obligatorio y no debe estar vacío. |
| 400 | missing_input | input es obligatorio para embeddings. |
| 400 | missing_name | name es obligatorio. |
| 401 | invalid_api_key | La clave falta, es desconocida, está revocada o ha expirado. |
| 402 | budget_exceeded | El presupuesto diario de la organización se ha agotado. Aumenta max_usd_per_day o espera a que se renueve la ventana. |
| 403 | api_key_required | La solicitud usó una sesión de consola. Crea una clave de API y envía esa en su lugar. |
| 403 | insufficient_scope | La clave es válida pero carece del alcance que requiere este endpoint. |
| 403 | no_organization | La credencial no está asociada a una organización. |
| 403 | model_denied | La política de la organización deniega este modelo o su proveedor. |
| 403 | policy_violation | La solicitud infringe una regla de la política de la organización. |
| 403 | retention_exceeds_policy | La retención solicitada es más larga de lo que permite la política. Esto se comprueba antes que cualquier otra cosa de la solicitud. |
| 403 | data_class_not_allowed | La data_class de la solicitud no es una de las que permite la política. |
| 404 | model_not_found | No existe tal modelo para esta organización. |
| 404 | hosted_unavailable | El modelo está en el catálogo pero no está alojado en LLM EU, por lo que no se puede invocar. |
| 404 | not_found | La ruta existe pero el objeto no. |
| 404 | unknown_route | No hay ninguna ruta montada en esta ruta. Todos los endpoints de OpenAI que no figuran en Endpoints responden esto. |
| 404 | policy_not_found | El policy_id en llmeu no pertenece a esta organización. |
| 409 | no_endpoint_for_policy | Nada satisface la política y la residencia en conjunto, y ninguna se relaja en silencio. |
| 409 | not_a_text_model | El modelo nombrado no puede generar texto: es un modelo de reconocimiento de voz, embeddings o reranker. |
| 409 | conflict | La solicitud entra en conflicto con el estado actual del objeto. |
| 413 | request_too_large | El cuerpo superó el límite de tamaño del endpoint. |
| 429 | rate_limit_exceeded | Se alcanzó un límite de la tabla de límites de tasa. El mensaje indica el tiempo de reinicio de la ventana. |
| 500 | internal_error | Un fallo inesperado por nuestro lado. |
| 501 | not_implemented | El endpoint no se ofrece intencionadamente, o la capacidad solicitada no existe en este despliegue. |
| 501 | retention_not_implemented | La política permite una retención distinta de cero y solo se implementa cero, por lo que la solicitud se rechaza en lugar de almacenarse. |
| 501 | unsupported_n | n mayor que 1 no se admite. |
| 502 | upstream_error | Ningún endpoint pudo atender la solicitud tras la conmutación por error. La traza registra cada intento. |
| 502 | stream_failed | El flujo falló después de haber comenzado. |
no_endpoint_for_policy es el producto funcionando
Un 409 con este código significa que la política y la solicitud en conjunto no admiten ningún endpoint, y el enrutador se negó a relajar cualquiera de los dos en silencio. No es transitorio: reintentar sin cambiar la solicitud, la política o la residencia falla de la misma manera. El error incluye la residencia solicitada, y el rastro registra por qué se rechazó cada endpoint.
Errores dentro de un flujo
Una solicitud en flujo que falla después de enviar las cabeceras escribe el error como un marco SSE final y luego el terminador, de modo que un cliente que sigue el formato ve un fallo en lugar de un éxito truncado.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]