Passer au contenu principal

Enveloppe d’erreur

La plupart des réponses d’erreur utilisent cette forme JSON compatible OpenAI :
{
  "error": {
    "message": "Descriptive error message",
    "type": "orcarouter_api_error",
    "code": "model_not_found"
  }
}
type est une catégorie large, code est un identifiant spécifique. Certains échecs de chemin rapide (notamment les 429 au niveau espace de travail) ne retournent qu’un code de statut HTTP avec les en-têtes pertinents et aucun corps JSON.

Codes de statut HTTP

StatutSignificationCause typique
400Mauvaise requêteParamètres invalides, champs requis manquants, violation de schéma
401Non autoriséClé API manquante ou invalide
403InterditQuota insuffisant, ou la clé ne peut appeler ce modèle
404Non trouvéLe modèle ou l’endpoint n’existe pas
429Trop de requêtesLimite de taux atteinte — voir Limites de taux. La réponse inclut toujours un en-tête Retry-After.
500Erreur interneBug côté OrcaRouter
502Erreur amontTous les fournisseurs amont ont échoué (incluant toute chaîne de fallback)
503Service indisponibleLe modèle demandé est temporairement indisponible en amont

Types d’erreur que vous pouvez voir dans error.type

error.typeD’où il vient
orcarouter_api_errorÉchecs côté passerelle (auth, quota, taux, interne)
upstream_errorLe fournisseur amont a retourné une erreur ou expiré
openai_errorErreur amont compatible OpenAI préservée mot pour mot
claude_errorErreur amont Anthropic préservée mot pour mot
gemini_errorErreur amont Gemini préservée mot pour mot

Codes d’erreur que vous pouvez voir dans error.code

Ce sont des codes émis par la passerelle pour les échecs qui proviennent d’OrcaRouter (pas de l’amont) :
error.codeHTTPSignification
insufficient_user_quota403Crédit du compte épuisé. Rechargez.
model_not_found503Ce modèle n’est pas disponible pour votre compte.
model_price_error400Le prix de ce modèle n’est pas configuré. Contactez le support.
api_not_implemented400Endpoint ou opération non pris en charge pour le modèle choisi.
bad_request_body400Le corps de la requête n’a pas pu être analysé.
prompt_blocked400La politique de sécurité du fournisseur a bloqué le prompt avant génération.
sensitive_words_detected400Le filtre de contenu sensible a rejeté le prompt.
Si vous avez besoin de distinguer programmatiquement, faites correspondre d’abord sur error.code (spécifique) et revenez à error.type (catégorie large).

Erreurs de streaming

Les erreurs pendant une réponse streamée ne peuvent pas utiliser de codes de statut HTTP (le statut a été envoyé à l’ouverture du flux). Le format dépend de l’endpoint :

/v1/chat/completions et /v1/responses (compatible OpenAI)

L’erreur arrive comme un morceau data: {...} en bande :
data: {"error":{"message":"...","type":"upstream_error","code":""}}

data: [DONE]
Analysez chaque morceau data: comme JSON ; s’il a un champ error, traitez le flux comme échoué.

/v1/messages (compatible Anthropic)

Anthropic utilise des événements nommés SSE. Un échec de flux arrive comme :
event: error
data: {"type":"error","error":{"type":"overloaded_error","message":"..."}}
Le flux se termine par event: message_stop (ou est coupé) après l’événement d’erreur.

Erreurs de fallback

Quand extra_body.models est défini et que tous les modèles de la chaîne échouent, vous obtenez un 502 avec les détails de la dernière erreur amont. Les en-têtes de réponse X-Orca-Fallback-Level et X-Orca-Fallback-Model indiquent quel fallback était essayé quand la chaîne a été épuisée. Voir En-têtes de réponse.