Возможности

Batch запросы

Много запросов одним пакетом, результаты забираете позже. Удобно, когда ответ не нужен сразу: прогон датасета, ночная генерация, массовые эмбеддинги.

Окно выполнения — 24 часа. После завершения результаты приходят в том же GET, отдельный файл скачивать не нужно.

Скидка на токены

Токены ввода и вывода обычно на 50% дешевле обычной цены. Точная скидка — поле batch в каталоге и на странице модели. Нетокеновые услуги (веб-поиск, кэш промпта) скидываются не всегда — смотрите usage.cost_rub после completed.

Какие модели

Обычное имя из каталога: claude-sonnet-4.5, gpt-5.4. Batch есть, если у модели в каталоге поле batch:

JSON
{
  "batch": { "discount": 0.5, "window": "24h" }
}

Прямые маршруты отдельных провайдеров в Batch не ходят — только модели с полем batch.

Эндпоинты

МетодПутьЧто делает
POST/v1/batchesСоздать пакет, 202 Accepted
GET/v1/batches/{id}Статус и результаты
Base URL
Авторизация
Тот же Bearer, что для чата

Форма запроса

endpoint
Форма API для всего пакета
model
Id модели из каталога
requests
Непустой массив. У каждого элемента — custom_id и body

custom_id уникален внутри пакета. body — то же, что вы бы отправили на выбранный endpoint. Модель в body можно не ставить: берётся верхний model. Если поставить — должно совпасть.

Один пакет — одна модель и один endpoint, не больше 10 000 запросов.

endpointAPI
/v1/chat/completionsChat Completions
/v1/responsesResponses
/v1/messagesMessages
/v1/embeddingsEmbeddings

Отправка

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 — пакет принят и встал в очередь, это ещё не готовые ответы.

JSON
{
  "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
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.

JSON
{
  "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:

JSON
{
  "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.