Batch API позволяет отправить большой набор запросов одним файлом и получить результаты в течение 24 часов со скидкой 50%. Подходит для задач, где мгновенный ответ не нужен: оценки качества моделей, классификации больших объёмов данных, массовой генерации эмбеддингов.
Через ProxyAPI в пакетном режиме поддерживаются эндпоинты:
| Эндпоинт | Назначение |
|---|---|
/v1/chat/completions | Генерация текста (Chat Completions) |
/v1/responses | Генерация текста (Responses API) |
/v1/embeddings | Векторные представления (эмбеддинги) |
Путь к API — https://api.proxyapi.ru/openai/v1. Форматы запросов и ответов идентичны оригинальному Batch API, поэтому официальный SDK полностью совместим.
- Подготовка файла. Запросы оформляются в файл JSONL — по одному запросу в строке.
- Загрузка файла. Файл загружается через
POST /v1/filesсpurpose=batch. В ответ приходитfile_id. - Создание пакета. Создаёте batch, ссылаясь на
input_file_id. - Опрос статуса. Периодически запрашиваете пакет по
id, покаstatusне станетcompleted. - Получение результатов. Скачиваете файл результатов по
output_file_id.
Каждая строка — отдельный запрос. Поле body совпадает с телом обычного запроса к соответствующему эндпоинту:
{"custom_id": "req-1", "method": "POST", "url": "/v1/responses", "body": {"model": "gpt-5.1", "input": "Привет!", "max_output_tokens": 500}} {"custom_id": "req-2", "method": "POST", "url": "/v1/responses", "body": {"model": "gpt-5.1", "input": "Как дела?", "max_output_tokens": 500}}
custom_id— уникальный идентификатор строки. По нему вы соотносите ответ с запросом: порядок строк в файле результатов не гарантирован.url— допустимы/v1/chat/completions,/v1/responsesи/v1/embeddings.- Один файл — одна модель. Все запросы в файле должны использовать одну и ту же модель.
# 1. Загрузка файла (поле purpose должно идти перед файлом) curl "https://api.proxyapi.ru/openai/v1/files" \ -H "Authorization: Bearer <КЛЮЧ>" \ -F purpose="batch" \ -F file="@requests.jsonl" # 2. Создание пакета (file_id из ответа на загрузку) curl "https://api.proxyapi.ru/openai/v1/batches" \ -H "Authorization: Bearer <КЛЮЧ>" \ -H "Content-Type: application/json" \ -d '{ "input_file_id": "file-abc123", "endpoint": "/v1/responses", "completion_window": "24h" }' # 3. Проверка статуса curl "https://api.proxyapi.ru/openai/v1/batches/batch_abc123" \ -H "Authorization: Bearer <КЛЮЧ>" # 4. Скачивание результатов (output_file_id из ответа на статус) curl "https://api.proxyapi.ru/openai/v1/files/file-output123/content" \ -H "Authorization: Bearer <КЛЮЧ>"
При создании пакета можно передать необязательное поле metadata — произвольный объект, который вернётся в объекте пакета. completion_window сейчас принимает только значение 24h.
| Статус | Значение |
|---|---|
validating | входной файл проверяется перед запуском |
failed | файл не прошёл проверку |
in_progress | пакет обрабатывается |
finalizing | обработка завершена, результаты готовятся |
completed | пакет завершён, результаты готовы |
expired | пакет не уложился в 24 часа |
cancelling | пакет отменяется (до 10 минут) |
cancelled | пакет отменён |
| Операция | Метод и путь |
|---|---|
| Загрузка файла | POST /openai/v1/files (purpose=batch) |
| Создание пакета | POST /openai/v1/batches |
| Статус пакета | GET /openai/v1/batches/{batch_id} |
| Отмена пакета | POST /openai/v1/batches/{batch_id}/cancel |
| Скачивание результатов | GET /openai/v1/files/{file_id}/content |
- 50 000 запросов и 200 МБ на один входной файл. Для эмбеддингов действует отдельное ограничение: не более 50 000 входных текстов (
input) суммарно по всем запросам пакета. Для бóльших объёмов разбивайте на несколько пакетов. - Один входной файл — одна модель.
- Окно — 24 часа. Если пакет не успел завершиться, он переходит в
expired: готовые ответы попадают в файл результатов, а неуспевшие — в файл ошибок (error_file_id) с кодомbatch_expired. Платите только за выполненные запросы. - Файл результатов хранится 30 дней после завершения пакета.
- Нет метода «список пакетов». У OpenAI есть отдельный эндпоинт для получения списка всех пакетов, но мы его не проксируем, поэтому любые вызовы листинга (в SDK или напрямую) не сработают — сохраняйте
idпакета иoutput_file_idрезультатов на своей стороне. - Если хотя бы одна строка файла ссылается на неподдерживаемую модель или эндпоинт, весь пакет отклоняется при создании — частично обработанных пакетов не бывает.
Списание происходит по завершении пакета, по фактическому использованию из файла результатов, по batch-ставке (−50%). За запросы, завершившиеся ошибкой или не уложившиеся в окно, плата не взимается. Подробнее — в разделе «Пакетная обработка (Batch API)» в Основах.