# Список видео-задач

`GET /v1/videos`

> Видео-задачи текущего API-ключа (точнее — его владельца), новые первыми. Пагинация курсором: `after` — id последнего видео предыдущей страницы, `limit` — до 100. Список не опрашивает провайдера — статус конкретной задачи продвигается только запросом GET /v1/videos/{id}.

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

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

## Query-параметры

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `limit` | `integer` | нет | По умолчанию: 20 |
| `after` | `string \| null` | нет | — |

## Схема VideoListResponse

| Поле | Тип | Обязательное | Описание |
| --- | --- | --- | --- |
| `data` | `array<VideoObject>` | да | — |
| `has_more` | `boolean` | нет | По умолчанию: false |
| `object` | `"list"` | нет | По умолчанию: "list" |

## Схема 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 | Успешный ответ | `VideoListResponse` |
| 422 | Ошибка валидации тела запроса или параметров | — |

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

```bash
curl "https://api.trackly.one/v1/videos?limit=5" \
  -H "Authorization: Bearer $TRACKLY_API_KEY"
```

```python
from openai import OpenAI

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

page = client.videos.list(limit=5)
for video in page.data:
    print(video.id, video.status, video.prompt[:40])

if page.has_more:  # следующая страница — курсор after
    next_page = client.videos.list(limit=5, after=page.data[-1].id)
```

```javascript
import OpenAI from "openai";

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

const page = await client.videos.list({ limit: 5 });
for (const video of page.data) {
  console.log(video.id, video.status, video.prompt.slice(0, 40));
}
// следующая страница — курсор after
if (page.has_more) {
  const nextPage = await client.videos.list({
    limit: 5,
    after: page.data.at(-1).id,
  });
}
```

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

```json
{
  "object": "list",
  "data": [
    {
      "id": "video_8a1b2c3d-4e5f-6a7b-8c9d-0e1f2a3b4c5d",
      "object": "video",
      "model": "google/veo-3.1",
      "status": "in_progress",
      "progress": 50,
      "created_at": 1752397100,
      "seconds": "6",
      "size": "720x1280",
      "prompt": "Капли дождя стекают по стеклу кофейни, макросъёмка"
    },
    {
      "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,
      "seconds": "8",
      "size": "1280x720",
      "prompt": "Дрон летит над зимним лесом на рассвете, мягкий свет"
    }
  ],
  "has_more": false
}
```
