Référence API

Référence de l'API publique CyberBara v1

Vue d'ensemble

L'API publique CyberBara est exposée sous /api/v1 et permet de :

  • Créer des tâches de génération d'image
  • Créer des tâches de génération vidéo
  • Importer des images de référence et obtenir des URL réutilisables
  • Consulter le statut des tâches et leurs sorties
  • Vérifier le solde de crédits
  • Vérifier la consommation de crédits
  • Estimer les crédits avant de créer une tâche
  • Lister les modèles publics

Les détails du fournisseur sont volontairement masqués côté client.

URL de base

Utilisez votre propre domaine déployé.

https://<your-domain>

Exemple :

https://cyberbara-preview.iamzerolu.workers.dev

Authentification

Passez votre clé API dans l'un de ces en-têtes :

Authorization: Bearer <API_KEY>

ou

x-api-key: <API_KEY>

Si elle est absente ou invalide, l'API renvoie 401.

Format de réponse

Succès :

{
  "data": {}
}

Erreur :

{
  "error": {
    "code": "error_code",
    "message": "human readable message",
    "details": {}
  }
}

Modèles

GET /api/v1/models

Paramètre de requête optionnel :

  • media_type=image|video

Exemple :

curl -X GET 'https://<your-domain>/api/v1/models?media_type=video' \
  -H 'Authorization: Bearer <API_KEY>'

Exemple de réponse :

{
  "data": {
    "models": [
      {
        "model": "sora-2",
        "media_type": "video",
        "supported_scenes": ["text-to-video", "image-to-video"]
      },
      {
        "model": "kling-2.6",
        "media_type": "video",
        "supported_scenes": ["text-to-video", "image-to-video"]
      }
    ],
    "total": 2
  }
}

Exemple d'erreur (invalid_media_type) :

{
  "error": {
    "code": "invalid_media_type",
    "message": "media_type must be \"image\" or \"video\"."
  }
}

Uploads

POST /api/v1/uploads/images

Importez une ou plusieurs images de référence, puis utilisez les URL renvoyées dans options.image_input.

Requête :

  • Content-Type: multipart/form-data
  • nom du champ : files (ou file pour un envoi unique)
  • nombre maximum de fichiers par requête : 10
  • taille maximale par fichier : 10MB
  • types MIME pris en charge : image/jpeg, image/jpg, image/png, image/webp, image/gif, image/svg+xml, image/avif, image/heic, image/heif

Exemple :

curl -X POST 'https://<your-domain>/api/v1/uploads/images' \
  -H 'Authorization: Bearer <API_KEY>' \
  -F 'files=@./reference.png'

Exemple de réponse :

{
  "data": {
    "files": [
      {
        "url": "https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/7f2f25f8d6c26f11b2a5bb6b3f7f4a28.png",
        "key": "api/v1/uploads/3e7e48e6/7f2f25f8d6c26f11b2a5bb6b3f7f4a28.png",
        "filename": "reference.png",
        "content_type": "image/png",
        "size": 245123,
        "deduped": false
      }
    ],
    "urls": [
      "https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/7f2f25f8d6c26f11b2a5bb6b3f7f4a28.png"
    ],
    "count": 1
  }
}

POST /api/v1/uploads/videos

Importez une vidéo de référence, puis utilisez les URL renvoyées dans options.video_input (ou dans options.video_url pour seedance-2-watermark-remover).

Requête :

  • Content-Type: multipart/form-data
  • nom du champ : files (ou file pour un envoi unique)
  • nombre maximum de fichiers par requête : 1
  • taille maximale du fichier : 50MB
  • types MIME pris en charge : video/mp4, video/quicktime

Exemple :

curl -X POST 'https://<your-domain>/api/v1/uploads/videos' \
  -H 'Authorization: Bearer <API_KEY>' \
  -F 'files=@./reference.mp4'

Exemple de réponse :

{
  "data": {
    "files": [
      {
        "url": "https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/2d9b18f0b5a0a9b4c65b7f6c3b2f7c32.mp4",
        "key": "api/v1/uploads/3e7e48e6/2d9b18f0b5a0a9b4c65b7f6c3b2f7c32.mp4",
        "filename": "reference.mp4",
        "content_type": "video/mp4",
        "size": 1245123,
        "deduped": false
      }
    ],
    "urls": [
      "https://cdn.example.com/uploads/api/v1/uploads/3e7e48e6/2d9b18f0b5a0a9b4c65b7f6c3b2f7c32.mp4"
    ],
    "count": 1
  }
}

Exemple d'erreur (invalid_file_type) :

{
  "error": {
    "code": "invalid_file_type",
    "message": "Unsupported image type for file \"sample.pdf\".",
    "details": {
      "index": 0,
      "filename": "sample.pdf"
    }
  }
}

Exemple d'utilisation d'une URL importée pour image-to-image :

{
  "model": "nano-banana-pro",
  "scene": "image-to-image",
  "prompt": "Keep composition, make it cinematic at night",
  "options": {
    "image_input": ["https://cdn.example.com/uploads/api/v1/uploads/...png"]
  }
}

Crédits

GET /api/v1/credits/balance

Renvoie le solde actuel de crédits.

curl -X GET 'https://<your-domain>/api/v1/credits/balance' \
  -H 'Authorization: Bearer <API_KEY>'

Exemple de réponse :

{
  "data": {
    "user_id": "3e7e48e6-f2fa-4f66-abf8-db7a40eaf517",
    "remaining_credits": 44,
    "updated_at": "2026-03-03T04:08:19.320Z"
  }
}

Exemple d'erreur (invalid_api_key) :

{
  "error": {
    "code": "invalid_api_key",
    "message": "Invalid API key."
  }
}

POST /api/v1/credits/quote

Estimez les crédits avant de créer une tâche.

Corps de la requête :

  • model requis
  • media_type facultatif si le modèle peut l'inférer
  • scene facultatif mais recommandé
  • options facultatif
curl -X POST 'https://<your-domain>/api/v1/credits/quote' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "nano-banana-pro",
    "media_type": "image",
    "scene": "text-to-image",
    "options": { "resolution": "1k" }
  }'

Exemple de réponse :

{
  "data": {
    "model": "nano-banana-pro",
    "media_type": "image",
    "scene": "text-to-image",
    "estimated_credits": 8,
    "remaining_credits": 44,
    "can_afford": true,
    "pricing_rule": "nano-banana-pro",
    "fallback_pricing": false
  }
}

Exemple d'erreur (unsupported_model) :

{
  "error": {
    "code": "unsupported_model",
    "message": "Model is not supported."
  }
}

GET /api/v1/credits/usage

Paramètres de requête :

  • page par défaut 1
  • limit par défaut 20, maximum 100
  • from facultatif, au format ISO datetime ou YYYY-MM-DD
  • to facultatif, au format ISO datetime ou YYYY-MM-DD
  • Les valeurs uniquement date sont interprétées en UTC (from -> 00:00:00.000Z, to -> 23:59:59.999Z)
curl -X GET 'https://<your-domain>/api/v1/credits/usage?page=1&limit=20&from=2026-03-01&to=2026-03-03' \
  -H 'Authorization: Bearer <API_KEY>'

Exemple de réponse :

{
  "data": {
    "summary": {
      "page": 1,
      "limit": 20,
      "total": 2,
      "total_pages": 1,
      "total_credits_consumed": 28,
      "from": "2026-03-03T00:00:00.000Z",
      "to": "2026-03-03T23:59:59.999Z"
    },
    "items": [
      {
        "id": "0a961844-e042-4a17-bf23-2a5f2680d375",
        "transaction_no": "79739092304928500",
        "credits_consumed": 20,
        "scene": "text-to-video",
        "description": "generate video",
        "media_type": "video",
        "task_id": "2fa99a50-fb96-407b-a562-82de8265f48e",
        "created_at": "2026-03-03T04:31:55.116Z"
      }
    ]
  }
}

Exemple d'erreur (invalid_date) :

{
  "error": {
    "code": "invalid_date",
    "message": "Invalid date format. Use ISO datetime or YYYY-MM-DD."
  }
}

Exemple d'erreur (invalid_date_range) :

{
  "error": {
    "code": "invalid_date_range",
    "message": "The \"from\" date must be earlier than the \"to\" date."
  }
}

Génération de tâches

POST /api/v1/images/generations

Corps de la requête :

  • model requis
  • prompt requis pour la plupart des modèles
  • scene facultatif (text-to-image / image-to-image)
  • options facultatif
curl -X POST 'https://<your-domain>/api/v1/images/generations' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "nano-banana-pro",
    "prompt": "A cinematic portrait under neon rain",
    "scene": "text-to-image",
    "options": { "resolution": "1k" }
  }'

La réponse inclut votre identifiant de tâche interne :

{
  "data": {
    "task_id": "uuid",
    "status": "pending",
    "media_type": "image",
    "model": "nano-banana-pro",
    "scene": "text-to-image",
    "credits": {
      "cost": 8,
      "remaining": 36
    },
    "created_at": "2026-03-03T04:29:12.612Z"
  }
}

Exemple d'erreur (insufficient_credits) :

{
  "error": {
    "code": "insufficient_credits",
    "message": "Insufficient credits."
  }
}

POST /api/v1/videos/generations

Corps de la requête :

  • model requis
  • prompt requis pour la plupart des modèles vidéo (dont seedance-*, kling-2.6, veo-*)
  • prompt est facultatif pour sora-2-pro au niveau de la validation API, mais reste recommandé
  • scene facultatif (text-to-video / image-to-video / video-to-video)
  • options facultatif
curl -X POST 'https://<your-domain>/api/v1/videos/generations' \
  -H 'Authorization: Bearer <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "sora-2",
    "prompt": "A calm drone shot over snowy mountains at sunrise",
    "scene": "text-to-video",
    "options": { "duration": "10", "resolution": "standard" }
  }'

Exemple de réponse :

{
  "data": {
    "task_id": "2fa99a50-fb96-407b-a562-82de8265f48e",
    "status": "pending",
    "media_type": "video",
    "model": "sora-2",
    "scene": "text-to-video",
    "credits": {
      "cost": 20,
      "remaining": 16
    },
    "created_at": "2026-03-03T04:31:55.116Z"
  }
}

Exemple d'erreur (insufficient_credits) :

{
  "error": {
    "code": "insufficient_credits",
    "message": "Insufficient credits."
  }
}

Options spécifiques aux modèles (matrice complète)

Cette section liste toutes les options de requête spécifiques aux modèles actuellement prises en charge par l'API publique.

Champs généraux de requête :

  • model requis
  • prompt dépend du modèle (voir chaque modèle ci-dessous)
  • scene facultatif, mais fortement recommandé
  • options objet facultatif

Inférence de scène (quand scene est omis) :

  • API image :
    • options.image_input contient au moins une URL -> image-to-image
    • sinon -> text-to-image
  • API vidéo :
    • options.video_input contient au moins une URL -> video-to-video
    • sinon, si options.image_input contient au moins une URL -> image-to-video
    • sinon -> text-to-video

Champs d'option partagés :

ChampTypeSignification
options.image_inputstring[]URL d'images d'entrée/référence
options.video_inputstring[]URL de vidéos d'entrée/référence

Remarques :

  • L'API publique n'accepte que les champs options.*. N'envoyez pas de clés internes au fournisseur comme image_url, image_urls, input_images ou imageUrls (sauf options.video_url pour seedance-2-watermark-remover).
  • Pour tous les modèles ci-dessous, si prompt et options sont tous deux vides, l'API renvoie invalid_request.
  • Certains modèles valident strictement les options ; d'autres les transmettent à l'endpoint du modèle avec peu ou pas de validation.
  • Les options inconnues sont ignorées pour les modèles à validation stricte ; elles sont transmises pour les modèles en pass-through.

Modèles d'image

nano-banana-2

Scènes prises en charge : text-to-image, image-to-image. Niveau de validation : clés strictes + normalisation légère.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour les deux scènes
options.image_inputstring[]Requis pour image-to-imagetableau d'URLSi fourni et non vide, la scène peut être inférée comme image-to-image
options.aspect_ratiostringNontout string non videTransmis tel quel
options.resolutionstringNonnormalisé : 1K / 2K / 4KLes entrées comme 1k, 2k, 4k sont normalisées ; les autres sont transmises
options.output_formatstringNonnormalisé : jpg / pngjpeg devient jpg ; les autres valeurs sont transmises
options.google_searchbooleanNonnon défini par défautPris en charge uniquement par nano-banana-2

nano-banana-pro

Scènes prises en charge : text-to-image, image-to-image. Niveau de validation : clés strictes + normalisation légère.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour les deux scènes
options.image_inputstring[]Requis pour image-to-imagetableau d'URLSi fourni et non vide, la scène peut être inférée comme image-to-image
options.aspect_ratiostringNontout string non videTransmis tel quel
options.resolutionstringNonnormalisé : 1K / 2K / 4KLes entrées comme 1k, 2k, 4k sont normalisées ; les autres sont transmises
options.output_formatstringNonnormalisé : jpg / pngjpeg devient jpg ; les autres valeurs sont transmises

Modèles vidéo

À l'exception de kling-video-o1, seedance-2-preview, seedance-2-fast-preview et seedance-2-watermark-remover, les modèles ci-dessous ne prennent pas en charge video-to-video. options.video_input ne doit donc pas être envoyé.

sora-2

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour les deux scènes
options.image_inputstring[]Requis pour image-to-videotableau d'URLUtilisé comme image de référence
options.aspect_ratiostringNonlandscape / portrait (défaut landscape)Validation stricte
options.duration / options.n_framesstring ou numberNon10 / 15 (défaut 10)Validation stricte
options.remove_watermarkbooleanNondéfaut trueValidation stricte
options.upload_methodstringNons3 / oss (défaut s3)Validation stricte

sora-2-pro

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict.

ChampTypeRequisValeurs / DéfautNotes
promptstringNon pour la validation APIfacultatifRecommandé
options.image_inputstring[]Requis pour image-to-videotableau d'URLUtilisé comme image de référence
options.aspect_ratiostringNonlandscape / portrait (défaut landscape)Validation stricte
options.duration / options.n_framesstring ou numberNon10 / 15 (défaut 10)Validation stricte
options.resolution / options.sizestringNonstandard / high (défaut standard)Validation stricte

seedance-2-preview

Scènes prises en charge : text-to-video, image-to-video, video-to-video. Niveau de validation : strict.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour toutes les scènes
options.image_inputstring[]Requis pour image-to-videotableau d'URL (max 9)Utilisé comme références d'image dans le prompt (@image1, @image2, ...)
options.video_inputstring[]Requis pour video-to-videoURL uniqueMode d'édition vidéo Seedance 2.0. Exactement une URL.
options.durationstring ou numberNon (ignoré pour video-to-video)5 / 10 / 15 (défaut 5)En mode édition vidéo, la durée de sortie est égale à celle de la vidéo d'entrée
options.aspect_ratiostringNon16:9 / 9:16 / 4:3 / 3:4 (défaut 16:9)Le format est appliqué au mieux ; le ratio des images peut le surcharger
options.parent_task_idstringNonid de tâcheÉtend une tâche Seedance 2.0 précédente ; les champs absents peuvent être hérités du parent

seedance-2-fast-preview

Scènes prises en charge : text-to-video, image-to-video, video-to-video. Niveau de validation : strict.

Les champs sont identiques à ceux de seedance-2-preview.

seedance-2-watermark-remover

Scènes prises en charge : video-to-video. Niveau de validation : strict.

ChampTypeRequisValeurs / DéfautNotes
promptstringNonfacultatifNon utilisé par le watermark remover
options.video_inputstring[]OuiURL uniqueURL de la vidéo à traiter
options.video_urlstringOuiURL uniqueAlternative à options.video_input
options.durationstring ou numberNondétecté automatiquementIndice facultatif ; si omis, la durée est détectée automatiquement par le processeur

seedance-1-pro

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict + pass-through partiel pour certaines chaînes.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour les deux scènes
options.image_inputstring[]Requis pour image-to-videopremière URL utiliséeimage-to-video nécessite au moins une image
options.resolutionstringNondéfaut 720pRecommandé : 480p, 720p, 1080p
options.durationstring ou numberNondéfaut 5Recommandé : 5, 10
options.aspect_ratiostringNondéfaut 16:9Utilisé pour text-to-video ; ignoré pour image-to-video
options.camera_fixedbooleanNonnon défini par défautPris en charge
options.seed / options.seedsintegerNon-1 à 2147483647Vérification stricte de la plage
options.enable_safety_checkerbooleanNonnon défini par défautPris en charge

seedance-1-lite

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict + pass-through partiel pour certaines chaînes.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour les deux scènes
options.image_inputstring[]Requis pour image-to-videopremière URL utiliséeSi une seconde image est fournie, elle est utilisée automatiquement comme end_image_url
options.resolutionstringNondéfaut 720pRecommandé : 480p, 720p, 1080p
options.durationstring ou numberNondéfaut 5Recommandé : 5, 10
options.aspect_ratiostringNondéfaut 16:9Utilisé pour text-to-video ; ignoré pour image-to-video
options.camera_fixedbooleanNonnon défini par défautPris en charge
options.seed / options.seedsintegerNon-1 à 2147483647Vérification stricte de la plage
options.enable_safety_checkerbooleanNonnon défini par défautPris en charge uniquement pour text-to-video
options.end_image_urlstringNonURLPris en charge pour image-to-video

seedance-1-pro-fast

Scènes prises en charge : image-to-video. Niveau de validation : strict + pass-through partiel pour certaines chaînes.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis
options.image_inputstring[]Ouipremière URL utiliséeRequis
options.resolutionstringNondéfaut 720pRecommandé : 720p, 1080p
options.durationstring ou numberNondéfaut 5Recommandé : 5, 10

kling-2.6

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis pour les deux scènes
options.image_inputstring[]Requis pour image-to-videotableau d'URLimage-to-video nécessite au moins une image
options.durationstring ou numberNon5 / 10 (défaut 5)Validation stricte
options.soundbooleanNondéfaut falseValidation stricte
options.aspect_ratiostringNon1:1 / 16:9 / 9:16 (défaut 16:9)Utilisé pour text-to-video ; ignoré pour image-to-video

veo-3.1-fast

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis
options.image_inputstring[]Conditionneltableau d'URLDépend des règles generationType ci-dessous
options.generationTypestringNonTEXT_2_VIDEO / FIRST_AND_LAST_FRAMES_2_VIDEO / REFERENCE_2_VIDEOSi omis, inféré automatiquement à partir du nombre d'images
options.aspect_ratiostringNon16:9 / 9:16 / Auto (défaut 16:9)landscape -> 16:9, portrait -> 9:16 ; REFERENCE_2_VIDEO n'autorise que 16:9
options.seed / options.seedsintegerNon10000 à 99999Vérification stricte de la plage
options.enableTranslationbooleanNonnon défini par défautFacultatif
options.watermarkstringNontout string non videFacultatif

Règles :

  • TEXT_2_VIDEO : image_input doit être vide
  • FIRST_AND_LAST_FRAMES_2_VIDEO : image_input doit contenir 1 à 2 images
  • REFERENCE_2_VIDEO : image_input doit contenir 1 à 3 images

veo-3.1-quality

Scènes prises en charge : text-to-video, image-to-video. Niveau de validation : strict.

Les champs sont identiques à veo-3.1-fast, sauf :

  • options.generationType=REFERENCE_2_VIDEO n'est pas pris en charge

kling-video-o1

Scènes prises en charge : video-to-video. Niveau de validation : pass-through.

ChampTypeRequisValeurs / DéfautNotes
promptstringOuinon videRequis
options.video_inputstring[]Requis en pratiquepremière URL utiliséeSi scene est omise, un video_input non vide aide à inférer video-to-video
options.image_inputstring[]Nontableau d'URLImages de référence facultatives
options.*anyNondéfini par le fournisseurToutes les clés supplémentaires sont transmises

kling-video-o1 est un modèle pass-through. En plus de options.video_input, des champs options.* définis par le fournisseur peuvent être nécessaires.

Checklist rapide scène -> options

Génération d'image :

  • text-to-image : généralement seulement prompt
  • image-to-image : inclure options.image_input

Génération vidéo :

  • text-to-video : inclure toujours prompt
  • image-to-video : inclure options.image_input ; pour la plupart des modèles, inclure aussi prompt
  • video-to-video : inclure options.video_input ; inclure prompt si le modèle sélectionné l'exige

Si vous voulez un routage déterministe, passez toujours scene explicitement.

Requête de tâche

GET /api/v1/tasks/{taskId}

Interrogez cet endpoint jusqu'à ce que la tâche atteigne un statut final.

curl -X GET 'https://<your-domain>/api/v1/tasks/<TASK_ID>' \
  -H 'Authorization: Bearer <API_KEY>'

Exemple de réponse (pending) :

{
  "data": {
    "task": {
      "id": "2fa99a50-fb96-407b-a562-82de8265f48e",
      "status": "pending",
      "media_type": "video",
      "model": "sora-2",
      "scene": "text-to-video",
      "prompt": "A cinematic wide shot of waves hitting black volcanic beach at sunrise",
      "credits": { "cost": 20 },
      "output": { "images": [], "videos": [] },
      "created_at": "2026-03-03T04:31:55.116Z",
      "updated_at": "2026-03-03T04:32:08.511Z"
    }
  }
}

Exemple d'erreur (task_not_found) :

{
  "error": {
    "code": "task_not_found",
    "message": "Task not found."
  }
}

Valeurs possibles pour le statut :

  • pending
  • processing
  • success
  • failed
  • canceled

Les réponses success incluent les URL des médias dans :

  • data.task.output.images
  • data.task.output.videos

Exemples de sortie de tâche

Succès d'une tâche image :

{
  "data": {
    "task": {
      "id": "20b061f3-d051-4795-b355-856325d08f7c",
      "status": "success",
      "media_type": "image",
      "model": "nano-banana-pro",
      "scene": "text-to-image",
      "prompt": "A cinematic portrait under neon rain",
      "credits": { "cost": 8 },
      "output": {
        "images": [
          "https://static.nanobananaproprompts.com/cyberbara_uploads/kie/image/21075dc0-7968-46fd-93fe-e366f558325b.png"
        ],
        "videos": []
      },
      "created_at": "2026-03-03T04:29:12.612Z",
      "updated_at": "2026-03-03T04:29:31.475Z"
    }
  }
}

Succès d'une tâche vidéo :

{
  "data": {
    "task": {
      "id": "2fa99a50-fb96-407b-a562-82de8265f48e",
      "status": "success",
      "media_type": "video",
      "model": "sora-2",
      "scene": "text-to-video",
      "prompt": "A cinematic wide shot of waves hitting black volcanic beach at sunrise",
      "credits": { "cost": 20 },
      "output": {
        "images": [],
        "videos": [
          "https://static.nanobananaproprompts.com/cyberbara_uploads/kie/video/b55bf86d-e3a3-4b81-ae28-a1cff40a71db.mp4"
        ]
      },
      "created_at": "2026-03-03T04:31:55.116Z",
      "updated_at": "2026-03-03T04:34:22.836Z"
    }
  }
}

Échec d'une tâche :

{
  "data": {
    "task": {
      "id": "341ab8cd-1296-4a5d-968a-cccf60c9caab",
      "status": "failed",
      "media_type": "video",
      "model": "sora-2",
      "scene": "text-to-video",
      "prompt": "A calm drone shot over snowy mountains at sunrise",
      "credits": { "cost": 20 },
      "output": {
        "images": [],
        "videos": []
      },
      "created_at": "2026-03-03T04:30:18.041Z",
      "updated_at": "2026-03-03T04:31:01.420Z"
    }
  }
}

Flux recommandé

  1. Appelez GET /api/v1/models
  2. Si nécessaire, appelez POST /api/v1/uploads/images pour obtenir des URL de référence
  3. Appelez POST /api/v1/credits/quote
  4. Créez une tâche via l'endpoint de génération d'image ou de vidéo
  5. Interrogez GET /api/v1/tasks/{taskId} jusqu'au statut final
  6. Vérifiez l'impact sur la facturation avec GET /api/v1/credits/usage

Codes d'erreur fréquents (liste non exhaustive)

  • api_key_required
  • invalid_api_key
  • too_many_requests
  • invalid_json
  • invalid_multipart
  • invalid_date
  • invalid_date_range
  • files_required
  • too_many_files
  • invalid_file_type
  • invalid_file_size
  • file_too_large
  • invalid_model
  • unsupported_model
  • invalid_model_for_media_type
  • invalid_scene
  • scene_not_supported
  • invalid_media_type
  • invalid_request
  • service_unavailable
  • insufficient_credits
  • upload_failed
  • generation_failed
  • invalid_task_id
  • task_not_found
  • task_not_ready
  • query_failed
  • internal_error