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

# Usa polling y webhooks para la generación de video

> Haz seguimiento de la generación de video en CometAPI con polling y webhooks almacenando IDs de tareas, verificando el estado de las tareas y gestionando fallos en la entrega de callbacks.

Usa polling como base para la generación de video porque cada trabajo asíncrono devuelve un ID de tarea que puedes consultar. Agrega webhooks solo cuando el endpoint de video seleccionado admita URLs de callback, y mantén polling como la fuente de verdad para entregas de callbacks perdidas o específicas del proveedor.

## Crear una tarea de video

La siguiente solicitud crea una tarea de video mínima y almacena el ID devuelto. Agrega campos de duración, resolución o callback solo cuando la página del modelo seleccionado documente esos campos.

```bash theme={null}
curl https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=doubao-seedance-2-0" \
  -F "prompt=A cinematic shot of a paper airplane crossing a desk"
```

La respuesta incluye un ID de tarea y un estado:

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

## Consultar el estado

La siguiente solicitud verifica el estado de la tarea de video:

```bash theme={null}
curl https://api.cometapi.com/v1/videos/task_example \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

La respuesta cambia a medida que avanza la tarea. Las respuestas completadas pueden incluir `video_url` cuando el adaptador del modelo tiene una URL de resultado; de lo contrario, usa campos de resultado específicos del modelo o la ruta de contenido `/v1/videos/{id}/content` cuando ese modelo admita descargas con proxy.

```json theme={null}
{
  "id": "task_example",
  "object": "video",
  "model": "doubao-seedance-2-0",
  "status": "completed",
  "progress": 100,
  "completed_at": 1779872300,
  "video_url": "<generated-video-url>"
}
```

## Recibir un webhook

CometAPI no define una carga útil de callback universal para cada modelo de video. Trata los callbacks como eventos pass-through específicos del proveedor, almacena el cuerpo sin procesar y reconcilia el estado final con polling.

El siguiente controlador de Express acepta un callback de video y almacena el evento:

```javascript theme={null}
import express from "express";

const app = express();
app.use(express.json({ limit: "2mb" }));

app.post("/cometapi/video-webhook", async (request, response) => {
  const event = request.body;

  console.log("Task ID:", event.task_id || event.id);
  console.log("Status:", event.status);

  response.status(200).json({ received: true });
});

app.listen(3000);
```

Una carga útil de callback suele incluir campos de identidad de la tarea y de estado, pero el anidamiento exacto depende del modelo o proveedor seleccionado:

```json theme={null}
{
  "task_id": "task_example",
  "status": "completed",
  "progress": 100,
  "result": {
    "video_url": "https://example.com/result.mp4"
  }
}
```

## Errores comunes

| Error                                                   | Solución                                                                                                                                               |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Callback perdido                                        | Haz polling por ID de tarea hasta que tu aplicación haya almacenado un estado terminal.                                                                |
| Callback duplicado                                      | Haz que el manejo de callbacks sea idempotente por ID de tarea.                                                                                        |
| Callback rechazado                                      | Devuelve rápidamente una respuesta `2xx` y luego procesa el trabajo en segundo plano.                                                                  |
| Incompatibilidad de carga útil específica del proveedor | Almacena la carga útil del callback sin procesar y normalízala en tu aplicación.                                                                       |
| Falta `video_url`                                       | Trata `video_url` como opcional y usa polling junto con campos de resultado específicos del modelo o `/v1/videos/{id}/content` cuando esté disponible. |

## Enlaces relacionados

* [Modelos de video](/api/video)
* [Crear video](/api/video/sora-2/create)
* [Recuperar video](/api/video/sora-2/retrieve)
* [Página de modelos](/es/overview/models)
* [Directorio de modelos](https://www.cometapi.com/models/)
* [Precios](https://www.cometapi.com/pricing/)

<script type="application/ld+json">
  {`
    {
    "@context": "https://schema.org",
    "@graph": [
      {
        "@type": "TechArticle",
        "@id": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation",
        "headline": "¿Cómo uso webhooks y polling para la generación de video?",
        "description": "Usa polling y webhooks para la generación de video de CometAPI almacenando IDs de tarea, comprobando el estado de la tarea y gestionando fallos en la entrega de callbacks.",
        "url": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation",
        "author": {
          "@type": "Organization",
          "name": "CometAPI"
        },
        "publisher": {
          "@type": "Organization",
          "name": "CometAPI",
          "url": "https://www.cometapi.com"
        }
      },
      {
        "@type": "BreadcrumbList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "Documentación de CometAPI",
            "item": "https://apidoc.cometapi.com/"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "Guías",
            "item": "https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "¿Cómo uso webhooks y polling para la generación de video?",
            "item": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation"
          }
        ]
      }
    ]
    }
    `}
</script>
