Перейти к содержимому

Claude Message Batches

Совместимый с Anthropic Message Batches API; Model Gate выполняет каждый элемент через собственную сохраняемую очередь.

Чтение и управление существующим Batch остаются доступными при нулевом балансе для действующего активного ключа. Создание пакета через POST /v1/messages/batches требует положительного баланса и доступного лимита расходов. При запуске каждого элемента снова проверяются текущие лимиты; при нехватке средств он может остаться в очереди. Квоты активных заданий и элементов очереди независимы и не подтверждают списание с аккаунта.

Model Gate реализует совместимый с Anthropic Message Batches API на https://api.model-gate.com. Это слой совместимости: Model Gate сохраняет пакет и выполняет каждый элемент обычным путём /v1/messages Model Gate. Пакет не отправляется в собственный пакетный API Anthropic.

Используйте обычный ключ Model API (mg_live_...). Каждый элемент учитывается отдельным запросом с request_mode=batch, batch_protocol=claude, идентификатором пакета и его custom_id.

Потоковый режим внутри пакета не поддерживается. Алиасы моделей разрешаются до постановки элемента в очередь.

Создать пакет сообщений

Запрос

curl https://api.model-gate.com/v1/messages/batches \
  -H "x-api-key: mg_live_..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "requests": [
      {
        "custom_id": "summary-1",
        "params": {
          "model": "ch-47",
          "max_tokens": 256,
          "messages": [{"role":"user","content":"Summarize this text."}]
        }
      }
    ]
  }'

Ответ — 200

{
  "id": "msgbatch_01K...",
  "type": "message_batch",
  "processing_status": "in_progress",
  "request_counts": {
    "processing": 1,
    "succeeded": 0,
    "errored": 0,
    "canceled": 0,
    "expired": 0
  },
  "ended_at": null,
  "created_at": "2026-08-13T08:30:00Z",
  "expires_at": "2026-08-14T08:30:00Z",
  "cancel_initiated_at": null,
  "results_url": null
}

Получить пакет

Запрос

curl https://api.model-gate.com/v1/messages/batches/msgbatch_01K... \
  -H "x-api-key: mg_live_..."

Ответ — обработка завершена

{
  "id": "msgbatch_01K...",
  "type": "message_batch",
  "processing_status": "ended",
  "request_counts": {
    "processing": 0,
    "succeeded": 1,
    "errored": 0,
    "canceled": 0,
    "expired": 0
  },
  "ended_at": "2026-08-13T08:30:04Z",
  "results_url": "https://api.model-gate.com/v1/messages/batches/msgbatch_01K.../results"
}

Прочитать результаты

Результат возвращается в формате JSON Lines. Не полагайтесь на исходный порядок элементов; сопоставляйте результаты по custom_id.

Запрос

curl https://api.model-gate.com/v1/messages/batches/msgbatch_01K.../results \
  -H "x-api-key: mg_live_..."

Ответ — 200

{"custom_id":"summary-1","result":{"type":"succeeded","message":{"id":"msg_...","type":"message","role":"assistant","content":[{"type":"text","text":"..."}]}}}

Получить список пакетов

limit по умолчанию равен 20, допустимый диапазон — от 1 до 100. Для курсорной навигации используйте after_id или before_id; не передавайте оба в одном запросе.

Запрос

curl "https://api.model-gate.com/v1/messages/batches?limit=20&after_id=msgbatch_01K..." \
  -H "x-api-key: mg_live_..."

Ответ — 200

{
  "data": [],
  "has_more": false,
  "first_id": null,
  "last_id": null
}

Отменить пакет

Отмена запрещает захват ещё не начатых элементов. Уже выполняемый элемент может завершиться.

Запрос

curl -X POST https://api.model-gate.com/v1/messages/batches/msgbatch_01K.../cancel \
  -H "x-api-key: mg_live_..."

Ответ — 200

{
  "id": "msgbatch_01K...",
  "type": "message_batch",
  "processing_status": "canceling",
  "request_counts": {
    "processing": 1,
    "succeeded": 0,
    "errored": 0,
    "canceled": 0,
    "expired": 0
  }
}

Удалить завершённый пакет

Удаление принимается только после перехода пакета в конечное состояние.

Запрос

curl -X DELETE https://api.model-gate.com/v1/messages/batches/msgbatch_01K... \
  -H "x-api-key: mg_live_..."

Ответ — 200

{
  "id": "msgbatch_01K...",
  "type": "message_batch_deleted"
}

Поведение при восстановлении

Пакет выполняется как минимум один раз, а не строго один раз. После прерывания возможна новая попытка, даже если поставщик принял первую. Идентификатор запроса Model Gate сохраняется, а для уже завершённых запросов действует защита от повторного списания. Для внешних действий инструментов нужна идемпотентность на уровне приложения.

Перед началом элемента баланс и лимиты ключа/группы должны разрешать выполнение. В остальном корректные элементы остаются в очереди при исчерпании средств или лимита, не расходуя попытку. Пополнение, сброс счётчика или увеличение лимита могут снова разрешить выполнение. Резервирования максимальной стоимости нет: параллельно принятые элементы могут завершиться с превышением оставшегося баланса или лимита; удерживаются только последующие элементы.

Тарифы и учёт

Для каждого элемента пакета используются те же маршрутизация модели, учёт токенов, снимок тарифа, расчёт суммы для лимита, ограничения ключа/группы и финансовый расчёт, что для обычного запроса Model Gate. Тариф аккаунта может включать ценовой коэффициент Batch-запроса. Значение по умолчанию — 1; проверьте применимый тариф до отправки.

Например, при обычной стоимости Model Gate 0.02 и пакетном коэффициенте 0.5 фактическое списание составит 0.01. Сохранённая официальная справочная сумма поставщика на этот коэффициент Model Gate не умножается. Собственные запросы с "async": true также не затрагиваются.

Коэффициент, отличный от 1, показывается на странице цен моделей. Минимальный ответ /v1/models больше не включает batch_pricing и batch_cost; фактический коэффициент тарификации и сохранённый учёт запросов не меняются.

Ошибки

Недействительный или повторный custom_id, неизвестная модель, stream:true, вложенный async:true, слишком большой запрос или неверное тело возвращают обычную ошибку в стиле Anthropic.

{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "summary-1: stream=true is not supported inside a batch"
  }
}