Erreurs
Une seule forme pour tous les échecs.
En cas d’échec, le statut HTTP n’est pas 2xx et le corps ne contient qu’un objet error :
json
{
"error": {
"message": "Insufficient credits: this request needs 60 credits. Top up and try again.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_credits"
}
}Champs
| Champ | Description |
|---|---|
| message | Destiné à être lu, en anglais. N’en faites pas une condition : la formulation évolue |
| type | Grande catégorie, voir ci-dessous |
| code | Raison précise. C’est sur ce champ qu’il faut brancher |
| param | Nom du paramètre en cause, ou null si impossible à attribuer |
Codes courants
| HTTP | code | Signification |
|---|---|---|
| 401 | missing_api_key | En-tête Authorization absent ou pas au format Bearer sk-xxx |
| 401 | invalid_api_key | Clé inconnue, désactivée ou supprimée — volontairement indiscernables |
| 400 | invalid_request | Problème de paramètres ; lisez message. prompt vide, mode image sans image, etc. |
| 402 | insufficient_credits | Crédits épuisés. Rechargez et vérifiez /v1/credits avant de réessayer |
| 429 | rate_limit_exceeded | Trop d’appels. Temporisez puis réessayez |
| 429 | concurrency_limit_reached | Limite de parallélisme ou quota quotidien atteint. Réessayez plus tard |
| 404 | not_found | La tâche n’existe pas ou n’appartient pas à ce compte |
| 502 | generation_failed | Toutes les images ont échoué lors d’un appel synchrone. Les crédits sont déjà remboursés |
| 504 | generation_timeout | Délai dépassé sur un appel synchrone. La tâche continue et les crédits ne sont pas remboursés : récupérez-la via /v1/tasks/{id} avec l’id du message |
| 500 | internal_error | Problème côté serveur. Réessayable ; contactez-nous si cela persiste |
Une tâche asynchrone qui échoue après avoir été acceptée n’utilise pas cette forme : l’appel renvoie 200, l’objet de tâche porte status failed, et la raison figure dans error. Seuls les appels d’image synchrones transforment un échec en 502.

