Fouten
Elke foutcode die deze API kan teruggeven, de HTTP-status die daarbij hoort, en wat je eraan kunt doen. De envelope heeft de OpenAI-vorm met één namespaced toevoeging.
De envelope
error.message is geschreven voor iemand die een log leest, error.type benoemt de klasse van de fout, en error.code is de stabiele identificatie om op te vertakken — berichttekst is geen contract. Waar de API gestructureerde details heeft (welk beleid, welk endpoint, welk model) komen die in error.llmeu en vervangen nooit de drie standaardvelden.
{
"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 volgt status
De onderstaande mapping is degene die de API toepast, weergegeven uit dezelfde tabel die de antwoorden opbouwt.
| 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
Elke code die een client kan bereiken. Een test doorloopt de API-broncode en faalt wanneer deze tabel en de code in beide richtingen van elkaar afwijken, dus een code kan hier niet worden verzonnen of daar worden toegevoegd zonder gedocumenteerd te zijn.
| HTTP | code | Wat het betekent, en wat te doen |
|---|---|---|
| 400 | invalid_request | De request body heeft de validatie niet doorstaan. |
| 400 | invalid_json | De body was geen geldige JSON. |
| 400 | invalid_llmeu | Het llmeu-object was geen object, of bevatte een onbekend veld. |
| 400 | invalid_residency | De opgevraagde residency is niet een van de vier hostingklassen. |
| 400 | invalid_data_class | De opgevraagde data_class is niet een van de vier klassen. |
| 400 | invalid_retention | De opgevraagde retention is niet zero, 24h, 7d of 30d. |
| 400 | invalid_max_tokens | max_tokens was geen positief geheel getal. |
| 400 | invalid_stream | stream was geen boolean. |
| 400 | invalid_stop | stop was geen string en ook geen array van strings. |
| 400 | invalid_role | Een bericht bevatte een rol buiten system, user, assistant en tool. |
| 400 | invalid_tools | tools of tool_choice was misvormd. |
| 400 | missing_model | Het veld model is vereist. |
| 400 | missing_messages | messages is vereist en mag niet leeg zijn. |
| 400 | missing_input | input is vereist voor embeddings. |
| 400 | missing_name | name is vereist. |
| 401 | invalid_api_key | De sleutel ontbreekt, is onbekend, ingetrokken of verlopen. |
| 402 | budget_exceeded | Het dagbudget van de organisatie is opgebruikt. Verhoog max_usd_per_day of wacht tot het venster opnieuw begint. |
| 403 | api_key_required | Het verzoek gebruikte een consolesessie. Maak een API-sleutel aan en stuur die in plaats daarvan. |
| 403 | insufficient_scope | De sleutel is geldig maar mist de scope die dit endpoint vereist. |
| 403 | no_organization | De credential is niet aan een organisatie gekoppeld. |
| 403 | model_denied | Het beleid van de organisatie weigert dit model of zijn provider. |
| 403 | policy_violation | Het verzoek schendt een regel van het organisatiebeleid. |
| 403 | retention_exceeds_policy | De opgevraagde retention is langer dan het beleid toestaat. Dit wordt vóór al het andere over het verzoek gecontroleerd. |
| 403 | data_class_not_allowed | De data_class van het verzoek is niet een die het beleid toestaat. |
| 404 | model_not_found | Geen dergelijk model voor deze organisatie. |
| 404 | hosted_unavailable | Het model staat in de catalogus maar wordt niet gehost op LLM EU, dus het kan niet worden aangeroepen. |
| 404 | not_found | De route bestaat, maar het object niet. |
| 404 | unknown_route | Er is geen route gekoppeld aan dit pad. Elk OpenAI-endpoint dat niet onder Eindpunten staat, antwoordt hiermee. |
| 404 | policy_not_found | De policy_id in llmeu hoort niet bij deze organisatie. |
| 409 | no_endpoint_for_policy | Niets voldoet aan het beleid en de residency samen, en geen van beide wordt stilzwijgend versoepeld. |
| 409 | not_a_text_model | Het genoemde model kan geen tekst genereren: het is een spraakherkennings-, embedding- of rerankermodel. |
| 409 | conflict | Het verzoek is in conflict met de huidige staat van het object. |
| 413 | request_too_large | De body overschreed de groottelimiet van het eindpunt. |
| 429 | rate_limit_exceeded | Een limiet uit de snelheidslimiettabel is bereikt. Het bericht vermeldt het resetmoment van het venster. |
| 500 | internal_error | Een onverwachte fout aan onze kant. |
| 501 | not_implemented | Het eindpunt wordt bewust niet aangeboden, of de gevraagde functionaliteit bestaat niet in deze deployment. |
| 501 | retention_not_implemented | Het beleid staat een bewaartermijn anders dan nul toe en alleen nul is geïmplementeerd, dus het verzoek wordt geweigerd in plaats van opgeslagen. |
| 501 | unsupported_n | n groter dan 1 wordt niet ondersteund. |
| 502 | upstream_error | Geen enkel eindpunt kon het verzoek na failover bedienen. De trace legt elke poging vast. |
| 502 | stream_failed | De stream is mislukt nadat deze al was gestart. |
no_endpoint_for_policy is het product dat werkt
Een 409 met deze code betekent dat het beleid en het verzoek samen geen endpoint toelaten, en dat de router weigerde een van beide stilzwijgend te versoepelen. Het is niet tijdelijk: opnieuw proberen zonder het verzoek, het beleid of de residency te wijzigen mislukt op dezelfde manier. De fout bevat de opgevraagde residency, en de trace legt vast waarom elk endpoint is afgewezen.
Fouten in een stream
Een streamingverzoek dat mislukt nadat de headers zijn verzonden, schrijft de fout als een laatste SSE-frame en daarna de terminator, zodat een client die het formaat volgt een fout ziet in plaats van een afgekapt succes.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]