Open AIavDocsAccueil
Conservez les clés API dans des variables d’environnement côté serveur ou dans un gestionnaire de secrets. Ne les placez jamais dans des bundles de navigateur, dans Git, dans des journaux ou sur des captures d’écran.

Démarrage rapide avec les SDK officiels

Les SDK officiels encapsulent tout le parcours (création → polling → téléchargement) avec des clés d’idempotence automatiques et des erreurs typées. Le SDK Node n’a aucune dépendance ; le SDK Python dépend uniquement de httpx. Ils sont pour l’instant distribués sous forme de dépôts GitHub ; les publications sur npm et PyPI seront annoncées séparément.

Node

npm install github:openaiav/sdk-node   # npm release to be announced

import { OpenAiav } from '@openaiav/sdk'
const client = new OpenAiav({ apiKey: process.env.OPENAIAV_API_KEY })
const task = await client.generations.createAndWait({
  model: 'seedance-2.5-oa', prompt: 'She walks into the sunlight.',
  resolution: '480p', aspectRatio: 'adaptive', durationSeconds: 4,
  generateAudio: false
})
await client.generations.downloadToFile(task.id, './out.mp4')

Python

pip install git+https://github.com/openaiav/sdk-python   # PyPI release to be announced

from openaiav import OpenAiav
client = OpenAiav(os.environ["OPENAIAV_API_KEY"])
task = client.generations.create_and_wait({
    "model": "seedance-2.5-oa", "prompt": "She walks into the sunlight.",
    "resolution": "480p", "aspectRatio": "adaptive", "durationSeconds": 4,
    "generateAudio": False,
})
client.generations.download_to_file(task["id"], "./out.mp4")

Intégration en quatre étapes

  1. Utilisez la variable d’environnement OPENAIAV_API_KEY côté serveur pour appeler https://api.openaiav.com/v1/models et lire les clés de modèle, les tarifs et les reference_modes actuels.
  2. Envoyez prompt, referenceMode et referenceImages en POST à /v1/generations. Les images de référence sont des URL HTTPS publiques et ne nécessitent aucun préenregistrement. La réussite renvoie HTTP 201.
  3. Enregistrez l’id renvoyé et interrogez le même GET /v1/generations/{id} après poll_after_ms. Continuez d’attendre pour processing, result_pending et submission_unknown ; ne créez pas d’autre tâche.
  4. Une fois le statut succeeded, téléchargez avec GET /v1/generations/{id}/content. Une réponse complète renvoie HTTP 200 et une plage d’octets unique 206.

Authentification et idempotence

export OPENAIAV_API_KEY='oav_...'
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY  (reuse this value only when retrying this same create)"

Envoyez Authorization: Bearer oav_... à chaque requête et conservez la clé côté serveur. La création requiert generation:create ; le polling et le téléchargement requièrent generation:read. Générez une nouvelle Idempotency-Key (un UUID) pour chaque intention de création, afin que chaque exécution d’un exemple obtienne une nouvelle clé ; ne la réutilisez que pour relancer cette même création après un résultat réseau incertain, et n’associez jamais une même clé à des corps différents.

En-têtes de requête

ParamètreTypeObligatoireDescription
AuthorizationstringObligatoireChaque requête /v1 utilise Bearer oav_... ; conservez la clé sur votre serveur.
Idempotency-KeystringObligatoire pour créer une tâcheGénérez une nouvelle valeur (par exemple un UUID) pour chaque intention de création et ne la réutilisez que pour relancer cette même création ; avec la même valeur et le même corps, rien n’est créé ni facturé deux fois.
Content-TypestringObligatoire pour POSTLa création de générations utilise application/json.

Endpoints

MéthodeCheminRéussitePermissionDescription
GET/v1/models200Toute clé API valideLit les modèles disponibles à la vente, leurs tarifs, résolutions, durées et reference_modes. Vérifiez les fonctionnalités dans le catalogue avant l’envoi.
POST/v1/generation-quotes201generation:createAffiche le prix actuel sans le bloquer. La création recalcule le prix et débite exactement le reserved_usd de sa réponse comme montant fixe ; une tâche échouée est intégralement remboursée. quoteId reste accepté et expires_at indique seulement quand actualiser.
POST/v1/generations201generation:createCrée une tâche asynchrone ; envoyez les images de référence et referenceMode dans la même requête JSON.
GET/v1/generations/{id}200generation:readInterroge la même tâche selon poll_after_ms jusqu’à ce qu’elle atteigne un état final.
GET/v1/generations/{id}/content200 / 206generation:readTélécharge le résultat après réussite ; une requête sur une seule plage d’octets renvoie 206.

Étape 1 : lire les fonctionnalités des modèles

Ne codez pas en dur les fonctionnalités des modèles. N’envoyez que les modes listés dans reference_modes, et masquez ou bloquez les combinaisons incompatibles avant l’envoi. L’exemple minimal montre une requête de 4 secondes en 480p, sans audio, avec seedance-2.5-oa.

curl --fail-with-body 'https://api.openaiav.com/v1/models' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

Exemple vidéo public minimal

L’exemple contient tout le parcours : création → polling de la même tâche → téléchargement. first_frame utilise une image de référence et adaptive ; generateAudio=false évite de demander de l’audio. Les codes de réussite sont 201, 200 et 200/206 ; en cas d’échec, examinez d’abord le code HTTP, puis error.code.

# Keep OPENAIAV_API_KEY in an environment variable; do not paste secrets into shell history.
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY  (reuse this value only when retrying this same create)"

# 1. Create — success: HTTP 201. On failure, the response body contains error.code.
# Lost response (timeout or dropped connection)? Re-run this same command in this shell:
# the unchanged $IDEMPOTENCY_KEY returns the original task instead of creating a second one.
curl --fail-with-body --request POST 'https://api.openaiav.com/v1/generations' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY" \
  --header "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "seedance-2.5-oa",
  "prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "adaptive",
  "durationSeconds": 4,
  "referenceMode": "first_frame",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}'

# 2. Save the returned id as TASK_ID. Poll the same id — success: HTTP 200.
curl --fail-with-body 'https://api.openaiav.com/v1/generations/TASK_ID' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

# Repeat step 2 after poll_after_ms until status is succeeded or failed.
# Never recreate a task whose status is submission_unknown.

# 3. After succeeded, download — success: HTTP 200 (or 206 with Range).
curl --fail-with-body --location 'https://api.openaiav.com/v1/generations/TASK_ID/content' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY" \
  --output 'result.mp4'

Paramètres de la requête

ParamètreTypeObligatoireDescription
modelstringObligatoireUtilisez la valeur model renvoyée par GET /v1/models ; l’exemple vidéo minimal utilise seedance-2.5-oa.
promptstringObligatoireDe 1 à 4000 caractères. La référence omni peut désigner les images dans l’ordre du tableau : @Image1, @Image2, etc.
resolutionstringFacultatifDoit figurer dans les resolutions du modèle choisi ; l’exemple vidéo minimal utilise 480p.
aspectRatiostringFacultatifDoit figurer dans les aspect_ratios du modèle choisi ; utilisez adaptive lorsque le modèle l’exige pour les requêtes avec première image. Pour les modèles d’image qui indiquent image_size_options, envoyez une paire resolution et aspectRatio issue de cette liste : tous les formats ne sont pas disponibles dans toutes les résolutions.
durationSecondsintegerFacultatifLa durée vidéo doit être indiquée avec durationSeconds comme nombre entier dans la plage duration_seconds du catalogue ; si elle est omise, le minimum du modèle est utilisé. L’exemple minimal utilise 4 secondes.
referenceModefirst_frame | omni_referenceObligatoire avec des images de référence vidéoÀ utiliser uniquement avec les modèles vidéo Seedance qui indiquent explicitement le mode dans reference_modes. Une requête ne peut choisir qu’un seul mode.
referenceImagesstring[]À fournir avec referenceModeURL d’images HTTPS publiques. first_frame exige exactement une image ; la limite de omni_reference figure dans reference_images_max.
inputImagesstring[]FacultatifImages d’entrée (images de référence) pour la génération image vers image, uniquement pour les modèles d’image. Chaque élément est une URL d’image HTTPS publique ou une data URL de la forme data:image/png;base64,…, data:image/jpeg;base64,… ou data:image/webp;base64,…. Consultez les limites de chaque modèle dans GET /v1/models : input_images_max, input_image_max_bytes (par image, par URL ou data URL) et input_image_mime_types. Les images de référence peuvent augmenter le montant facturé. Ne les combinez pas avec un mode de référence vidéo.
generateAudiobooleanFacultatifVaut true par défaut pour les modèles vidéo qui prennent en charge l’audio. L’exemple le moins cher envoie explicitement false ; le catalogue actuel ne prévoit aucun supplément audio distinct, et GET /v1/models fait toujours foi pour la facturation.
outputFormatmp4 | movFacultatifChoisissez uniquement parmi les output_formats du catalogue ; l’exemple minimal utilise mp4.

Modes de référence

first_frame

first_frame : l’image de référence devient la première image et fixe la composition. Envoyez exactement un élément dans referenceImages ; aspectRatio provient des aspect_ratios du modèle et est fixé à adaptive lorsque le catalogue le propose (le résultat suit l’image de référence). first_last_frame : envoyez exactement 2 referenceImages. L’ordre du tableau est la première image, puis la dernière, et le modèle génère l’intervalle. Les deux images n’ont pas besoin d’avoir les mêmes dimensions. Les modes d’image ne peuvent pas être combinés avec omni_reference.

{
  "model": "seedance-2.5-oa",
  "prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "adaptive",
  "durationSeconds": 4,
  "referenceMode": "first_frame",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}

omni_reference

omni_reference : les médias de référence assurent la cohérence du sujet, du style et de la scène sans devenir la première image. En plus de referenceImages, les modèles compatibles acceptent aussi referenceVideos et referenceAudios ; les limites par type figurent dans le tableau ci-dessous, et tout type non déclaré par le catalogue renvoie une erreur 400 à l’envoi. Les prompts désignent les éléments selon leur ordre dans chaque type : @Image1, @Video1, @Audio1.

{
  "model": "seedance-2.5-oa",
  "prompt": "Keep the identity and outfit from @Image1; a young woman walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "16:9",
  "durationSeconds": 4,
  "referenceMode": "omni_reference",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}

Compatibilité actuelle

Une seule intégration pour tous les modèles vidéo : même endpoint, mêmes champs. Changer de modèle revient à modifier model uniquement. Toutes les différences sont déclarées par le catalogue, et le tableau ci-dessous est ce catalogue : pour chaque modèle, les modes de référence pris en charge et la quantité acceptée pour chaque type de média. Tout ce que le catalogue ne déclare pas est refusé explicitement à l’envoi, jamais ignoré en silence.

Le catalogue n’est pas chargé. Appelez d’abord GET /v1/models ; n’envoyez pas de mode de référence pour un modèle sans reference_modes.

Détails sur la première image et relais de la dernière image

Détails sur la première image : first_frame et omni_reference s’excluent mutuellement, une requête en choisit donc un seul. Avec la référence omni, vous pouvez orienter une image de référence vers le plan d’ouverture via le prompt ; mais si la première image doit être strictement identique, envoyez cette image en mode first_frame. Sur Seedance 2.5, les tâches avec première image fixent le format d’image à adaptive (le résultat suit la première image). Relais de la dernière image : passez returnLastFrame: true à la création, et une tâche réussie renvoie aussi last_frame_url (un PNG sans filigrane à la taille de la vidéo, conservé 24 heures). Utilisez directement cette URL comme referenceImages du first_frame de la requête suivante pour enchaîner plusieurs plans, sans étape de préenregistrement.

Tarification des vidéos de référence

  • Les vidéos de référence dont la durée est mesurable sont facturées à prix fixe, que vous pouvez prévisualiser d’abord. Si leur durée ne peut pas être mesurée, la prévisualisation est refusée sans frais.
  • Appelez POST /v1/generation-quotes pour voir le prix actuel. Les vidéos URL sont remesurées et revalorisées à la création ; le reserved_usd de la réponse est le montant réel. quoteId ne bloque pas le prix et expires_at suggère seulement une actualisation.
  • Le catalogue fixe les durées par vidéo et au total, le nombre de vidéos et la durée minimale facturable. Chaque vidéo de référence doit durer de 2 à 15 secondes pour la série Seedance 2.0 et de 2 à 30 secondes pour les autres modèles compatibles. Une durée mesurée hors limites renvoie 422 REFERENCE_DURATION_OUT_OF_RANGE sans frais.
  • Utilisez un lien direct HTTPS public vers un MP4/MOV. Une taille connue supérieure à 200 MiB renvoie REFERENCE_VIDEO_TOO_LARGE ; une taille inconnue peut être chiffrée. Les URL privées renvoient REFERENCE_URL_NOT_PUBLIC et les sondes occupées 429 REFERENCE_PROBE_BUSY. Les téléversements console sont limités à 32 MiB.
  • Pour chaque tâche, le prix de son devis, reserved_usd, est débité à la création ; en cas de réussite, ce montant est définitif, et en cas d’échec il est intégralement remboursé. Le price_usd d’une prévisualisation correspond à ce que coûterait la création à ce moment-là ; précisez la durée, sans -1.
  • Les URL publiques de vidéo sont vérifiées pour la prévisualisation puis à la création, avant d'être transmises directement sans stockage ni enregistrement. Gardez leur contenu stable. Les téléversements suivent une autre voie ; les restrictions relatives aux visages réels restent applicables.

Tarifs des modèles d’image

  • Les modèles d’image sont facturés à l’image selon resolution et aspectRatio (image_pricing.rates). Pour les modèles gpt-image-* et nano-banana-*, les prix affichés correspondent à un prompt court sans image de référence.
  • Pour ces modèles, les images de référence et les prompts plus longs augmentent le montant facturé. Avant de créer une tâche, appelez POST /v1/generation-quotes avec le même corps : price_usd est le montant facturé pour cette requête aux prix actuels. Une tâche échouée est entièrement remboursée.

Polling et téléchargement

Seuls succeeded et failed sont des états finaux. submission_unknown signifie que l’acceptation est en cours de confirmation et result_pending en cours de finalisation : conservez l’ID de tâche d’origine, continuez l’interrogation et ne rejouez jamais la création. Après réussite, utilisez le chemin authentifié /content plutôt qu’une adresse extérieure à Open AIav. Les résultats sont conservés 24 heures (la réponse de détail contient output_expires_at ; les téléchargements expirés renvoient 410 OUTPUT_EXPIRED, enregistrez-les donc rapidement).

ÉtatFinalAction
processingNonAcceptée ; interrogez à nouveau après poll_after_ms.
result_pendingNonLe résultat est en cours de finalisation. Conservez l’ID et interrogez la même tâche ; ne la recréez pas.
submission_unknownNonL’acceptation est en cours de confirmation ; ne rejouez pas la création. Conservez l’ID de tâche d’origine et continuez de l’interroger.
succeededOuiRéussie ; téléchargez le résultat avec /content.
failedOuiÉchec définitif, le montant a été intégralement remboursé ; consultez error_code.

Migration des endpoints supprimés

Les anciens endpoints /v1/assets, /v1/assets/content, /v1/assets/{id}, /v1/asset-groups et /v1/asset-groups/{id} sont supprimés ; une clé valide disposant de l’ancien scope correspondant reçoit HTTP 410 / ENDPOINT_RETIRED. Les nouvelles intégrations ne doivent pas appeler ces chemins ; placez referenceMode et referenceImages dans la même requête de génération.

Référence des codes d’erreur

Référence complète : statut HTTP, code, signification, action conseillée et classe d’erreur du SDK. Ce tableau partage sa source de données avec la correspondance des erreurs du SDK ; les nouveaux codes inconnus sont traités par le SDK selon leur statut HTTP.

HTTPCodeSignificationAction conseilléeSDK
401UNAUTHENTICATEDClé API absente ou non reconnue.Envoyez Authorization: Bearer oav_… ; conservez la clé côté serveur.AuthenticationError
401INVALID_API_KEYLa clé API est invalide ou révoquée.Vérifiez la clé dans la console ; renouvelez-la pour en obtenir une nouvelle si nécessaire.AuthenticationError
403INSUFFICIENT_SCOPELa clé n’a pas la permission (scope) requise pour cette opération.La création requiert generation:create ; le polling et le téléchargement requièrent generation:read.PermissionError
429RATE_LIMITEDLes requêtes ont dépassé la limite de débit de la clé.Patientez selon Retry-After / retryAfterSeconds avant de réessayer ; le SDK le fait automatiquement.RateLimitError
400IDEMPOTENCY_KEY_REQUIREDLa création requiert un en-tête Idempotency-Key.Générez une clé unique pour chaque nouvelle requête et réutilisez-la pour les nouvelles tentatives. Le SDK en génère une automatiquement.InvalidRequestError
409IDEMPOTENCY_KEY_CONFLICTLa même clé d’idempotence a été utilisée avec un corps différent.Utilisez une nouvelle clé pour des paramètres différents ; gardez la clé et le corps identiques lors des nouvelles tentatives.InvalidRequestError
400MODEL_NOT_FOUNDID de modèle inconnu.Utilisez les ID renvoyés par GET /v1/models (p. ex. seedance-2.5-oa).InvalidRequestError
503MODEL_NOT_AVAILABLELe modèle ne peut pas être appelé pour le moment.Rien n’a été facturé. Vérifiez le status du modèle dans GET /v1/models, puis réessayez plus tard.ServerError
400INVALID_PROMPTLe prompt est vide ou trop long.Les prompts doivent comporter de 1 à 4000 caractères.InvalidRequestError
400INVALID_DURATIONdurationSeconds sort de la plage du modèle.Indiquez la durée vidéo par un entier durationSeconds dans la plage du catalogue.InvalidRequestError
400INVALID_RESOLUTIONLe modèle ne prend pas en charge cette résolution.Choisissez une valeur parmi les resolutions du catalogue.InvalidRequestError
400INVALID_ASPECT_RATIOLe modèle ne prend pas en charge ce format d’image.Choisissez parmi les aspect_ratios du catalogue ; first_frame impose souvent adaptive.InvalidRequestError
400INVALID_REFERENCE_IMAGESreferenceImages doit être un tableau d’URL HTTPS publiques.Fournissez des URL d’images https:// lisibles pendant toute la durée de la tâche.InvalidRequestError
400INVALID_REFERENCE_IMAGEUn élément des images de référence n’est pas une URL valide.Le message indique l’index (referenceImages[i]) ; corrigez cet élément.InvalidRequestError
400REFERENCE_IMAGE_URL_NOT_HTTPSUne URL d’image de référence n’est pas en HTTPS public.Les URL http, de réseau privé et data sont refusées ; hébergez l’image publiquement en HTTPS.InvalidRequestError
400REFERENCE_MODE_REQUIRES_IMAGESreferenceMode a été défini sans image de référence.Fournissez referenceMode et referenceImages ensemble.InvalidRequestError
400REFERENCE_MODE_NOT_SUPPORTEDLe modèle ne prend pas en charge le mode de référence demandé.Choisissez first_frame / omni_reference selon les reference_modes du catalogue.InvalidRequestError
400FIRST_FRAME_REQUIRES_ONE_IMAGEfirst_frame accepte exactement une image de référence.Envoyez exactement une image ; pour plusieurs images, utilisez omni_reference.InvalidRequestError
400TOO_MANY_REFERENCESLe nombre d’images de référence dépasse la limite du catalogue.Voir reference_images_max dans le catalogue.InvalidRequestError
400INVALID_INPUT_IMAGESinputImages doit être un tableau.Chaque élément est une URL HTTPS ou un base64 data:image/*.InvalidRequestError
400INVALID_INPUT_IMAGEUn élément des images d’entrée est mal formé.Chaque élément doit être une URL HTTPS ou un base64 data:image/* ; le message indique l’index.InvalidRequestError
400INPUT_IMAGE_URL_NOT_HTTPSUne URL d’image d’entrée n’utilise pas HTTPS.Utilisez une URL https:// ou une data URL comme data:image/png;base64,….InvalidRequestError
400INPUT_IMAGE_TOO_LARGEUne image intégrée dépasse 10 Mio.Compressez-la à moins de 10 Mio. Les modèles qui indiquent input_image_max_bytes appliquent la même limite aux URL HTTPS : une image trop lourde fait échouer la tâche avec REFERENCE_INPUT_INVALID, entièrement remboursée.InvalidRequestError
400IMAGE_INPUT_NOT_SUPPORTEDLe modèle n’accepte pas d’image en entrée.Seuls les modèles d’image avec input_images_max>0 acceptent inputImages.InvalidRequestError
400TOO_MANY_INPUT_IMAGESTrop d’images d’entrée.Voir input_images_max dans le catalogue.InvalidRequestError
422REFERENCE_DURATION_OUT_OF_RANGELa durée mesurée de la vidéo de référence dépasse les limites du modèle.Vérifiez dans le catalogue les limites par vidéo, de durée totale et de nombre, puis prévisualisez de nouveau le prix ; aucun montant n’a été facturé.InvalidRequestError
422REFERENCE_DURATION_UNVERIFIEDLa durée de la vidéo de référence n’a pas pu être mesurée.Utilisez un MP4/MOV standard, de préférence faststart, hébergé sur un serveur prenant en charge les requêtes Range.InvalidRequestError
422REFERENCE_URL_NOT_PUBLICL’URL de la vidéo de référence n’est pas une adresse HTTPS publique.Utilisez une URL HTTPS publique de fichier sur le port 443, accessible sans connexion.InvalidRequestError
422CONTENT_TYPE_MISMATCHL’URL de la vidéo de référence ne renvoie pas le format vidéo requis.Assurez-vous que l’URL renvoie les octets d’un MP4/MOV, et non une page web ou une image.InvalidRequestError
422REFERENCE_VIDEO_TOO_LARGELa vidéo de référence dépasse la limite de taille.Les URL publiques sont limitées à 200 MiB et les téléversements console à 32 MiB. Compressez ou raccourcissez le fichier, puis prévisualisez de nouveau le prix.InvalidRequestError
429REFERENCE_PROBE_BUSYTrop de vidéos de référence sont mesurées simultanément.Réessayez après retry_after_seconds ; aucun montant n’a été facturé.RateLimitError
400INSUFFICIENT_BALANCELe solde est insuffisant pour cette tâche.Rechargez ou utilisez un code dans le portefeuille, puis réessayez.InvalidRequestError
400LEGACY_ASSET_REFERENCE_RETIREDLes références par ID de ressource sont supprimées.Envoyez referenceMode + referenceImages (HTTPS public) dans la même requête.InvalidRequestError
404NOT_FOUNDLa tâche n’existe pas ou appartient à un autre compte.Vérifiez que l’ID de tâche et la clé appartiennent au même compte.InvalidRequestError
409OUTPUT_NOT_READYLe résultat n’est pas encore prêt.Continuez d’interroger la tâche selon poll_after_ms jusqu’à un état final.InvalidRequestError
410OUTPUT_EXPIREDLa période de téléchargement (24 h après réussite) est terminée.Enregistrez les résultats rapidement ; après expiration, il faut relancer la génération. Utilisez output_expires_at pour afficher un compte à rebours.OutputExpiredError

Codes d’échec des tâches d’image

Lorsqu’une tâche d’image se termine avec status=failed, lisez error_code et comparez-le au tableau ci-dessous. Une tâche échouée est entièrement remboursée. Les SDK lèvent GenerationFailedError avec le même code.

CodeSignification
CONTENT_POLICY_REJECTEDLe contenu n’a pas passé la vérification. Modifiez-le avant de le renvoyer.
REFERENCE_INPUT_INVALIDVérifiez le format, la taille de la référence et les exigences du modèle.
REFERENCE_SOURCE_UNREACHABLEL’URL de référence est illisible. Vérifiez sa validité ou importez à nouveau le fichier.
REFERENCE_SERVICE_UNAVAILABLELe traitement des références est indisponible. Contactez le support avec l’ID de tâche ; il n’est pas nécessaire de remplacer l’image.
GENERATION_INPUT_INVALIDLes paramètres de génération ne respectent pas les exigences de ce modèle.
GENERATION_RATE_LIMITEDLe service de génération est temporairement limité. Réessayez plus tard.
GENERATION_REJECTEDLa requête de génération a été refusée. Contactez le support avec l’ID de tâche pour en connaître la raison.
GENERATION_SERVICE_UNAVAILABLELe service de génération est temporairement indisponible.
GENERATION_FAILEDLa tâche n’a pas pu aboutir. Contactez le support avec son ID.

Codes renvoyés uniquement dans la console

HTTPCodeSignificationAction conseillée
400REFERENCE_UPLOAD_NOT_FOUNDLa référence d’import est absente, expirée ou appartient à un autre compte.Importez à nouveau le fichier dans le Playground et relancez (les imports sont de courte durée).
429UPLOAD_QUOTA_EXCEEDEDTrop d’imports inutilisés.Lancez une tâche qui utilise vos imports, ou attendez qu’ils expirent.
429WEBHOOK_ENDPOINT_LIMITNombre maximal d’endpoints de webhook atteint.Supprimez ou désactivez un endpoint inutilisé.
400INVALID_WEBHOOK_URLL’URL de rappel n’est pas une adresse HTTPS accessible publiquement.Utilisez une adresse HTTPS publique ; les hôtes privés et de bouclage sont refusés.