OpenRouter и выбор провайдера
Исполнители моделей, маршрутизация, Batch и Rerank
Модели и исполнители
Модели GetAPI подключены через OpenRouter. Вендор создаёт модель, провайдер исполняет запрос. Например, модель OpenAI может работать через OpenAI или Azure
GetAPI предоставляет общий каталог моделей. Используйте точный id из ответа GET /v1/models, независимо от семейства
Для доступных текстовых моделей базовый вариант интеграции описан в Chat Completions
Выбор провайдера
Откройте страницу модели в каталоге личного кабинета и выберите доступного провайдера. В запросе используется его идентификатор, например openai или azure
Объект provider передаётся на верхнем уровне JSON рядом с model и messages
curl https://api.getapi.ru/v1/chat/completions \
-H "Authorization: Bearer $GETAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Ответь одним словом: привет"}],
"max_tokens": 32,
"provider": {
"only": ["openai"],
"allow_fallbacks": false
}
}'Не добавляйте провайдера к ID модели. Для выбора Azure оставьте model: "gpt-4o-mini" и задайте provider.only: ["azure"]
Поле provider | Назначение |
|---|---|
only | Разрешённые исполнители для запроса |
order | Порядок предпочтения провайдеров |
ignore | Провайдеры, которых нужно исключить |
allow_fallbacks | Разрешение использовать запасных исполнителей, по умолчанию true |
sort | Приоритет по price, latency или throughput |
require_parameters | Выбор исполнителя, поддерживающего все запрошенные параметры |
max_price | Верхняя цена исполнителя, поля prompt и completion задаются в USD за миллион токенов |
quantizations | Ограничение по доступным вариантам квантования |
order задаёт предпочтение. Для ограничения одним исполнителем используйте only и allow_fallbacks: false
При нескольких значениях в only запрос может выполнить любой провайдер из списка. Запрет переключения уменьшает возможность выполнить запрос при сбое выбранного исполнителя
max_price ограничивает тариф исполнителя, итоговое списание GetAPI рассчитывается с курсом и коэффициентом группы. Нулевой предел исключает платные endpoints и может привести к no compatible priced endpoint
Сейчас require_parameters: true у gpt-4o-mini, gpt-5-nano, claude-sonnet-5.5 и gemini-2.5-flash-lite приводит к no compatible priced endpoint, в том числе в простом текстовом запросе. Для такого запроса опустите флаг, поддержку необходимых параметров проверяйте по результату
Фильтр quantizations может исключить всех исполнителей модели. Учитывайте доступные значения конкретного endpoint
Методы API
Форма запроса зависит от метода. provider текстового API нельзя без проверки переносить на аудио и видео
| Метод | Использование provider |
|---|---|
| Chat Completions | Объект рядом с model и messages |
| Responses | Объект рядом с model и input |
| Messages | Объект рядом с model, messages и max_tokens |
| Embeddings | Объект рядом с model и input |
| Rerank | Объект рядом с model, query и documents |
| Images API | only, order, ignore, sort, allow_fallbacks для поддерживаемых маршрутов |
| Batch | only и allow_fallbacks на уровне задания |
| Speech и Transcriptions | provider.only не поддерживается, запрос отклоняется с provider_routing |
| Video | Настройки видеопровайдера имеют отдельную схему, см. видео |
Набор исполнителей проверяйте для конкретной модели и операции. Каталог OpenRouter помогает найти исходные возможности модели, доступность маршрута GetAPI проверяется отдельным запросом
Проверка результата
Поле provider в ответе содержит имя фактического исполнителя, если метод его возвращает. Например, для provider.only: ["azure"] это "Azure"
Сохраняйте id ответа, идентификатор запроса и usage. Они нужны для сопоставления с журналом расходов
Наличие поля в принятом запросе не подтверждает применение настройки. Например, неподдерживаемый параметр генерации может быть проигнорирован или отклонён провайдером
Если исполнитель недоступен
Список провайдеров и цены могут меняться. Запрос отклоняется, если при заданных ограничениях не осталось совместимых доступных исполнителей
model_price_error с сообщением no compatible priced endpoint означает, что для условий запроса не найден подходящий endpoint с ценой. Проверьте ID модели, only, ignore, ограничения параметров и текущий список провайдеров
Сообщение model has no available endpoints означает отсутствие доступных upstream endpoints модели. Наличие модели в каталоге само по себе не обеспечивает её выполнение
Ошибки upstream_error содержат сведения об отказе провайдера. При 429 учитывайте источник ограничения и время ожидания. Не повторяйте запрос с заведомо неверным провайдером без изменения условий
Если ошибка содержит metadata.previous_errors, сохраняйте этот массив вместе с основной ошибкой, в нём могут быть отказы предыдущих исполнителей
Стоимость
Провайдеры одной модели могут иметь разные тарифы. Окончательное списание рассчитывается по фактической стоимости выполненного запроса с курсом расчёта и коэффициентом группы
Предварительный резерв и окончательное списание различаются. Подробности: стоимость и учёт
Что различается
| Область | Возможные различия |
|---|---|
| Сообщения | Поддерживаемые роли и мультимодальные блоки |
| Генерация | Допустимые параметры и бюджет вывода |
| Инструменты | Поддержка tools, выбор и число вызовов |
| JSON | JSON mode, JSON Schema или только текст |
| Поток | Состав событий, дополнительные поля, расположение usage |
| Рассуждения | Отдельные поля, режимы и счётчики |
| Стоимость | Тарифы входа, выхода, кеша и медиа |
Не связывайте схему ответа только с названием провайдера. На неё влияют модель, версия и формат API
Подключение
- Получите точный ID
- Выберите формат API
- Выполните минимальный текстовый запрос
- Добавьте необходимые возможности по одной
- Проверьте обработку ошибок и завершения потока
Ограничения конкретной модели сохраняются при работе через общий API
Примеры расширенных сценариев: инструменты, JSON, рассуждения
Пакетные задания Batch
POST https://api.getapi.ru/v1/batches
Задание содержит одну модель, один метод и массив запросов. Используйте обычный ID модели без суффикса :batch, наличие отдельного batch-варианта смотрите в каталоге
curl --fail-with-body https://api.getapi.ru/v1/batches \
-H "Authorization: Bearer $GETAPI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"endpoint": "/v1/chat/completions",
"model": "gpt-5-nano",
"completion_window": "24h",
"requests": [
{
"custom_id": "request-1",
"body": {
"messages": [{"role": "user", "content": "Ответь одним словом: готово"}],
"max_tokens": 1024
}
}
]
}'Каждый custom_id должен быть уникален внутри задания. endpoint, model, provider и completion_window размещайте на верхнем уровне рядом с requests
Ответ 202 содержит ID задания и означает его приём. Сохраняйте ID до дальнейших действий
| Действие | Метод |
|---|---|
| Прочитать состояние | GET /v1/batches/{id} |
| Получить результаты | GET /v1/batches/{id}/results |
В состоянии проверяйте status, request_count, result_count, settled_count, billing_status, reserved_quota и charged_quota, если они присутствуют
Запрос отмены POST /v1/batches/{id}/cancel может вернуть unsupported_operation, если провайдер не поддерживает отмену. Такой ответ не подтверждает отмену задания и возврат резерва, продолжайте проверять тот же ID
validating и in_progress не означают готовый результат. При failed читайте error
Расчёт проверяйте отдельно: billing_status: "settled", нулевой reserved_quota и итоговый charged_quota. При reconciliation_required сохраняйте ID и сумму резерва, освобождение денег ещё не подтверждено. Повторно читайте то же задание и сверяйте связанные проводки в журнале
Результаты возвращаются построчно в JSONL. Каждая строка содержит custom_id, status_code, body и сведения об ошибке. Сопоставляйте строки по custom_id, порядок не гарантируется
Выбор исполнителя задаётся объектом provider уровня задания, например {"only": ["openai"], "allow_fallbacks": false}. Доступность batch у провайдера проверяется отдельно от синхронного вызова
После таймаута не создавайте второе задание вслепую. Сначала проверьте сохранённый ID и журнал, см. повторы
Ранжирование Rerank
POST https://api.getapi.ru/v1/rerank
{
"model": "qwen3-reranker-8b",
"query": "красный квадрат",
"documents": ["синий круг", "красный квадрат"],
"top_n": 1,
"provider": {"only": ["fireworks"], "allow_fallbacks": false}
}Ответ содержит массив results с index исходного документа и relevance_score. Если возвращён блок document, его текст дополняет индекс, но не заменяет сопоставление с исходным списком
Не вызывайте rerank через Chat Completions. Модель, провайдер и тариф должны поддерживать операцию ранжирования