Возможности
Batch запросы
Много запросов одним пакетом, результаты забираете позже. Удобно, когда ответ не нужен сразу: прогон датасета, ночная генерация, массовые эмбеддинги.
Окно выполнения — 24 часа. После завершения результаты приходят в том же GET, отдельный файл скачивать не нужно.
Скидка на токены
Токены ввода и вывода обычно на 50% дешевле обычной цены. Точная скидка — поле batch в каталоге и на странице модели. Нетокеновые услуги (веб-поиск, кэш промпта) скидываются не всегда — смотрите usage.cost_rub после completed.
Какие модели
Обычное имя из каталога: claude-sonnet-4.5, gpt-5.4. Batch есть, если у модели в каталоге поле batch:
{
"batch": { "discount": 0.5, "window": "24h" }
}Прямые маршруты отдельных провайдеров в Batch не ходят — только модели с полем batch.
Эндпоинты
| Метод | Путь | Что делает |
|---|---|---|
POST | /v1/batches | Создать пакет, 202 Accepted |
GET | /v1/batches/{id} | Статус и результаты |
Bearer, что для чатаФорма запроса
endpointmodelrequestscustom_id и bodycustom_id уникален внутри пакета. body — то же, что вы бы отправили на выбранный endpoint. Модель в body можно не ставить: берётся верхний model. Если поставить — должно совпасть.
Один пакет — одна модель и один endpoint, не больше 10 000 запросов.
endpoint | API |
|---|---|
/v1/chat/completions | Chat Completions |
/v1/responses | Responses |
/v1/messages | Messages |
/v1/embeddings | Embeddings |
Отправка
curl https://api.aitunnel.ru/v1/batches \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-aitunnel-xxx" \
-d '{
"endpoint": "/v1/chat/completions",
"model": "claude-sonnet-4.5",
"requests": [
{
"custom_id": "req-0001",
"body": {
"messages": [
{ "role": "user", "content": "Суммируй AITUNNEL одним предложением." }
]
}
}
]
}'Успешный POST возвращает 202 и объект со статусом validating — пакет принят и встал в очередь, это ещё не готовые ответы.
{
"id": "batch_123",
"object": "batch",
"endpoint": "/v1/chat/completions",
"model": "claude-sonnet-4.5",
"completion_window": "24h",
"status": "validating",
"created_at": 1782097200,
"finalized_at": null,
"request_counts": {
"total": 1,
"completed": 0,
"failed": 0
},
"usage": null,
"results": null,
"error": null
}Единственное окно — 24h.
Опрос
curl https://api.aitunnel.ru/v1/batches/batch_123 \
-H "Authorization: Bearer sk-aitunnel-xxx"Цепочка статусов:
validating → in_progress → finalizing → completedЕщё бывают failed, expired, cancelling, cancelled. Терминальные: completed, failed, expired, cancelled. Опрашивайте, пока не дойдёте до одного из них.
request_counts — прогресс: total, completed, failed.
Пока пакет не completed, results равен null. После — массив в том же ответе. Каждый элемент склеивается со входом по custom_id. Заполнено ровно одно: response или error.
{
"id": "batch_req_123",
"custom_id": "req-0001",
"response": {
"status_code": 200,
"request_id": "request_123",
"body": {
"id": "gen-…",
"object": "chat.completion",
"model": "claude-sonnet-4.5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "AITUNNEL — единый API к сотням моделей с оплатой в рублях."
},
"finish_reason": "stop"
}
]
}
},
"error": null
}Сохраните результаты
Опрашивать пакет можно около 7 дней после создания. Нужные results лучше сохранить раньше.
Списание
При POST на балансе резервируется оценка (худший случай по составу пакета, уже со скидкой Batch). На первом терминальном опросе списывается факт; лишнее возвращается. При failed / expired / cancelled резерв возвращается целиком.
Итог в рублях — usage.cost_rub после completed.
Другие формы API
Все элементы одного пакета — один endpoint. Смешать формы — несколько пакетов.
Пример Messages:
{
"endpoint": "/v1/messages",
"model": "claude-sonnet-4.5",
"requests": [
{
"custom_id": "req-1",
"body": {
"max_tokens": 32,
"messages": [
{ "role": "user", "content": "Скажи привет." }
]
}
}
]
}/v1/embeddings работает так же, если у модели в каталоге есть batch. В body обязательно input (строка или массив строк). Картинки и прочий мультимодальный вход в Batch не принимаются — для них синхронный /embeddings.
Ограничения
- Только текст. Картинки, аудио, видео, файлы в элементах пакета отклоняются. Для них — обычные синхронные эндпоинты.
- На части моделей все
bodyв пакете должны иметь одинаковыйresponse_format(или все без него). Иначе пакет не пройдёт проверку. - Имена пресетов в
modelне подходят — только каталожные id.