Génération vidéo

Les modèles vidéo répondent sous forme de tâches et non par une réponse unique. POST /v1/videos renvoie un identifiant de tâche avec "status": "queued", et GET /v1/videos/{task_id} indique la progression jusqu’à ce que la tâche atteigne completed ou failed. À la fin, le fichier produit est l’URL signée située dans metadata.url ; elle contient un paramètre Expires, téléchargez donc le fichier au lieu de conserver le lien. Une tâche en échec porte le code et le message du fournisseur dans error.code et error.message, ce qui suffit généralement à repérer le champ manquant. POST /v1/video/generations atteint le même gestionnaire, pour les clients déjà écrits pour ce chemin.

POST /v1/videos
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "wan2.7-i2v",
    "prompt": "the cat turns and walks toward the camera",
    "input_reference": "https://example.com/first-frame.jpg",
    "size": "1280*720",
    "duration": 5
  }'

# {"id":"task_9f2c...","task_id":"task_9f2c...","object":"video",
#  "model":"wan2.7-i2v","status":"queued","progress":0}
GET /v1/videos/{task_id}
curl https://api.chinaapi.ai/v1/videos/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"id":"task_9f2c...","object":"video","model":"wan2.7-i2v",
#  "status":"completed","progress":100,
#  "metadata":{"url":"https://.../output.mp4?Expires=..."}}
Texte vers vidéo

wan2.7-t2v

Seuls model et prompt sont obligatoires. Sans size ni duration, la passerelle soumet 1280*720 pendant cinq secondes.

Image vers vidéo

wan2.7-i2v

Animez une image fixe. input_reference attend l’URL d’une image accessible publiquement, qui devient la première image ; envoyez size et duration avec elle.

Référence vers vidéo

wan2.7-r2v

Construit une vidéo à partir de matériaux de référence. input_reference accepte une image de référence ; pour en envoyer plusieurs, utilisez images à la place, et video_url ajoute une vidéo de référence — les références se comptent ensemble, cinq au maximum. N’envoyez pas input_reference et images ensemble, car la passerelle ne garde que input_reference.

Montage vidéo

wan2.7-videoedit

Modifiez un clip existant à partir d’un prompt. video_url attend la vidéo source, qui doit faire de 2 à 10 secondes en MP4 ou MOV, et size définit la sortie.

Vidéo de 30 secondes

doubao-seedance-2-5-260628

Les images de référence vont dans images, et input_reference en accepte une seule ; si vous envoyez les deux, les deux sont conservées. La durée va dans seconds ou duration, et les paramètres du fournisseur vont dans metadata, où resolution vaut soit 480p soit 720p.

Seedance 2.0

doubao-seedance-2-0-260128

Même forme de requête que doubao-seedance-2-5-260628, y compris les règles de role pour metadata.content. doubao-seedance-2-0-fast-260128 et doubao-seedance-2-0-mini-260615 échangent de la qualité contre de la vitesse et du coût, et la lignée 2.0 exige au moins une référence image ou vidéo, là où la 2.5 accepte aussi l’audio seul.

Kling 3.0

kling-v3

La première image se met dans image ; cette famille ne lit jamais input_reference. mode vaut std par défaut et duration 5 secondes. metadata porte le reste : image_tail pour une image de fin, sound valant on ou off (off par défaut), plus negative_prompt, cfg_scale et camera_control.

Palier économique

kling-3.0-turbo

Envoyez prompt pour du texte vers vidéo, ou ajoutez image et la passerelle construit le tableau contents attendu en amont. Le dimensionnement vit sous metadata.settings : resolution vaut 720p ou 1080p, duration va de 3 à 15 secondes, et aspect_ratio vaut 16:9, 9:16 ou 1:1. L’audio est toujours inclus et n’a pas d’interrupteur.

Référence multi-images

kling-v3-omni

Génération guidée par plusieurs images de référence à la fois. Chaque paramètre vit dans metadata, et il n’y a pas de champ resolutionmode est le palier de qualité. Voir l’exemple complet ci-dessous.

Audio natif

MiniMax-H3

Prend les champs de la passerelle et assemble la charge utile amont pour vous : image ou input_reference devient la première image, images devient les images de référence, et video_url devient une vidéo de référence. size choisit 768P ou 2K et duration est un entier de 4 à 15. Les requêtes purement textuelles exigent un metadata.ratio explicite autre que adaptive.

Hailuo

MiniMax-Hailuo-2.3

Avec MiniMax-Hailuo-2.3-Fast et MiniMax-Hailuo-02. Ces modèles ne lisent que prompt, duration et size au niveau racine ; toute image passe par metadata, sous first_frame_image, last_frame_image ou subject_reference.

Palier 480P

happyhorse-1.1-t2v

Avec happyhorse-1.1-i2v et happyhorse-1.1-r2v. Les champs sont ceux de la famille wan2.7prompt, input_reference, size, duration — et le 480P est tarifé ici, donc 832*480 est accepté là où wan2.7 le refuse. Plusieurs références se mettent dans metadata.input.media, car l’assemblage automatique déclenché par le champ images est propre à wan2.7-r2v.

Conseil Écrivez size comme la largeur et la hauteur reliées par une astérisque, par exemple 1280*720. La lettre x n’est pas acceptée : 832x480 renvoie invalid size: 832x480, example: 1920*1080. duration est un nombre entier de secondes. Pour wan2.7-i2v, wan2.7-r2v et wan2.7-videoedit, la passerelle replie size en un palier de résolution et l’amont n’en a que deux : envoyez 1280*720 pour 720P ou 1920*1080 pour 1080P. Une taille 480P comme 832*480 n’a pas de prix sur ces trois modèles et sera soit refusée d’emblée, soit acceptée puis mise en échec en amont avec InvalidParameter ; une tâche en échec est remboursée, mais l’aller-retour est perdu dans les deux cas. wan2.7-t2v prend la valeur telle quelle.
Conseil La famille Kling lit le rapport d’aspect depuis size via une table fixe qui écrit les tailles avec la lettre x — 1280x720, 1920x1080, 720x1280, 1080x1920, 1024x1024, 512x512 — et tout ce qu’elle ne reconnaît pas devient 1:1 sans erreur. Envoyer la forme à astérisque 1280*720 à kling-v3 renvoie donc une vidéo carrée plutôt qu’une plainte : réglez metadata.aspect_ratio directement quand le cadrage compte.
Conseil MiniMax-Hailuo-2.3, MiniMax-Hailuo-2.3-Fast et MiniMax-Hailuo-02 jettent les champs racine image, input_reference, images et video_url sans le dire : la requête réussit, mais elle s’exécute en texte vers vidéo et est facturée comme telle. Mettez plutôt l’image dans metadata.first_frame_image, ajoutez metadata.last_frame_image pour une image de fin, et utilisez metadata.subject_reference pour les références de sujet. MiniMax-H3 est l’exception de cette famille et lit bien les champs racine.
kling-v3-omni · multi-image reference
curl https://api.chinaapi.ai/v1/video/generations \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kling-v3-omni",
    "prompt": "the character from the references walks through a neon-lit street",
    "metadata": {
      "image_list": [
        {"image_url": "https://example.com/character.jpg"},
        {"image_url": "https://example.com/outfit.jpg"},
        {"image_url": "https://example.com/scene.jpg"}
      ],
      "mode": "std",
      "duration": "5",
      "aspect_ratio": "16:9",
      "sound": "off"
    }
  }'
GET /v1/video/generations/{task_id}
curl https://api.chinaapi.ai/v1/video/generations/task_9f2c... \
  -H "Authorization: Bearer $CHINAAPI_KEY"

# {"code":"success",
#  "data":{"task_id":"task_9f2c...","status":"SUCCESS",
#          "progress":"100%","fail_reason":"",
#          "result_url":"https://.../output.mp4"}}
Conseil Une image de référence ne porte pas de type ; le champ n’existe que pour marquer first_frame ou end_frame, et aspect_ratio devient obligatoire dès qu’aucune première image n’est présente. mode est le palier de qualité — std, pro ou 4k — et la valeur par défaut en amont est pro, facturée 1,33x le prix affiché, tandis que 4k est facturé 5x ; envoyez mode explicitement pour que le montant soit celui que vous attendez. duration est une chaîne de "3" à "15" et sound vaut off par défaut. Une vidéo de référence se met dans video_list et doit poser "refer_type": "feature" : le mode d’édition base est facturé selon la durée de la vidéo fournie, ne peut pas être tarifé avant l’envoi, et il est refusé. Les images de référence ont aussi une taille minimale en amont : un fichier de la taille d’une icône passe la soumission pour ensuite faire échouer la tâche avec Image pixel is invalid ; la tâche en échec est remboursée, mais l’aller-retour est perdu.
Conseil Les deux chemins rapportent le résultat dans des formes différentes. GET /v1/videos/{task_id} répond au format vidéo OpenAI, où le fichier est metadata.url et la progression un nombre. GET /v1/video/generations/{task_id} répond {"code": "success", "data": {…}}, où le fichier est data.result_url, data.status est un mot en majuscules comme SUCCESS ou FAILURE, data.progress une chaîne comme "100%", et un échec s’explique dans data.fail_reason. Interrogez le chemin auquel vous avez soumis.
doubao-seedance-2-5-260628 · first frame
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "the subject slowly turns toward the camera",
    "images": ["https://example.com/first-frame.jpg"],
    "seconds": "5",
    "metadata": {"resolution": "480p"}
  }'
doubao-seedance-2-5-260628 · reference mode
curl https://api.chinaapi.ai/v1/videos \
  -H "Authorization: Bearer $CHINAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedance-2-5-260628",
    "prompt": "keep the subject from the reference image",
    "seconds": "5",
    "metadata": {
      "resolution": "480p",
      "ratio": "16:9",
      "content": [
        {
          "type": "image_url",
          "image_url": {"url": "https://example.com/reference.jpg"},
          "role": "reference_image"
        }
      ]
    }
  }'
Conseil Une image sans role est lue comme première image et non comme référence : la sortie suit le rapport d’aspect de cette image, envoyer ratio avec elle est refusé par InvalidParameter.TaskTypeConstraint, et un seconds de 2 y est également refusé alors que 5 fonctionne. generate_audio vaut true par défaut en amont, donc le fichier revient avec une piste audio sauf si vous le passez à false dans metadata. Marquez chaque élément de metadata.content avec un role pour atteindre le mode référence complet — jusqu’à 30 images, 10 vidéos et 10 extraits audio, entrée uniquement audio, et 30 secondes d’un seul tenant — où ratio est accepté.