Erreurs
Chaque code d'erreur que cette API peut renvoyer, le statut HTTP qui le porte, et quoi faire à ce sujet. L'enveloppe est de forme OpenAI avec un ajout dans un espace de noms.
L'enveloppe
error.message est rédigé pour une personne qui lit un journal, error.type nomme la classe de défaillance, et error.code est l'identifiant stable sur lequel brancher — le texte du message n'est pas un contrat. Là où l'API a un détail structuré (quelle politique, quel endpoint, quel modèle), il arrive dans error.llmeu et ne remplace jamais les trois champs standard.
{
"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" }
}
}
le type suit le statut
La correspondance ci-dessous est celle que l'API applique, rendue à partir de la même table qui construit ses réponses.
| HTTP | type |
|---|---|
| 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 |
Codes
Chaque code pouvant atteindre un client. Un test parcourt le code source de l'API et échoue lorsque ce tableau et le code divergent dans un sens ou dans l'autre, ainsi un code ne peut être inventé ici ou ajouté là sans être documenté.
| HTTP | code | Ce que cela signifie, et quoi faire |
|---|---|---|
| 400 | invalid_request | Le corps de la requête n'a pas passé la validation. |
| 400 | invalid_json | Le corps n'était pas un JSON valide. |
| 400 | invalid_llmeu | L'objet llmeu n'était pas un objet, ou contenait un champ inconnu. |
| 400 | invalid_residency | La résidence demandée n'est pas l'une des quatre classes d'hébergement. |
| 400 | invalid_data_class | Le data_class demandé n'est pas l'une des quatre classes. |
| 400 | invalid_retention | La rétention demandée n'est pas zéro, 24h, 7j ou 30j. |
| 400 | invalid_max_tokens | max_tokens n'était pas un entier positif. |
| 400 | invalid_stream | stream n'était pas un booléen. |
| 400 | invalid_stop | stop n'était ni une chaîne ni un tableau de chaînes. |
| 400 | invalid_role | Un message contenait un rôle en dehors de system, user, assistant et tool. |
| 400 | invalid_tools | tools ou tool_choice était malformé. |
| 400 | missing_model | Le champ model est requis. |
| 400 | missing_messages | messages est requis et ne doit pas être vide. |
| 400 | missing_input | input est requis pour les embeddings. |
| 400 | missing_name | name est requis. |
| 401 | invalid_api_key | La clé est manquante, inconnue, révoquée ou expirée. |
| 402 | budget_exceeded | Le budget quotidien de l'organisation est épuisé. Augmentez max_usd_per_day ou attendez le renouvellement de la fenêtre. |
| 403 | api_key_required | La requête a utilisé une session console. Créez une clé API et envoyez-la à la place. |
| 403 | insufficient_scope | La clé est valide mais ne possède pas la portée requise par cet endpoint. |
| 403 | no_organization | L'identifiant n'est pas rattaché à une organisation. |
| 403 | model_denied | La politique de l'organisation refuse ce modèle ou son fournisseur. |
| 403 | policy_violation | La requête enfreint une règle de la politique de l'organisation. |
| 403 | retention_exceeds_policy | La rétention demandée est plus longue que ne l'autorise la politique. Ceci est vérifié avant toute autre chose concernant la requête. |
| 403 | data_class_not_allowed | Le data_class de la requête n'est pas l'un de ceux que la politique autorise. |
| 404 | model_not_found | Aucun modèle de ce type pour cette organisation. |
| 404 | hosted_unavailable | Le modèle est dans le catalogue mais n'est pas hébergé sur LLM EU, il ne peut donc pas être appelé. |
| 404 | not_found | La route existe mais l'objet n'existe pas. |
| 404 | unknown_route | Aucune route n'est montée à ce chemin. Chaque endpoint OpenAI qui n'est pas listé sous Endpoints répond ceci. |
| 404 | policy_not_found | Le policy_id dans llmeu n'appartient pas à cette organisation. |
| 409 | no_endpoint_for_policy | Rien ne satisfait la politique et la résidence ensemble, et ni l'une ni l'autre n'est relâchée silencieusement. |
| 409 | not_a_text_model | Le modèle nommé ne peut pas générer de texte : c'est un modèle de reconnaissance vocale, d'embedding ou de reranking. |
| 409 | conflict | La requête entre en conflit avec l'état actuel de l'objet. |
| 413 | request_too_large | Le corps dépasse la limite de taille de l'endpoint. |
| 429 | rate_limit_exceeded | Une limite du tableau des limites de débit a été atteinte. Le message indique l'heure de réinitialisation de la fenêtre. |
| 500 | internal_error | Une défaillance inattendue de notre côté. |
| 501 | not_implemented | L'endpoint n'est volontairement pas proposé, ou la capacité demandée n'existe pas sur ce déploiement. |
| 501 | retention_not_implemented | La politique autorise une rétention autre que zéro et seul zéro est implémenté, donc la requête est refusée au lieu d'être stockée. |
| 501 | unsupported_n | n supérieur à 1 n'est pas pris en charge. |
| 502 | upstream_error | Aucun endpoint n'a pu servir la requête après bascule. La trace enregistre chaque tentative. |
| 502 | stream_failed | Le flux a échoué après avoir déjà commencé. |
no_endpoint_for_policy est le fonctionnement normal du produit
Un 409 avec ce code signifie que la politique et la requête ensemble n'admettent aucun endpoint, et le routeur a refusé de relâcher silencieusement l'un ou l'autre. Ce n'est pas transitoire : réessayer sans modifier la requête, la politique ou la résidence échoue de la même manière. L'erreur porte la résidence demandée, et la trace enregistre pourquoi chaque endpoint a été rejeté.
Erreurs dans un flux
Une requête en streaming qui échoue après l'envoi des en-têtes écrit l'erreur comme une trame SSE finale puis le terminateur, ainsi un client qui suit le format voit un échec au lieu d'un succès tronqué.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]