Fehler
Jeder Fehlercode, den diese API antworten kann, der HTTP-Status, der ihn trägt, und was zu tun ist. Der Umschlag entspricht OpenAI, mit einer zusätzlichen Namensraum-Erweiterung.
Der Umschlag
error.message ist für Menschen im Log geschrieben, error.type benennt die Fehlerklasse, und error.code ist die stabile Kennung, auf die Sie verzweigen sollten — der Nachrichtentext ist kein Vertrag. Wo die API strukturierte Angaben hat (welche Richtlinie, welcher Endpunkt, welches Modell), stehen sie in error.llmeu und ersetzen nie die drei Standardfelder.
{
"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 folgt dem Status
Die Zuordnung unten ist die, die die API anwendet — gerendert aus derselben Tabelle, aus der ihre Antworten entstehen.
| 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
Jeder Code, der einen Client erreichen kann. Ein Test durchsucht den API-Quelltext und schlägt fehl, wenn diese Tabelle und der Code in eine der beiden Richtungen auseinanderlaufen; ein Code kann hier also nicht erfunden oder dort hinzugefügt werden, ohne dokumentiert zu sein.
| HTTP | code | Bedeutung und Vorgehen |
|---|---|---|
| 400 | invalid_request | Der Anfrage-Body hat die Validierung nicht bestanden. |
| 400 | invalid_json | Der Body war kein gültiges JSON. |
| 400 | invalid_llmeu | Das llmeu-Objekt war kein Objekt oder enthielt ein unbekanntes Feld. |
| 400 | invalid_residency | Die angeforderte Datenhaltung ist keine der vier Hosting-Klassen. |
| 400 | invalid_data_class | Die angeforderte data_class ist keine der vier Klassen. |
| 400 | invalid_retention | Die angeforderte Aufbewahrung ist nicht zero, 24h, 7d oder 30d. |
| 400 | invalid_max_tokens | max_tokens war keine positive ganze Zahl. |
| 400 | invalid_stream | stream war kein Wahrheitswert. |
| 400 | invalid_stop | stop war weder eine Zeichenkette noch eine Liste von Zeichenketten. |
| 400 | invalid_role | Eine Nachricht trug eine Rolle außerhalb von system, user, assistant und tool. |
| 400 | invalid_tools | tools oder tool_choice war fehlerhaft. |
| 400 | missing_model | Das Feld model ist erforderlich. |
| 400 | missing_messages | messages ist erforderlich und darf nicht leer sein. |
| 400 | missing_input | input ist für Embeddings erforderlich. |
| 400 | missing_name | name ist erforderlich. |
| 401 | invalid_api_key | Der Schlüssel fehlt, ist unbekannt, widerrufen oder abgelaufen. |
| 402 | budget_exceeded | Das Tagesbudget der Organisation ist verbraucht. Erhöhen Sie max_usd_per_day oder warten Sie auf das neue Fenster. |
| 403 | api_key_required | Die Anfrage nutzte eine Konsolensitzung. Legen Sie einen API-Schlüssel an und senden Sie diesen. |
| 403 | insufficient_scope | Der Schlüssel ist gültig, ihm fehlt aber der Scope, den dieser Endpunkt verlangt. |
| 403 | no_organization | Die Zugangsdaten gehören zu keiner Organisation. |
| 403 | model_denied | Die Richtlinie der Organisation verbietet dieses Modell oder seinen Anbieter. |
| 403 | policy_violation | Die Anfrage verletzt eine Regel der Organisationsrichtlinie. |
| 403 | retention_exceeds_policy | Die angeforderte Aufbewahrung ist länger, als die Richtlinie erlaubt. Diese Prüfung läuft vor allen anderen. |
| 403 | data_class_not_allowed | Die data_class der Anfrage ist von der Richtlinie nicht erlaubt. |
| 404 | model_not_found | Für diese Organisation gibt es kein solches Modell. |
| 404 | hosted_unavailable | Das Modell steht im Katalog, wird aber nicht auf LLM EU gehostet und kann daher nicht aufgerufen werden. |
| 404 | not_found | Die Route existiert, das Objekt nicht. |
| 404 | unknown_route | Unter diesem Pfad ist keine Route eingehängt. Jeder OpenAI-Endpunkt, der nicht unter Endpunkte steht, antwortet so. |
| 404 | policy_not_found | Die policy_id in llmeu gehört nicht zu dieser Organisation. |
| 409 | no_endpoint_for_policy | Nichts erfüllt Richtlinie und Datenhaltung zugleich, und keine der beiden wird still gelockert. |
| 409 | not_a_text_model | Das genannte Modell kann keinen Text erzeugen: Es ist ein Spracherkennungs-, Embedding- oder Reranker-Modell. |
| 409 | conflict | Die Anfrage steht im Konflikt mit dem aktuellen Zustand des Objekts. |
| 413 | request_too_large | Der Body hat die Größengrenze des Endpunkts überschritten. |
| 429 | rate_limit_exceeded | Ein Limit aus der Rate-Limit-Tabelle wurde erreicht. Die Meldung nennt den Zeitpunkt, zu dem das Fenster zurückgesetzt wird. |
| 500 | internal_error | Ein unerwarteter Fehler auf unserer Seite. |
| 501 | not_implemented | Der Endpunkt wird bewusst nicht angeboten, oder die angeforderte Fähigkeit existiert in dieser Installation nicht. |
| 501 | retention_not_implemented | Die Richtlinie erlaubt eine Aufbewahrung ungleich zero, implementiert ist nur zero; die Anfrage wird abgelehnt statt still gespeichert. |
| 501 | unsupported_n | n größer als 1 wird nicht unterstützt. |
| 502 | upstream_error | Nach dem Failover konnte kein Endpunkt die Anfrage bedienen. Der Trace hält jeden Versuch fest. |
| 502 | stream_failed | Der Stream ist gescheitert, nachdem er begonnen hatte. |
no_endpoint_for_policy heißt: das Produkt funktioniert
Ein 409 mit diesem Code bedeutet, dass Richtlinie und Anfrage zusammen keinen Endpunkt zulassen und der Router es abgelehnt hat, eine der beiden Seiten still zu lockern. Es ist kein vorübergehender Fehler: Ein neuer Versuch ohne Änderung an Anfrage, Richtlinie oder Datenhaltung scheitert genauso. Die Antwort nennt die angeforderte Datenhaltung, der Trace hält fest, warum jeder Endpunkt abgelehnt wurde.
Fehler innerhalb eines Streams
Scheitert eine Streaming-Anfrage, nachdem die Header gesendet wurden, schreibt die API den Fehler als letzten SSE-Frame und danach den Abschluss, damit ein Client, der das Format befolgt, einen Fehler sieht statt einer abgeschnittenen Erfolgsantwort.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]