# Статус видео-задачи

`GET /v1/videos/{video_id}`

> Возвращает video object и при необходимости опрашивает провайдера (poll-on-demand): статусы `queued` → `in_progress` → `completed` | `failed`, `progress` грубый (0/50/100 — у провайдеров нет точных процентов). Именно в момент перехода в `completed` происходит списание за генерацию. Принимает id и как `video_<uuid>`, и как голый uuid.

Авторизация: заголовок `Authorization: Bearer <API-ключ>` (ключ sk-aiagg-… из личного кабинета). Base URL: `https://api.trackly.one/v1`.

Веб-версия: https://ai.trackly.one/developers/docs/reference/videos-retrieve · Индекс документации: https://ai.trackly.one/llms.txt

## Параметры пути

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `video_id` | `string` | да | — |

## Схема VideoObject

Video job object в формате Sora API.

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `completed_at` | `integer \| null` | нет | — |
| `created_at` | `integer` | да | — |
| `error` | `VideoErrorObject \| null` | нет | — |
| `expires_at` | `integer \| null` | нет | — |
| `id` | `string` | да | — |
| `model` | `string` | да | — |
| `object` | `"video"` | нет | По умолчанию: "video" |
| `progress` | `integer` | да | — |
| `prompt` | `string` | да | — |
| `seconds` | `string` | да | — |
| `size` | `string \| null` | нет | — |
| `status` | `"queued" \| "in_progress" \| "completed" \| "failed"` | да | — |

## Схема VideoErrorObject

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `code` | `string` | да | — |
| `message` | `string` | да | — |

## Ответы

| Код | Описание | Схема |
| --- | --- | --- |
| 200 | Успешный ответ | `VideoObject` |
| 422 | Ошибка валидации тела запроса или параметров | — |

## Пример запроса

```bash
curl https://api.trackly.one/v1/videos/video_5f2c1d8e-3a4b-4c5d-8e9f-0a1b2c3d4e5f \
  -H "Authorization: Bearer $TRACKLY_API_KEY"
```

```python
import time

from openai import OpenAI

client = OpenAI(
    api_key="sk-aiagg-...",
    base_url="https://api.trackly.one/v1",
)

video = client.videos.retrieve("video_5f2c1d8e-3a4b-4c5d-8e9f-0a1b2c3d4e5f")
while video.status in ("queued", "in_progress"):
    time.sleep(10)
    video = client.videos.retrieve(video.id)

print(video.status, video.progress)  # completed 100
```

```javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aiagg-...",
  baseURL: "https://api.trackly.one/v1",
});

let video = await client.videos.retrieve(
  "video_5f2c1d8e-3a4b-4c5d-8e9f-0a1b2c3d4e5f",
);
while (video.status === "queued" || video.status === "in_progress") {
  await new Promise((resolve) => setTimeout(resolve, 10_000));
  video = await client.videos.retrieve(video.id);
}
console.log(video.status, video.progress); // completed 100
```

## Пример ответа

```json
{
  "id": "video_5f2c1d8e-3a4b-4c5d-8e9f-0a1b2c3d4e5f",
  "object": "video",
  "model": "google/veo-3.1-fast",
  "status": "completed",
  "progress": 100,
  "created_at": 1752396600,
  "completed_at": 1752396744,
  "expires_at": 1752483144,
  "seconds": "8",
  "size": "1280x720",
  "prompt": "Дрон летит над зимним лесом на рассвете, мягкий свет"
}
```
