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

# APIs de generación de video

> Elige las rutas de video de CometAPI para flujos de trabajo con Seedance, HappyHorse, Sora 2, Veo 3, Wan, xAI, Vidu, Omni, Kling y Runway.

Usa la documentación de modelos de video de CometAPI eligiendo el flujo de trabajo del proveedor que coincida con tu tipo de tarea. La mayoría de los endpoints de video crean tareas asíncronas, así que guarda el ID de la tarea y usa polling para recuperar los resultados. Agrega callbacks solo cuando la página específica del modelo documente compatibilidad con callbacks.

## Elige una API de video

<CardGroup cols={2}>
  <Card title="Crear un video de Seedance" icon="sparkles" href="/api/video/seedance/create">
    Crea tareas de video de Seedance.
  </Card>

  <Card title="Crear un video de HappyHorse" icon="sparkles" href="/api/video/happyhorse/create">
    Crea trabajos de texto a video de HappyHorse.
  </Card>

  <Card title="Crear un video de Sora 2" icon="film" href="/api/video/sora-2/create">
    Crea trabajos de video de Sora 2.
  </Card>

  <Card title="Recuperar un video de Sora 2" icon="refresh" href="/api/video/sora-2/retrieve">
    Consulta trabajos de video de Sora.
  </Card>

  <Card title="Crear un video de Veo 3" icon="film" href="/api/video/veo3/create">
    Crea trabajos de video de Veo.
  </Card>

  <Card title="Crear un video de Wan" icon="sparkles" href="/api/video/wan/create">
    Crea trabajos de texto a video de Wan.
  </Card>

  <Card title="Crear un video de xAI" icon="film" href="/api/video/xai/video-generation">
    Genera trabajos de video de xAI.
  </Card>

  <Card title="Crear un video de Vidu" icon="sparkles" href="/api/video/vidu/create">
    Crea trabajos de texto a video de Vidu.
  </Card>

  <Card title="Crear un video de Omni (Beta)" icon="sparkles" href="/api/video/omni/create">
    Crea trabajos beta de video de Omni.
  </Card>

  <Card title="Crear una tarea de texto a video de Kling" icon="film" href="/api/video/kling/text-to-video">
    Genera videos de Kling a partir de prompts de texto.
  </Card>

  <Card title="Crear una tarea de imagen a video de Runway" icon="film" href="/api/video/runway/official-format/runway-images-raw-video">
    Genera videos de Runway a partir de imágenes.
  </Card>
</CardGroup>

## Crear y consultar una tarea de video

Usa un model ID con capacidad de video de la [página de modelos](/es/overview/models) o del [directorio de modelos](https://www.cometapi.com/models/). Los ejemplos a continuación crean una tarea de video con `POST /v1/videos` y luego consultan el task ID devuelto hasta que la tarea alcance un estado terminal.

<Note>
  Estos ejemplos usan el marcador de posición `your-video-model-id`. Sustitúyelo por un model ID de video disponible de la [página de modelos](/es/overview/models) o del [directorio de modelos](https://www.cometapi.com/models/) antes de ejecutar la solicitud.
</Note>

<Tip>
  Abre [Crear un video de Seedance](/api/video/seedance/create) y [Recuperar un video de Seedance](/api/video/seedance/query) para usar los playgrounds de la API y los esquemas de endpoint.
</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>

## Ejemplos de respuesta

Una respuesta de creación exitosa puede verse así. Guarda el task ID antes de consultar:

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

Una respuesta de consulta exitosa puede verse así. Las respuestas completadas pueden incluir `video_url`; algunos formatos de proveedor usan campos de resultado específicos del modelo o la ruta de contenido de video cuando esa ruta está documentada:

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

## Registros de modelos de ejemplo

<Info>
  Esta respuesta de ejemplo del catálogo de modelos muestra el contenedor de `/api/models` y la forma de un registro de modelo de video. No es una lista completa de modelos.
</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
      }
    }
  ]
}
```

## Errores comunes

<AccordionGroup>
  <Accordion title="Missing task ID">
    Guarda el ID de la respuesta de creación antes de retornar desde tu controlador de trabajo.
  </Accordion>

  <Accordion title="Polling too fast">
    Agrega retraso y backoff entre las comprobaciones de estado.
  </Accordion>

  <Accordion title="Unsupported duration or size">
    Usa los campos de duración y resolución documentados para el endpoint de video seleccionado.
  </Accordion>

  <Accordion title="Missing video_url">
    Trata `video_url` como opcional y usa como alternativa los campos de resultado específicos del modelo o la ruta de contenido cuando esté disponible.
  </Accordion>

  <Accordion title="Callback not received">
    Usa el polling como fuente de verdad y verifica que tu URL de callback acepte solicitudes POST.
  </Accordion>
</AccordionGroup>

## Códigos de error y estrategia de reintento

<AccordionGroup>
  <Accordion title="400">
    No reintentes hasta que se corrijan los campos de prompt, archivos, duración o tamaño.
  </Accordion>

  <Accordion title="401">
    No reintentes hasta que la clave de API esté presente y sea válida.
  </Accordion>

  <Accordion title="404">
    Verifica el ID de la tarea, la URL base, la ruta y el model ID antes de reintentar.
  </Accordion>

  <Accordion title="413">
    Reduce el tamaño de la carga antes de reintentar.
  </Accordion>

  <Accordion title="429">
    Reintenta con backoff exponencial y reduce la concurrencia de creación o polling.
  </Accordion>

  <Accordion title="500 or 503">
    Reintenta la creación de tareas con backoff; sigue haciendo polling de las tareas existentes a menos que la tarea alcance un error terminal.
  </Accordion>
</AccordionGroup>

<Tip>
  Para patrones de implementación, consulta [Códigos de error y estrategia de reintento](/es/guides/error-codes-and-retry-strategy), [Límites de tasa y concurrencia](/es/guides/rate-limits-and-concurrency), y [Webhook y polling para generación de video](/es/guides/webhook-and-polling-for-video-generation).
</Tip>

## Precios y directorio de modelos

<CardGroup cols={3}>
  <Card title="Models page" icon="list" href="/overview/models">
    Lee cómo CometAPI expone los model IDs en la documentación.
  </Card>

  <Card title="Model directory" icon="puzzle-piece" href="https://www.cometapi.com/models/">
    Explora la disponibilidad y capacidades de los modelos.
  </Card>

  <Card title="Pricing" icon="tag" href="https://www.cometapi.com/pricing/">
    Consulta los precios antes de llamar a un modelo.
  </Card>
</CardGroup>
