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. El envoltorio tiene forma de OpenAI con una adición con espacio de nombres.

El envoltorio

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" }
  }
}

type 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 type
400invalid_request_error
401authentication_error
402insufficient_quota
403permission_error
404not_found_error
409conflict_error
413invalid_request_error
422invalid_request_error
429rate_limit_error
500api_error
501api_error
502api_error
503api_error

Códigos

Cada código que puede 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 uno u otro sentido, así 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 llevaba 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 zero, 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 array de cadenas.
400 invalid_role Un mensaje llevaba un rol fuera de system, user, assistant y tool.
400 invalid_tools tools o tool_choice estaban mal formados.
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 caducado.
402 budget_exceeded El presupuesto diario de la organización se ha agotado. Aumente max_usd_per_day o espere a que la ventana se renueve.
403 api_key_required La solicitud usó una sesión de consola. Cree una clave de API y envíe esa en su lugar.
403 insufficient_scope La clave es válida pero carece del ámbito 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 sobre la solicitud.
403 data_class_not_allowed El data_class de la solicitud no es uno de los 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 llamar.
404 not_found La ruta existe pero el objeto no.
404 unknown_route No hay ninguna ruta montada en este path. 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 juntas, 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, de embedding o de reranking.
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 velocidad. El mensaje indica el tiempo de reinicio de la ventana.
500 internal_error Un fallo inesperado por nuestra parte.
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 No se admite n mayor que 1.
502 upstream_error Ningún endpoint pudo servir la solicitud tras el failover. La traza registra cada intento.
502 stream_failed El stream falló después de haber comenzado ya.

no_endpoint_for_policy es el producto haciendo su trabajo

Un 409 con este código significa que la política y la solicitud juntas no admiten ningún endpoint, y el enrutador se negó a relajar cualquiera de las dos en silencio. No es transitorio: reintentar sin cambiar la solicitud, la política o la residencia falla de la misma manera. El error lleva la residencia solicitada, y la traza registra por qué se rechazó cada endpoint.

Errores dentro de un stream

Una solicitud en streaming que falla después de enviar las cabeceras escribe el error como un frame SSE final y luego el terminador, así 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]