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

# Використовуйте polling і webhooks для генерації відео

> Відстежуйте генерацію відео в CometAPI за допомогою polling і webhooks, зберігаючи task ID, перевіряючи статус task і обробляючи збої доставки callback.

Використовуйте polling як базовий механізм для генерації відео, оскільки кожне асинхронне завдання повертає task ID, який можна запитувати. Додавайте webhooks лише тоді, коли вибраний video endpoint підтримує callback URL, і зберігайте polling як джерело істини для пропущених або специфічних для провайдера випадків доставки callback.

## Створіть video task

Наведений нижче запит створює мінімальний video task і зберігає повернений ID. Додавайте поля duration, resolution або callback лише тоді, коли ці поля задокументовані на сторінці вибраної моделі.

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

Відповідь містить task ID і статус:

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

## Перевіряйте статус через polling

Наведений нижче запит перевіряє статус video task:

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

Відповідь змінюється в міру виконання task. Завершені відповіді можуть містити `video_url`, якщо adapter моделі має URL результату; інакше використовуйте специфічні для моделі поля результату або content route `/v1/videos/{id}/content`, якщо ця модель підтримує проксійні завантаження.

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

## Отримуйте webhook

CometAPI не визначає єдиний універсальний callback payload для кожної video model. Розглядайте callback як pass-through події, специфічні для провайдера, зберігайте сире тіло запиту та узгоджуйте фінальний стан через polling.

Наведений нижче handler для Express приймає video callback і зберігає подію:

```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);
```

Payload callback зазвичай містить поля ідентифікації task і статусу, але точна вкладеність залежить від вибраної моделі або провайдера:

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

## Поширені помилки

| Error                                                | Fix                                                                                                                                                           |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Втрачений callback                                   | Виконуйте polling за task ID, доки ваш застосунок не збереже термінальний стан.                                                                               |
| Дубльований callback                                 | Зробіть обробку callback ідемпотентною за task ID.                                                                                                            |
| Callback відхилено                                   | Швидко повертайте відповідь `2xx`, а потім обробляйте завдання у фоновому режимі.                                                                             |
| Невідповідність payload, специфічного для провайдера | Зберігайте сирий payload callback і нормалізуйте його у своєму застосунку.                                                                                    |
| Відсутній `video_url`                                | Вважайте `video_url` необов’язковим і використовуйте polling разом зі специфічними для моделі полями результату або `/v1/videos/{id}/content`, якщо доступно. |

## Пов’язані посилання

* [Відеомоделі](/api/video)
* [Створити відео](/api/video/sora-2/create)
* [Отримати відео](/api/video/sora-2/retrieve)
* [Сторінка моделей](/uk/overview/models)
* [Каталог моделей](https://www.cometapi.com/models/)
* [Ціни](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": "Як використовувати webhook-и та polling для генерації відео?",
        "description": "Використовуйте polling і webhook-и для генерації відео в CometAPI, зберігаючи ID задач, перевіряючи статус задач і обробляючи збої доставки callback-ів.",
        "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": "Документація CometAPI",
            "item": "https://apidoc.cometapi.com/"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "Посібники",
            "item": "https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "Як використовувати webhook-и та polling для генерації відео?",
            "item": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation"
          }
        ]
      }
    ]
    }
    `}
</script>
