> ## 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.

# Video generation APIs

> Wählen Sie CometAPI-Video-Routen für Seedance-, HappyHorse-, Sora 2-, Veo 3-, Wan-, xAI-, Vidu-, Omni-, Kling- und Runway-Workflows.

Verwenden Sie die Dokumentation zu den CometAPI-Video-Modellen, indem Sie den Provider-Workflow auswählen, der zu Ihrem Job-Typ passt. Die meisten Video-Endpunkte erstellen asynchrone Tasks. Speichern Sie daher die task ID und verwenden Sie Polling, um die Ergebnisse abzurufen. Fügen Sie Callbacks nur hinzu, wenn die modellspezifische Seite die Unterstützung für Callbacks dokumentiert.

## Eine Video-API auswählen

<CardGroup cols={2}>
  <Card title="Ein Seedance-Video erstellen" icon="sparkles" href="/api/video/seedance/create">
    Seedance-Video-Tasks erstellen.
  </Card>

  <Card title="Ein HappyHorse-Video erstellen" icon="sparkles" href="/api/video/happyhorse/create">
    HappyHorse-Text-zu-Video-Jobs erstellen.
  </Card>

  <Card title="Ein Sora 2-Video erstellen" icon="film" href="/api/video/sora-2/create">
    Sora 2-Video-Jobs erstellen.
  </Card>

  <Card title="Ein Sora 2-Video abrufen" icon="refresh" href="/api/video/sora-2/retrieve">
    Sora-Video-Jobs abfragen.
  </Card>

  <Card title="Ein Veo 3-Video erstellen" icon="film" href="/api/video/veo3/create">
    Veo-Video-Jobs erstellen.
  </Card>

  <Card title="Ein Wan-Video erstellen" icon="sparkles" href="/api/video/wan/create">
    Wan-Text-zu-Video-Jobs erstellen.
  </Card>

  <Card title="Ein xAI-Video erstellen" icon="film" href="/api/video/xai/video-generation">
    xAI-Video-Jobs generieren.
  </Card>

  <Card title="Ein Vidu-Video erstellen" icon="sparkles" href="/api/video/vidu/create">
    Vidu-Text-zu-Video-Jobs erstellen.
  </Card>

  <Card title="Ein Omni-Video erstellen (Beta)" icon="sparkles" href="/api/video/omni/create">
    Beta-Omni-Video-Jobs erstellen.
  </Card>

  <Card title="Einen Kling-Text-zu-Video-Task erstellen" icon="film" href="/api/video/kling/text-to-video">
    Kling-Videos aus Text-Prompts generieren.
  </Card>

  <Card title="Einen Runway-Bild-zu-Video-Task erstellen" icon="film" href="/api/video/runway/official-format/runway-images-raw-video">
    Runway-Videos aus Bildern generieren.
  </Card>
</CardGroup>

## Erstellen und Abfragen einer Video-Task

Verwenden Sie eine videofähige model ID von der [Models page](/de/overview/models) oder aus dem [model directory](https://www.cometapi.com/models/). Die folgenden Beispiele erstellen mit `POST /v1/videos` eine Video-Task und fragen dann die zurückgegebene Task-ID ab, bis die Task einen Endzustand erreicht.

<Note>
  Diese Beispiele verwenden den Platzhalter `your-video-model-id`. Ersetzen Sie ihn vor dem Ausführen der Anfrage durch eine verfügbare Video-model ID von der [Models page](/de/overview/models) oder dem [model directory](https://www.cometapi.com/models/).
</Note>

<Tip>
  Öffnen Sie [Create a Seedance video](/api/video/seedance/create) und [Retrieve a Seedance video](/api/video/seedance/query), um die API-Playgrounds und Endpunkt-Schemas zu verwenden.
</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>

## Antwortbeispiele

Eine erfolgreiche Antwort auf das Erstellen kann wie folgt aussehen. Speichern Sie die Task-ID, bevor Sie die Abfrage starten:

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

Eine erfolgreiche Antwort auf die Abfrage kann wie folgt aussehen. Abgeschlossene Antworten können `video_url` enthalten; einige Provider-Formate verwenden modellspezifische Ergebnisfelder oder die Route für Videoinhalte, wenn diese Route dokumentiert ist:

```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"
}
```

## Beispielhafte model-Datensätze

<Info>
  Diese Beispielantwort des Modellkatalogs zeigt den Envelope von `/api/models` und die Form eines Video-Modelldatensatzes. Sie ist keine vollständige Modellliste.
</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
      }
    }
  ]
}
```

## Häufige Fehler

<AccordionGroup>
  <Accordion title="Fehlende task ID">
    Speichere die ID aus der Erstellungsantwort, bevor dein Job-Handler zurückkehrt.
  </Accordion>

  <Accordion title="Zu schnelles Polling">
    Füge zwischen den Statusprüfungen eine Verzögerung und Backoff hinzu.
  </Accordion>

  <Accordion title="Nicht unterstützte Dauer oder Größe">
    Verwende die Felder für duration und resolution, die für den ausgewählten Video-Endpunkt dokumentiert sind.
  </Accordion>

  <Accordion title="Fehlende `video_url`">
    Behandle `video_url` als optional und greife auf modellspezifische Ergebnisfelder oder die content-Route zurück, wenn verfügbar.
  </Accordion>

  <Accordion title="Callback nicht empfangen">
    Nutze Polling als Source of Truth und überprüfe, dass deine Callback-URL POST-Anfragen akzeptiert.
  </Accordion>
</AccordionGroup>

## Fehlercodes und Retry-Strategie

<AccordionGroup>
  <Accordion title="400">
    Nicht erneut versuchen, bis die Felder für Prompt, Dateien, duration oder size korrigiert wurden.
  </Accordion>

  <Accordion title="401">
    Nicht erneut versuchen, bis der API-Schlüssel vorhanden und gültig ist.
  </Accordion>

  <Accordion title="404">
    Prüfe task ID, Basis-URL, Pfad und model ID, bevor du es erneut versuchst.
  </Accordion>

  <Accordion title="413">
    Reduziere die Upload-Größe, bevor du es erneut versuchst.
  </Accordion>

  <Accordion title="429">
    Versuche es mit exponentiellem Backoff erneut und reduziere die Parallelität bei Erstellung oder Polling.
  </Accordion>

  <Accordion title="500 or 503">
    Versuche die Task-Erstellung mit Backoff erneut; pollende bestehende Tasks weiter, es sei denn, die Task erreicht einen terminalen Fehler.
  </Accordion>
</AccordionGroup>

<Tip>
  Für Implementierungsmuster siehe [Fehlercodes und Retry-Strategie](/de/guides/error-codes-and-retry-strategy), [Ratenlimits und Parallelität](/de/guides/rate-limits-and-concurrency) und [Webhook und Polling für die Videogenerierung](/de/guides/webhook-and-polling-for-video-generation).
</Tip>

## Preise und Modellverzeichnis

<CardGroup cols={3}>
  <Card title="Modellseite" icon="list" href="/overview/models">
    Lies nach, wie CometAPI model IDs in der Dokumentation bereitstellt.
  </Card>

  <Card title="Modellverzeichnis" icon="puzzle-piece" href="https://www.cometapi.com/models/">
    Durchsuche Modellverfügbarkeit und Fähigkeiten.
  </Card>

  <Card title="Preise" icon="tag" href="https://www.cometapi.com/pricing/">
    Prüfe die Preise, bevor du ein Modell aufrufst.
  </Card>
</CardGroup>
