> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# API de génération vidéo

> Choisissez les routes vidéo CometAPI pour les workflows Seedance, HappyHorse, Sora 2, Veo 3, Wan, xAI, Vidu, Omni, Kling et Runway.

Utilisez la documentation des modèles vidéo CometAPI en choisissant le workflow fournisseur qui correspond à votre type de tâche. La plupart des endpoints vidéo créent des tâches asynchrones, alors enregistrez l’ID de tâche et utilisez le polling pour récupérer les résultats. Ajoutez des callbacks uniquement lorsque la page spécifique au modèle documente la prise en charge des callbacks.

## Choisir une API vidéo

<CardGroup cols={2}>
  <Card title="Créer une vidéo Seedance" icon="sparkles" href="/api/video/seedance/create">
    Créez des tâches vidéo Seedance.
  </Card>

  <Card title="Créer une vidéo HappyHorse" icon="sparkles" href="/api/video/happyhorse/create">
    Créez des tâches text-to-video HappyHorse.
  </Card>

  <Card title="Créer une vidéo Sora 2" icon="film" href="/api/video/sora-2/create">
    Créez des tâches vidéo Sora 2.
  </Card>

  <Card title="Récupérer une vidéo Sora 2" icon="refresh" href="/api/video/sora-2/retrieve">
    Interrogez des tâches vidéo Sora.
  </Card>

  <Card title="Créer une vidéo Veo 3" icon="film" href="/api/video/veo3/create">
    Créez des tâches vidéo Veo.
  </Card>

  <Card title="Créer une vidéo Wan" icon="sparkles" href="/api/video/wan/create">
    Créez des tâches text-to-video Wan.
  </Card>

  <Card title="Créer une vidéo xAI" icon="film" href="/api/video/xai/video-generation">
    Générez des tâches vidéo xAI.
  </Card>

  <Card title="Créer une vidéo Vidu" icon="sparkles" href="/api/video/vidu/create">
    Créez des tâches text-to-video Vidu.
  </Card>

  <Card title="Créer une vidéo Omni (bêta)" icon="sparkles" href="/api/video/omni/create">
    Créez des tâches vidéo Omni en bêta.
  </Card>

  <Card title="Créer une tâche Kling text-to-video" icon="film" href="/api/video/kling/text-to-video">
    Générez des vidéos Kling à partir de prompts textuels.
  </Card>

  <Card title="Créer une tâche Runway image-to-video" icon="film" href="/api/video/runway/official-format/runway-images-raw-video">
    Générez des vidéos Runway à partir d’images.
  </Card>
</CardGroup>

## Créer et interroger une tâche vidéo

Utilisez un model ID compatible vidéo depuis la [page Models](/fr/overview/models) ou le [répertoire des modèles](https://www.cometapi.com/models/). Les exemples ci-dessous créent une tâche vidéo avec `POST /v1/videos`, puis interrogent le task ID renvoyé jusqu’à ce que la tâche atteigne un état terminal.

<Note>
  Ces exemples utilisent l’espace réservé `your-video-model-id`. Remplacez-le par un model ID vidéo disponible depuis la [page Models](/fr/overview/models) ou le [répertoire des modèles](https://www.cometapi.com/models/) avant d’exécuter la requête.
</Note>

<Tip>
  Ouvrez [Créer une vidéo Seedance](/api/video/seedance/create) et [Récupérer une vidéo Seedance](/api/video/seedance/query) pour utiliser les bacs à sable API et les schémas des endpoints.
</Tip>

<CodeGroup>
  ```python Python theme={null}
  import os
  import time
  import requests

  headers = {"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]}

  create_response = requests.post(
      "https://api.cometapi.com/v1/videos",
      headers=headers,
      data={
          "model": "your-video-model-id",
          "prompt": "A calm camera move across a desk with a paper airplane",
      },
      timeout=30,
  )
  create_response.raise_for_status()
  task = create_response.json()
  task_id = task["id"]

  terminal_statuses = {"completed", "failed", "error"}

  while True:
      poll_response = requests.get(
          f"https://api.cometapi.com/v1/videos/{task_id}",
          headers=headers,
          timeout=30,
      )
      poll_response.raise_for_status()
      result = poll_response.json()
      print(result["status"], result.get("progress"))

      if result["status"] in terminal_statuses:
          print(result.get("video_url"))
          break

      time.sleep(10)
  ```

  ```javascript Node.js theme={null}
  const form = new FormData();
  form.append("model", "your-video-model-id");
  form.append("prompt", "A calm camera move across a desk with a paper airplane");

  const createResponse = await fetch("https://api.cometapi.com/v1/videos", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
    },
    body: form,
  });

  if (!createResponse.ok) {
    throw new Error(await createResponse.text());
  }

  const task = await createResponse.json();
  const terminalStatuses = new Set(["completed", "failed", "error"]);

  while (true) {
    const pollResponse = await fetch(
      `https://api.cometapi.com/v1/videos/${task.id}`,
      {
        headers: {
          Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
        },
      },
    );

    if (!pollResponse.ok) {
      throw new Error(await pollResponse.text());
    }

    const result = await pollResponse.json();
    console.log(result.status, result.progress);

    if (terminalStatuses.has(result.status)) {
      console.log(result.video_url);
      break;
    }

    await new Promise((resolve) => setTimeout(resolve, 10_000));
  }
  ```

  ```bash cURL theme={null}
  curl https://api.cometapi.com/v1/videos \
    -H "Authorization: Bearer $COMETAPI_KEY" \
    -F "model=your-video-model-id" \
    -F "prompt=A calm camera move across a desk with a paper airplane"

  curl https://api.cometapi.com/v1/videos/task_example \
    -H "Authorization: Bearer $COMETAPI_KEY"
  ```
</CodeGroup>

## Exemples de réponse

Une réponse de création réussie peut ressembler à ceci. Stockez le task ID avant d’effectuer l’interrogation :

```json theme={null}
{
  "id": "task_example",
  "task_id": "task_example",
  "object": "video",
  "model": "your-video-model-id",
  "status": "queued",
  "progress": 0,
  "created_at": 1779872000
}
```

Une réponse d’interrogation réussie peut ressembler à ceci. Les réponses terminées peuvent inclure `video_url` ; certains formats de fournisseur utilisent des champs de résultat spécifiques au modèle ou la route de contenu vidéo lorsque cette route est documentée :

```json theme={null}
{
  "id": "task_example",
  "object": "video",
  "model": "your-video-model-id",
  "status": "completed",
  "progress": 100,
  "completed_at": 1779872300,
  "video_url": "https://example.com/generated-video.mp4"
}
```

## Exemples d’enregistrements de modèle

<Info>
  Cet exemple de réponse du catalogue de modèles montre l’enveloppe `/api/models` et la forme d’un enregistrement de modèle vidéo. Il ne s’agit pas d’une liste complète de modèles.
</Info>

```bash cURL theme={null}
curl https://api.cometapi.com/api/models
```

```json theme={null}
{
  "success": true,
  "page": 1,
  "page_size": 20,
  "total": 302,
  "data": [
    {
      "created": 1767529753,
      "id": "your-video-model-id",
      "code": "your-video-model-id",
      "provider": "ExampleProvider",
      "provider_code": "example",
      "name": "Example video model",
      "model_type": "video",
      "features": [
        "text-to-video"
      ],
      "endpoints": "{\n  \"seedance\": {\n    \"path\": \"/v1/videos\",\n    \"method\": \"POST\"\n  }\n}",
      "pricing": {
        "currency": "USD / M Tokens",
        "input": null,
        "output": null,
        "per_request": null,
        "per_second": 0.024
      }
    }
  ]
}
```

## Erreurs courantes

<AccordionGroup>
  <Accordion title="ID de tâche manquant">
    Stockez l’ID de la réponse de création avant de retourner depuis votre gestionnaire de tâche.
  </Accordion>

  <Accordion title="Interrogation trop rapide">
    Ajoutez un délai et un backoff entre les vérifications de statut.
  </Accordion>

  <Accordion title="Durée ou taille non prises en charge">
    Utilisez les champs de durée et de résolution documentés pour l’endpoint vidéo sélectionné.
  </Accordion>

  <Accordion title="video_url manquant">
    Traitez `video_url` comme optionnel et repliez-vous sur les champs de résultat spécifiques au modèle ou sur la route de contenu lorsqu’elle est disponible.
  </Accordion>

  <Accordion title="Callback non reçu">
    Utilisez le polling comme source de vérité et vérifiez que votre URL de callback accepte les requêtes POST.
  </Accordion>
</AccordionGroup>

## Codes d’erreur et stratégie de retry

<AccordionGroup>
  <Accordion title="400">
    N’effectuez pas de retry tant que les champs prompt, fichiers, durée ou taille ne sont pas corrigés.
  </Accordion>

  <Accordion title="401">
    N’effectuez pas de retry tant que la clé API n’est pas présente et valide.
  </Accordion>

  <Accordion title="404">
    Vérifiez l’ID de tâche, l’URL de base, le chemin et le model ID avant de réessayer.
  </Accordion>

  <Accordion title="413">
    Réduisez la taille de l’envoi avant de réessayer.
  </Accordion>

  <Accordion title="429">
    Réessayez avec un backoff exponentiel et réduisez la concurrence de création ou de polling.
  </Accordion>

  <Accordion title="500 or 503">
    Réessayez la création de tâche avec backoff ; continuez à interroger les tâches existantes sauf si la tâche atteint une erreur terminale.
  </Accordion>
</AccordionGroup>

<Tip>
  Pour les modèles d’implémentation, consultez [Codes d’erreur et stratégie de retry](/fr/guides/error-codes-and-retry-strategy), [Limites de débit et concurrence](/fr/guides/rate-limits-and-concurrency), et [Webhook et polling pour la génération de vidéo](/fr/guides/webhook-and-polling-for-video-generation).
</Tip>

## Tarification et répertoire des modèles

<CardGroup cols={3}>
  <Card title="Page des modèles" icon="list" href="/overview/models">
    Découvrez comment CometAPI expose les model IDs dans la documentation.
  </Card>

  <Card title="Répertoire des modèles" icon="puzzle-piece" href="https://www.cometapi.com/models/">
    Parcourez la disponibilité et les capacités des modèles.
  </Card>

  <Card title="Tarification" icon="tag" href="https://www.cometapi.com/pricing/">
    Vérifiez la tarification avant d’appeler un modèle.
  </Card>
</CardGroup>
