Задачи
Асинхронные задачи всего аккаунта — генерация видео и пакеты: статус, резерв, итоговая стоимость и возврат.
Здесь видны задачи всех ключей аккаунта и Студии — то же, что во вкладке «Задачи» кабинета. Интеграция со своим API-ключом читает свои задачи через GET /v1/jobs, /v1/videos и /v1/batches; ключ управления эти методы не вызывает.
Методы
| Метод | Право | Что делает |
|---|---|---|
GET /jobs | usage:read | Задачи аккаунта, новые первыми |
GET /jobs/summary | usage:read | Сколько задач выполняется и сколько денег они держат |
GET /jobs/filters | usage:read | Модели, на которых шли задачи периода |
GET /jobs/{id} | usage:read | Одна задача |
GET /jobs/{id}/results | usage:read | Результаты завершённого пакета |
Методы только читают. Отменить выполняющуюся задачу нельзя.
Список задач
curl "https://api.aitunnel.ru/v1/aitunnel/jobs?active=true" \
-H "Authorization: Bearer sk-aitunnel-mgmt-xxx"{
"data": [
{
"id": "batch_1a2b3c4d5e6f708192a3b4c5d6e7f809",
"kind": "batch",
"status": "in_progress",
"model": "gpt-5.4-mini",
"key_id": 4218,
"created_at": "2026-11-14T09:00:00.000Z",
"expires_at": "2026-11-15T09:00:00.000Z",
"settled_at": null,
"reserved_rub": 0.46,
"cost_rub": null,
"refunded_rub": null,
"error": null,
"request": { "endpoint": "/v1/chat/completions" },
"request_count": 3,
"request_counts": { "total": 3, "completed": 1, "failed": 0 },
"video_urls": []
},
{
"id": "vid_9f8e7d6c5b4a39281706f5e4d3c2b1a0",
"kind": "video",
"status": "completed",
"model": "seedance-2.0",
"key_id": 4217,
"created_at": "2026-11-14T08:00:00.000Z",
"expires_at": "2026-11-14T09:00:00.000Z",
"settled_at": "2026-11-14T08:01:00.000Z",
"reserved_rub": 34,
"cost_rub": 17,
"refunded_rub": 17,
"error": null,
"request": {
"size": "720x720",
"duration": 2,
"audio": true,
"end_user": "customer-42"
},
"request_count": null,
"request_counts": null,
"video_urls": ["https://api.aitunnel.ru/public/jobs/vid_9f8e7d6c5b4a39281706f5e4d3c2b1a0/content?index=0"]
}
],
"next_cursor": null
}| Параметр | Смысл |
|---|---|
from, to | Период: даты YYYY-MM-DD, целые сутки в timezone, обе включительно. Передаются вместе |
from_time, to_time | Время ЧЧ:ММ в первый и последний день периода. Без них — с начала первого дня до конца последнего |
timezone | Часовой пояс IANA, по умолчанию UTC |
key_id | Только задачи, отправленные этим API-ключом |
kind | video или batch |
status | pending, in_progress, completed, failed, expired, cancelled |
model | Только эта модель, имя целиком |
active | true — только задачи, которые ещё выполняются и держат резерв |
job_id | Одна задача по её id; период и остальные фильтры не учитываются |
limit | От 1 до 100, по умолчанию 30 |
before | next_cursor предыдущей страницы |
next_cursor — передайте его в before, чтобы получить следующую страницу. null — страница последняя.
Задача
GET /jobs/{id} возвращает один такой объект.
| Поле | Смысл |
|---|---|
id | id задачи — тот же, что вернул POST /v1/videos или POST /v1/batches |
kind | video или batch |
status | pending и in_progress — выполняется; completed — готово; failed, expired, cancelled — не выполнена, резерв возвращён |
model | Модель, как в каталоге |
key_id | API-ключ, которым задача отправлена. null у задачи из Студии и если ключа больше нет |
created_at, expires_at | Когда задача создана и крайний срок: незавершённая к этому моменту задача закрывается с возвратом резерва |
settled_at | Когда задача рассчитана. null, пока резерв удерживается |
reserved_rub | Сколько отложено на время выполнения, ₽ |
cost_rub | Сколько задача стоила, ₽. null до расчёта |
refunded_rub | Сколько из резерва вернулось, ₽. null до расчёта |
error | Причина неудачи или null |
request | Параметры, с которыми задача отправлена, те, что были: endpoint, size, duration, audio, continuation, end_user, session_id, app |
request_count, request_counts | У пакета: сколько в нём запросов и сколько из них total, completed, failed. У видео — null |
video_urls | Ссылки на видео готовой и оплаченной задачи, по одной на ролик. Иначе пустой список |
- Пока задача выполняется, известен только резерв. Цена появляется после расчёта:
cost_rub— сколько списано,refunded_rub— остаток резерва, который вернулся. - Чтение не обращается к провайдеру: статус обновляется в фоне, поэтому может отставать на несколько секунд.
- Ссылки из
video_urlsоткрываются без ключа: их можно поставить прямо в плеер.&download=1в конце — та же ссылка скачивает файл. Не публикуйте id задачи, если видео не должно быть доступно всем.
Сводка и фильтры
GET /jobs/summary — сколько задач выполняется сейчас и сколько рублей они держат в резерве:
{
"active": 2,
"reserved_rub": 34.46
}GET /jobs/filters — модели, на которых шли задачи. Принимает тот же период и key_id, что список:
{
"models": ["gpt-5.4-mini", "seedance-2.0"]
}Результаты пакета
GET /jobs/{id}/results отдаёт ответы завершённого пакета: по строке на запрос.
curl https://api.aitunnel.ru/v1/aitunnel/jobs/batch_1a2b3c4d5e6f708192a3b4c5d6e7f809/results \
-H "Authorization: Bearer sk-aitunnel-mgmt-xxx"{
"id": "batch_1a2b3c4d5e6f708192a3b4c5d6e7f809",
"model": "gpt-5.4-mini",
"status": "completed",
"endpoint": "/v1/chat/completions",
"request_counts": { "total": 2, "completed": 1, "failed": 1 },
"results": [
{
"custom_id": "a",
"status_code": 200,
"body": {
"id": "gen-1",
"model": "gpt-5.4-mini",
"choices": []
}
},
{ "custom_id": "b", "status_code": 429, "body": null }
]
}custom_id— ваш идентификатор запроса в пакете,status_code— чем он закончился,body— ответ модели илиnull.- Результаты есть только у пакета в статусе
completed. Они запрашиваются у провайдера при каждом чтении.
Ошибки
| Статус | Смысл |
|---|---|
400 | invalid_request — неверный параметр (error.metadata.fields) или результаты запрошены у видео: «Результаты есть только у batch-задач.» |
401 | authentication_failed — ключа нет, он неверный, отозван или истёк |
403 | permission_denied — у ключа нет нужного права, IP не в списке разрешённых или метод вызван API-ключом |
404 | not_found — «Задача не найдена»: такого id в аккаунте нет. Или «Результаты задачи больше не хранятся.» |
409 | invalid_request — у задачи нет результатов. metadata.code: job_not_finished — ещё выполняется, job_refunded — не выполнена, деньги возвращены |
502 | provider_unavailable — «Не удалось получить результаты задачи. Повторите попытку.» |