Notions clés

Erreurs

Une requête refusée reçoit un statut 4xx ou 5xx et un corps de même forme sur toutes les routes.
json
{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "A request parameter is missing or invalid. See 'param'.",
"param": "limit"
},
"request_id": "req_8fK2mQ4vTn7cX1bZ9wLp3hRs"
}
ChampDescription
error.typeFamille de l’erreur, déduite du statut.
error.codeMotif précis et stable : le champ à lire dans le code.
error.messageExplication en anglais, pour le développeur. À ne pas afficher à l’utilisateur final.
error.paramParamètre ou en-tête en cause (image, layers[0].action, Idempotency-Key…), ou null.
request_idIdentifiant de la requête, identique à l’en-tête request-id.
Statuttype
400, 404, 405, 409, 413, 415, 422invalid_request_error
401authentication_error
402billing_error
403permission_error
429rate_limit_error
500, 503api_error
StatutCodeCause
400parameter_invalidParamètre, en-tête ou corps JSON absent ou invalide ; param le nomme.
400request_invalidRequête refusée sans motif plus précis, formulaire multipart/form-data mal formé par exemple.
400image_unreadableImage illisible (voir Images d’entrée).
400image_dimensions_invalidImage de plus de 8 192 pixels de côté ou de 36 millions de pixels ; upscaling : voir Upscaling.
400image_url_unreachableImage non téléchargeable : URL privée ou injoignable, réponse en erreur, délai dépassé.
400mask_invalidMasque d’édition qui n’est pas un PNG lisible.
400mask_dimensions_mismatchMasque aux proportions différentes de l’image, ou de grand côté sous 512 pixels (sous celui de l’image, si elle est plus petite).
400mask_colors_mismatchCouleurs du masque et calques ne correspondent pas ; param nomme le calque ou mask.
401api_key_missingEn-tête Authorization: Bearer … absent.
401api_key_invalidClé mal formée, inconnue ou révoquée, ou organisation supprimée.
401api_key_expiredClé expirée.
402insufficient_balanceSolde insuffisant pour le prix de la génération (voir Facturation).
402spend_limit_reachedLa génération dépasserait le plafond mensuel.
403permission_deniedDroit manquant ; le message le nomme (voir Authentification).
403ip_not_allowedAdresse IP absente de la liste de la clé.
403origin_not_allowedRequête /mcp envoyée depuis une page web (en-tête Origin).
403organization_suspendedOrganisation suspendue, quelle que soit la clé. Contactez le support.
404route_not_foundChemin inconnu sous /v1.
404resource_not_foundRessource inexistante, d’une autre organisation ou de l’autre mode (test ou réel).
405method_not_allowedMéthode non permise ; l’en-tête Allow liste les méthodes permises.
409conflictLa requête contredit l’état actuel de la ressource.
409generation_not_cancelableGénération déjà commencée ou terminée.
409idempotency_key_reusedIdempotency-Key déjà utilisée pour une autre requête (voir Idempotence).
409idempotency_key_in_useUne requête de même Idempotency-Key est encore en cours.
413request_too_largeCorps JSON de plus de 64 Ko ; en multipart/form-data, plus de 64 Ko de champs texte ou un corps au-delà de cinq images de 10 Mo.
413image_too_largeImage de plus de 10 Mo.
415unsupported_media_typeCorps ni en application/json, ni en multipart/form-data pour une création de génération.
415unsupported_image_typeImage ni JPEG, ni PNG, ni WebP d’après son contenu, ou URL qui ne renvoie pas une image.
422content_policy_violationConsigne d’édition refusée par la modération (param vaut prompt).
429rate_limit_exceededTrop de requêtes par minute (voir Limites de débit).
429generation_rate_limit_exceededGénérations lancées par minute ou par heure permises par le palier atteintes (voir Limites de débit).
500internal_errorErreur interne.
503maintenanceAPI en maintenance.
503mode_unavailableCe type de génération est momentanément indisponible.
503service_unavailableService momentanément indisponible (modération des consignes, panne passagère).
503overloadedForte affluence : génération refusée à l’entrée, ou images reçues non analysées à temps.
  • Une demande de génération refusée (4xx ou 503) ne crée rien et ne débite rien.
  • Une ressource d’une autre organisation répond 404, jamais 403.
  • Une génération acceptée qui échoue ensuite n’est pas une erreur HTTP : son status vaut failed (voir Générations).
  • 429 et 503 : réessayez après le nombre de secondes de l’en-tête Retry-After, ou plus tard en son absence.
  • 409 idempotency_key_in_use : réessayez plus tard avec la même clé d’idempotence.
  • 500 : quelques essais au plus, en doublant l’attente (1 s, 2 s, 4 s).
  • Autres 4xx : corrigez la requête ; renvoyée telle quelle, elle reçoit la même réponse.
  • Code inconnu : traitez-le d’après son statut et son type ; de nouveaux codes peuvent s’ajouter.
  • Journalisez l’en-tête request-id, présent sur toute réponse : le support retrouve l’appel grâce à lui.