Plateforme

Erreurs

Les erreurs sont renvoyées en JSON au format de l’endpoint appelé, avec un message lisible et, sur les endpoints au format OpenAI, un code stable pour les programmes.

Le format

Endpoints au format OpenAI
{
"error": {
"message": "This API key can't use `gpt-6-astra`. It's limited to gpt-6-sol. Change that at https://zurelay.com/app/keys.",
"type": "permission_error",
"param": "model",
"code": "model_not_allowed"
}
}

Sur /v1/messages, les mêmes erreurs sont renvoyées au format Anthropic, sans code : utilisez le statut HTTP et error.type : { "type": "error", "error": { "type": "...", "message": "..." } }. Chaque réponse de chat, d’image ou de vidéo, qu’il y ait une erreur ou non, contient un en-tête x-request-id.

Codes

StatutCodeQue faire
400invalid_requestCorrigez la requête : le message indique le problème et param précise où il se trouve.
400unsupported_contentLe modèle ne lit pas ce type de fichier. Retirez-le ou choisissez un modèle compatible.
400invalid_urlUn lien de la requête n’a pas pu être téléchargé. Le message indique le statut renvoyé.
400invalid_imageUne image fournie n’a pas pu être utilisée (type, taille ou lien).
400image_not_generatedLe modèle a refusé le prompt. Aucuns frais.
400context_length_exceededLe modèle indique que la conversation est trop longue pour lui. Raccourcissez-la ou choisissez un modèle avec une fenêtre de contexte plus grande.
400max_tokens_reachedUne réponse /v1/messages sans streaming a atteint votre limite max_tokens au milieu d’un appel d’outil : le message est donc incomplet. Le contenu généré est facturé. Renvoyez la requête avec une valeur max_tokens plus élevée.
401missing_api_keyEnvoyez la clé dans Authorization ou x-api-key.
401invalid_api_keyLa clé est incorrecte ou révoquée.
401expired_api_keyCréez une nouvelle clé.
402insufficient_quotaVotre solde, déduction faite des montants réservés par vos requêtes en cours, ne couvre pas cette requête, ou il s’est épuisé pendant la réponse. Ajoutez du crédit dans Facturation, ou demandez une réponse plus courte en réduisant max_tokens. Si la recharge automatique a lancé un ajout de crédit, le message le précise : réessayez quelques secondes plus tard.
402key_budget_exceededLa requête risque de dépasser le budget mensuel de la clé, en tenant compte des requêtes en cours, ou l’a atteint en cours de réponse. Augmentez le budget ou attendez le mois prochain.
402key_daily_budget_exceededMême chose pour le budget quotidien de la clé. Augmentez-le ou attendez minuit UTC.
403model_not_allowedLa clé n’est pas autorisée à utiliser ce modèle.
403ip_not_allowedLa clé ne fonctionne que depuis d’autres adresses.
404model_not_foundVérifiez l’identifiant du modèle sur la page des modèles.
404unknown_urlCet endpoint n’existe pas. Vérifiez le chemin et l’URL de base.
404video_not_foundAucune vidéo avec cet identifiant dans cet espace de travail.
404image_not_foundAucune requête d’image avec cet identifiant dans cet espace de travail (GET /v1/images/{id}, pour les requêtes effectuées avec un callback_url).
409video_not_readyLa vidéo n’est pas terminée : vérifiez régulièrement son statut jusqu’à ce qu’il soit completed.
409video_failedLa génération de la vidéo a échoué : il n’y a donc rien à télécharger. Son erreur en indique la raison.
410video_expiredLa vidéo a été supprimée, depuis la Bibliothèque ou à l’issue de ses 30 jours.
413too_largeLa requête ou un fichier dépasse la limite. Envoyez les fichiers volumineux sous forme de liens.
429rate_limit_exceededAttendez le nombre de secondes indiqué par retry-after, puis réessayez.
429concurrency_limit_exceededL’espace de travail a déjà 32 requêtes en cours simultanément. Réessayez après le nombre de secondes indiqué par retry-after, une fois qu’une requête est terminée.
500server_errorUn problème est survenu de notre côté. Réessayez.
502stream_interruptedEnvoyé comme dernier événement d’un flux interrompu. Le contenu transmis avant l’interruption est facturé, rien après ; réessayez.
503model_unavailableLe modèle est indisponible pour le moment. Réessayez après le nombre de secondes indiqué par retry-after, ou activez le routage intelligent. Sans retry-after et avec x-should-retry: false, le modèle est disponible, mais renvoie systématiquement une erreur pour cette requête : ne la renvoyez pas telle quelle.
503server_restartingZurelay redémarre la machine qui traitait votre requête. Réessayez immédiatement : une autre machine prendra le relais. Aucuns frais, sauf si un flux avait démarré : le contenu reçu est alors facturé, comme pour un flux interrompu.
503storage_unavailableUne image a été générée, mais n’a pas pu être transmise. Aucuns frais ; réessayez.
503service_unavailableUn problème temporaire de notre côté. Réessayez.

Nouvelles tentatives

  • Réessayez en cas de 429 et 503, en attendant le nombre de secondes indiqué par l’en-tête retry-after (ou en augmentant le délai de façon exponentielle), sauf si la réponse indique x-should-retry: false.
  • Ne renvoyez pas les requêtes ayant produit d’autres erreurs 4xx sans les modifier : elles échoueront de la même façon.
  • Les requêtes qui échouent sont gratuites : réessayer ne coûte donc rien tant qu’aucune ne réussit. Un flux interrompu est facturé pour le contenu transmis, et les rares erreurs 503 avec x-should-retry: false sont facturées pour leur entrée (voir Facturation).
  • Les SDK officiels d’OpenAI et d’Anthropic réessaient déjà automatiquement en cas d’erreurs appropriées.

Erreurs en cours de streaming

Les erreurs renvoyées par un modèle au sujet de votre requête (un paramètre non pris en charge, un prompt trop long) sont transmises avec le message et le code du modèle, sous forme d’erreur 400 ou 422.

Erreurs en cours de streaming

Une fois le flux démarré, une erreur ne peut plus être renvoyée sous forme de statut HTTP. Vous recevez à la place un dernier événement d’erreur (au format de l’endpoint), puis le flux se termine. L’entrée et la sortie reçue avant l’erreur vous sont facturées, rien après. C’est rare : la plupart des problèmes sont détectés et font l’objet d’une nouvelle tentative avant le premier token.

Le même type d’événement met fin à un flux dont le solde ou le budget de la clé s’épuise en cours de route, avec insufficient_quota, key_budget_exceeded ou key_daily_budget_exceeded. Une requête sans streaming dont le budget s’épuise en cours de route renvoie le contenu déjà généré, tronqué comme une réponse ayant atteint max_tokens (finish_reason: "length", ou stop_reason: "max_tokens" sur /v1/messages), avec un en-tête x-zurelay-stopped indiquant le code.

Une question ou un élément manquant ? Contactez notre équipe d’assistance et nous vous répondrons par e-mail, généralement en moins d’une minute.