> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.beatapi.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.beatapi.io/_mcp/server.

# Анализ видео

> Анализируйте загруженный MP4 или MOV с временными метками, используя стандартный или углублённый мультимодальный анализ.

`POST https://api.beatapi.io/v1/video-analysis/tasks`

Анализируйте загруженный MP4 или MOV с временными метками, используя стандартный или углублённый мультимодальный анализ.

## Авторизация

`Authorization`   `string`   **обязательный**

Передавайте API-ключ BeatAPI как токен Bearer. Создать ключ можно в [панели управления](https://beatapi.io/dashboard).

```
Authorization: Bearer <BEATAPI_API_KEY>
```

Храните постоянные API-ключи на доверенных серверах. Для тела запроса обязателен `Content-Type: application/json`. Если метод принимает `Idempotency-Key`, этот заголовок необязателен, но рекомендуется для безопасных повторных попыток с точно таким же телом.

## Тело запроса

`video_url`   `string`   **обязательный**

Ссылка на MP4 или MOV в хранилище BeatAPI, полученная через POST /v1/files для текущего аккаунта. Максимальная проверенная длительность — 600 секунд.

**Формат:** `uri`

---

`prompt`   `string`   **обязательный**

Инструкция для анализа. Запрашивайте временные метки, если важно точно указать момент события.

**Длина:** 1 – 12000 символов

---

`analysis_depth`   `enum<string>`   **необязательный**

Standard — недорогой режим по умолчанию; deep использует более интенсивные рассуждения.

**Допустимые значения:** `standard`, `deep`  \
**По умолчанию:** `"standard"`

---

`max_output_tokens`   `integer`   **необязательный**

Запрошенный лимит ответа. Использование, сообщённое провайдером, может включать скрытые токены рассуждений сверх этого значения. BeatAPI записывает расхождение для проверки и рассчитывает фактическую стоимость в пределах резерва задачи.

**По умолчанию:** `2048`  \
**Диапазон:** 256 – 8192

## Ответ

Успешный запрос возвращает HTTP `201`.

```json
{
  "data": {
    "id": "task_va8K2qA",
    "object": "task",
    "task_kind": "workflow",
    "capability_id": "video-analysis",
    "capability_version": 1,
    "workflow": "video-analysis",
    "status": "queued",
    "stage": "queued",
    "created_at": 1787385600,
    "updated_at": 1787385600,
    "completed_at": null,
    "output": null,
    "usage": {
      "credits_reserved": 0.01,
      "credits_charged": 0.01,
      "billable_duration_seconds": 60,
      "credits_settled": 0,
      "credits_refunded": 0
    },
    "request_id": "req_va123",
    "error_code": null,
    "error_message": null
  }
}
```

## Глубина анализа и оплата

`standard` — режим по умолчанию для краткого содержания, деления на фрагменты, временных меток и извлечения данных. Используйте `deep`, если нужны более подробные рассуждения о движении, контакте, непрерывности действия или неоднозначных событиях.

BeatAPI принимает только MP4 или MOV длительностью до 600 секунд, загруженные тем же аккаунтом через `POST /v1/files`. По проверенной длительности дорожки рассчитывается резерв входных токенов с запасом. После завершения стоимость определяется по проверенным данным провайдера о входных и выходных токенах.

Актуальные тарифы указаны на [странице Video Analysis API](https://www.beatapi.io/video-analysis-api) и `/pricing`. Эта страница описывает только контракт запроса.

При создании резервируется максимально возможная сумма для запроса, после чего возвращается задача в очереди. Неиспользованный резерв возвращается после проверки и расчёта фактического числа токенов. Стоимость каждой завершённой задачи округляется вверх до ближайшего \$0.01, поскольку общий баланс USD рассчитывается в центах.

По умолчанию модель просматривает обычное видео примерно с частотой 1 FPS. Быстрые действия и частые склейки могут быть пропущены. Если важно движение на уровне кадров, запрашивайте временные метки и используйте более короткие фрагменты.

## Следующий шаг

Готовый анализ находится в `data.output.text`, использование токенов — в `data.output.usage`. Если задача ожидает свободных ресурсов, опрашивайте `GET /v1/tasks/{task_id}` до успеха или ошибки.

## Ошибки

| Статус | Значение                                                                                                                                                                                                                                                                                      |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `400`  | Некорректный JSON либо недопустимое поле, значение или сочетание параметров (`bad_request`; сообщение указывает поле), либо входные данные отклонены модерацией (`content_policy_violation`). Повтор без изменений не поможет.                                                                |
| `401`  | Ключ не передан (`missing_api_key`), неверен, просрочен, отключён или исчерпал лимит (`invalid_api_key`; точная причина указана в сообщении). Передавайте `Authorization: Bearer <key>`; ключ работает с префиксом `sk-` и без него. Повторять без исправления не следует.                    |
| `402`  | Недостаточно средств (`insufficient_credits`): баланс равен нулю или меньше стоимости запроса. Пополните баланс, затем отправьте запрос снова. До пополнения повтор не поможет.                                                                                                               |
| `403`  | Операция запрещена ключу или аккаунту (`forbidden`): например, модель недоступна за счёт регистрационного бонуса (пополнение открывает доступ), IP-адрес не входит в разрешённый список ключа или модель недоступна его группе. Повторять без исправления не следует.                         |
| `409`  | В течение 24 часов `Idempotency-Key` уже использован с другим телом или путём запроса либо первый запрос с этим ключом ещё выполняется (`idempotency_conflict`). Повтор без изменений не поможет.                                                                                             |
| `429`  | Слишком много запросов (`rate_limit_exceeded`, в том числе лимит бесплатной модели). Повторите через число секунд из `Retry-After` (также указано в `error.retry_after_seconds`).                                                                                                             |
| `500`  | Непредвиденная внутренняя ошибка (`internal_error`). Запрос можно повторить; если ошибка сохраняется, сохраните `request_id` для поддержки.                                                                                                                                                   |
| `503`  | Запрос не удалось выполнить (`processing_unavailable`, `processing_timeout`, `processing_failed` или `result_transfer_failed`). Средства не списаны. Повторяйте с увеличивающейся задержкой; у 503 нет заголовка `Retry-After` и поля `retry_after_seconds`. BeatAPI не возвращает 502 и 504. |