API publiqueCodes d'erreur

Codes d'erreur

Toutes les erreurs sont renvoyées au format OpenAI{ error: { message, type, code } } avec un code HTTP cohérent. Les SDK officiels parsent ce format nativement et lèvent des exceptions typées.

Format d'erreur#format

Tous les status >= 400 renvoient un body JSON de la forme suivante. Le champ code identifie la cause de manière stable, le message est destiné aux humains.

application/json
{
  "error": {
    "message": "Modèle \"foo\" inconnu. Modèles disponibles : \"3gk-llm\" (Chat completions), \"3gk-embed\" (Embeddings), \"3gk-rerank\" (Reranking).",
    "type": "model_not_supported",
    "code": "model_not_supported"
  }
}

Codes & causes#codes

400
invalid_request · Body absent, JSON invalide, ou champ obligatoire manquant (model, messages).
400
model_not_supported · L'identifiant demandé n'est pas dans la liste exposée par GET /v1/models (alias 3gk-*).
400
context_length_exceeded · Prompt (ou message système) au-delà du nombre de tokens maximal accepté par la plateforme. Raccourcissez le contexte.
401
auth_error · Header Authorization manquant, mal formé, clé révoquée ou compte client suspendu.
402
insufficient_quota · Crédits prépayés épuisés, essai terminé (tokens offerts consommés ou échéance dépassée), plafond de sécurité du forfait atteint pour le mois, échec de paiement de l'abonnement, ou facture de dépassement impayée. Rechargez, changez de forfait, mettez à jour votre moyen de paiement ou réglez la facture depuis votre espace Facturation. Cas particulier : un litige de paiement (contestation bancaire) suspend l'accès à l'API jusqu'à sa levée par le support — le message le précise, l'espace Facturation ne permet pas de la débloquer seul.
409
invalid_request · Conflit d'état : DELETE /v1/jobs/{id} sur un job running. Une génération en cours ne peut être ni annulée ni supprimée avant sa fin — réessayez une fois le job terminé.
413
payload_too_large · Corps de requête au-delà de la taille maximale acceptée (limite globale de la plateforme).
429
rate_limit_exceeded · Cadence trop élevée pour votre adresse IP, ou trop de requêtes simultanées pour votre compte. Ralentissez et réessayez avec backoff.
429
queue_full · Trop de jobs asynchrones déjà en attente pour votre compte (background: true).
500
internal · Erreur native côté gateway (cas exceptionnel). Le id de la réponse, s'il est renvoyé, permet à l'admin de retrouver la trace.
502
upstream_error · Le backend choisi (primaire ou secours) a renvoyé un 5xx, un JSON invalide ou s'est avéré injoignable au niveau réseau.
503
upstream_error · Aucun backend disponible pour servir le modèle demandé (configuration en cours côté plateforme).
503
internal · Indisponibilité interne temporaire, jamais un défaut de votre requête : tarification du service non configurée pour un compte facturé (l'appel est refusé plutôt que servi hors tarif), ou file de jobs asynchrones injoignable à la soumission (background: true). Réessayez plus tard.
504
upstream_timeout · Le backend a dépassé le timeout configuré (par défaut 600 s ; surchargeable par instance).

Stratégies de retry#strategies

  • 400 / 401 / 402 / 413 — ne pas retry. Corriger le payload, la clé, le solde ou la taille de la requête.
  • 409 — ne pas retry immédiatement : l'état ne changera qu'à la fin du job. Attendre que le polling renvoie un statut terminal, puis rappeler DELETE.
  • 429 — retry avec backoff exponentiel (1 s · 2 s · 4 s…) ; limitez le nombre d'appels simultanés par compte.
  • 500 / 502 — retry avec backoff exponentiel (jusqu'à 3 tentatives, 1 s · 4 s · 16 s).
  • 503 — l'incident est administratif (modèle par défaut absent, fallback non configuré, tarif du service manquant, file de jobs injoignable). Retry très espacé (dizaines de secondes) ou avertir l'utilisateur final ; ne pas hammerer.
  • 504 — réduire max_tokens ou simplifier le prompt. Le timeout par défaut est large (600 s).
Limites de débit. Un 429 est renvoyé au format d'erreur ci-dessus (code rate_limit_exceeded ou queue_full) ; aucun header X-RateLimit-* n'est exposé pour l'instant. Les seuils sont globaux à la plateforme et dimensionnés pour un usage applicatif normal — contactez-nous si votre intégration a besoin de plus.