Прозрачная маршрутизация и разбивка рейсов
Прозрачный маршрутизатор GetVibe: явно укажите маршрут через :alias или используйте автоматическую маршрутизацию по стратегии ключа. Публичные псевдонимы, отказоустойчивое переключение, заголовки для раскрытия и отладки x-getvibe-route, а также поля route/address_as в истории.
GetVibe — это прозрачный маршрутизатор: вы либо явно выбираете публичный вариант через суффикс :alias, либо оставляете имя модели без суффикса — тогда шлюз выбирает маршрут согласно стратегии вашего аккаунта/ключа и при сбоях переключается на другой доступный вариант. В ответах и истории используются только публичные идентификаторы маршрутов.
Два режима: pin или auto
| Параметр | Тип | Описание |
|---|---|---|
Explicit pin | model:alias or model:N | Запрос всегда идёт через выбранный вариант. Переключение между вариантами отключено: при 429/5xx ошибка возвращается как есть (повторная попытка на том же варианте разрешена). |
Auto (bare model) | только название модели | Шлюз выбирает вариант в соответствии с настройками аккаунта или ключа. При 429/5xx и пустом 200 он пробует другие варианты той же модели с учётом ограничений по стоимости и входным данным. |
"model": "claude-opus-4.8" // auto — key strategy
"model": "claude-opus-4.8:yellow" // pin — :yellow only, no switching to other channels
"model": "claude-opus-4.8:2" // pin — catalog variant #2 (legacy :N syntax)Границы цены: max_price и min_price
Каждая модель обслуживается несколькими каналами по разным ценам — своего рода лестницей. Эти два параметра тела запроса указывают, какие ступени этой лестницы могут вас обслуживать. Оба выражаются в USD за 1M токенов — та же единица измерения и те же числа, что печатает страница Models. Они сравниваются с нашей ценой — тем, что списывается с вас, — и никогда с оптовым числом, которое вы не видите.
| Параметр | Тип | Описание |
|---|---|---|
max_price | число или объект | Верхний предел. Число ограничивает ОБЕ части; объект ограничивает их по отдельности: {"input": 0.5, "output": 2}. Пропущенная часть не ограничена. Включительно: предел, равный опубликованной цене, допускает этот канал. |
min_price | число или объект | Нижняя граница, той же формы. Отклоняет каналы с ценой НИЖЕ неё — для вызывающих, которые предпочли бы не обслуживаться самой глубокой скидкой в книге. Может только увеличить стоимость запроса, но никогда не уменьшить её. |
{
"model": "deepseek-v4-flash-0731",
"messages": [{"role": "user", "content": "hi"}],
"max_price": 0.02,
"min_price": {"input": 0.001}
}Обе составляющие должны укладываться в лимит — и вход, и выход, а не их среднее. Канал, дешёвый на входе и дорогой на выходе, не удовлетворяет ограничению по одному числу.
Постоянный потолок, задаётся один раз в кабинете
Потолок не обязательно указывать в каждом вызове. Дашборд хранит один потолок на API-ключ и на модель, плюс значение по умолчанию, которое покрывает все модели, для которых вы не задали его явно, и API читает его при каждом запросе. Запрос, содержащий max_price, использует это значение только для данного вызова; запрос без него использует ваш сохранённый потолок. Приоритет, от самого конкретного:
| Параметр | Тип | Описание |
|---|---|---|
max_price in the request | за вызов | Заменяет сохранённый потолок только для этого запроса — целиком, без объединения по частям. |
key + model | stored | Потолок этого API-ключа для данной модели. |
account + model | stored | Ваш лимит аккаунта для этой модели; используется ключами, которые свой лимит не задают. |
key / account default | stored | Общий потолок для всех моделей, у которых нет собственного. |
Где посмотреть цены, которые вы ограничиваете
GET /api/catalog публикует массив channels для каждой модели: по одной записи на каждый канал, на который может попасть запрос, от самого дешёвого, с адресом, по которому его можно закрепить, его ценой inputUsd / outputUsd за 1M токенов и признаком того, является ли он каналом по умолчанию. Это те самые числа, с которыми сравниваются max_price и min_price, и те самые числа, по которым с вас списывают средства — один список, а не три.
curl -s https://getvibeapi.com/api/catalog | jq '.[] | select(.apiModel=="z-ai/glm-5.3") | .channels'За что вы платите
Вы платите за канал, который фактически обслужил запрос, плюс нашу фиксированную наценку — не за установленный вами потолок и никогда не больше него. Если вы ограничиваете цену, а запрос закрывается на более дешёвой ступени, вы платите по более дешёвой. Лестница на странице модели показывает диапазон, и значение «от» — это самая дешёвая существующая ступень: это реальная цена, которую с вас могут взять, а не обещание, что этот запрос попадёт именно на неё. Указывайте max_price, когда вам нужна гарантированная верхняя граница.
Когда ничего не подходит
Запрос отклонён: HTTP 422 с "type": "price_bound_no_lane", где указаны самая дешёвая и самая дорогая цены канала для этой модели и полный список channels, чтобы вы могли выбрать лимит по числам, а не угадывать его. lowest_passing_usd_per_million — это наименьший лимит, который прямо сейчас допускает канал: собственная пара одного канала, поэтому его отправка проходит (два плеча cheapest могут относиться к разным каналам). То же поле появляется, когда сама биржа отклонила ваш лимит: тогда это следующий ценовой уровень, на котором ещё есть предложение, и он никогда не ниже отправленного вами лимита. Когда лимитом были не вы — им был наш собственный потолок закупки для канала, а предложения под ним оказались заняты или исчерпаны — ответ вместо этого HTTP 503 "type": "no_seller_available" с Retry-After и без предложенной цены: повышение max_price не помогло бы, а повтор чуть позже мог бы. Самая дешёвая ступень часто содержит единственное предложение, которое занято, поэтому для надёжного исполнения устанавливайте лимит на уровне priceTypical модели или выше, где сосредоточена основная часть предложения. Мы никогда не обслуживаем молча более дорогой канал и никогда не подменяем модель другой. Некорректное значение — строка, ноль, отрицательное число, неизвестное поле — это 400 invalid_request_error, и оно никогда не игнорируется молча.
{
"error": {
"message": "No channel of model "deepseek-v4-flash-0731" is priced within your max_price $0.0001 in / $0.0001 out...",
"type": "price_bound_no_lane",
"code": 422,
"param": "max_price",
"cheapest_usd_per_million": {"input": 0.0065, "output": 0.013},
"dearest_usd_per_million": {"input": 0.0528, "output": 0.1584},
"lowest_passing_usd_per_million": {"input": 0.0205, "output": 0.0613},
"channels": [
{"address": "deepseek/deepseek-v4-flash-0731:codebuddy-cn", "label": "codebuddy-cn", "inputUsd": 0.0205, "outputUsd": 0.0613, "isDefault": true},
{"address": "deepseek/deepseek-v4-flash-0731:qwencloud", "label": "qwencloud", "inputUsd": 0.0378, "outputUsd": 0.1132, "isDefault": false}
]
}
}Имена пулов, которые можно закрепить
Каналы, обслуживаемые из пула подписки вендора, адресуются по имени. Напишите имя после двоеточия, точно так же, как любой другой псевдоним:
"model": "gpt-6.1-sol:codex" // pin a subscription pool
"model": "claude-opus-5.5:claude-code" // pin the Claude Code pool| Параметр | Тип | Описание |
|---|---|---|
:codex | pool | Обращайтесь к этому пулу по имени. Также принимается: :openai-codex. |
:qwencloud | pool | Обращайтесь к этому пулу по имени. Также принимается: :alibaba-qwencloud. |
:zai | pool | Обращайтесь к этому пулу по имени. Также принимается: :z-ai-glm-coding-plan. |
:claude-code | pool | Обращайтесь к этому пулу по имени. |
:antigravity | pool | Обращайтесь к этому пулу по имени. |
:grok | pool | Обращайтесь к этому пулу по имени. |
:codebuddy | pool | Обращайтесь к этому пулу по имени. |
:codebuddy-cn | pool | Обращайтесь к этому пулу по имени. |
:clinepass | pool | Обращайтесь к этому пулу по имени. |
:command-code | pool | Обращайтесь к этому пулу по имени. Также принимается: :commandcode. |
:opencode | pool | Обращайтесь к этому пулу по имени. Также принимается: :opencode-go. |
:mimo | pool | Обращайтесь к этому пулу по имени. |
:kiro-pool | pool | Обращайтесь к этому пулу по имени. |
:meta-ai | pool | Обращайтесь к этому пулу по имени. |
:minimax-cn | pool | Обращайтесь к этому пулу по имени. |
:qwencloud-alibaba-cn | pool | Обращайтесь к этому пулу по имени. |
:marketplace | pool | Обращайтесь к этому пулу по имени. Также принимается: :bare-marketplace-alias. |
:nous | pool | Обращайтесь к этому пулу по имени. |
x-pv-deprecated-alias / x-pv-use-instead), но здесь она никогда не показывается, и новые интеграции должны использовать имя. Каждый пул — это один канал со своей ценовой лестницей; старая форма диапазона, оканчивающаяся цифрой (:claude-code-2), всё ещё разрешается в этот пул.Публичные алиасы (:alias)
Суффикс после двоеточия — это публичный идентификатор маршрута, а не имя апстрима. Полный список для конкретной модели есть в каталоге (Models, столбец «In API»). Основные alias:
| Параметр | Тип | Описание |
|---|---|---|
:yellow | alias | Публичный вариант, доступный для многих моделей; его цена указана в каталоге. |
:codex / :claude-code / … | alias | Пулы подписок, перечисленные по именам выше в разделе «Имена пулов, которые можно закрепить». |
:pixel / :flow | alias | Медиамаршруты (изображения/видео), не чат. |
Настройки ключа
Для запросов auto (модель без суффикса) для каждого API-ключа задаются следующие настройки (панель управления → API-ключи):
| Параметр | Тип | Описание |
|---|---|---|
routingStrategy | string | priority (по умолчанию) — порядок providerPriority, иначе первый вариант в каталоге; price — самый дешёвый для нас вариант; latency — самый быстрый по последним замерам; default — строго первый подходящий вариант. |
providerPriority | list | Приоритет внутренних тегов провайдеров (человекочитаемые названия в панели управления). Используется с strategy=priority. |
disabledProviders | list | Исключите провайдеров из автоматической маршрутизации. Явно указанный :alias по-прежнему можно вызвать, если такой вариант существует. |
cacheOnly | boolean | Только варианты с поддержкой кеша промпта — подходят для повторяющегося префикса. |
allowedModels и ограничения в таблице ниже.Стратегия маршрутизации
| Параметр | Тип | Описание |
|---|---|---|
priority (default) | strategy | Обычный маршрут по умолчанию. |
price | strategy | Выберите вариант с наименьшей ценой среди доступных для этой модели. |
latency | strategy | Выберите самый быстрый вариант по последним измерениям. |
cacheOnly | boolean | Только варианты с поддержкой кеша — подходят для повторяющегося префикса промпта. |
:yellow), он всегда учитывается и маршрутизация его не переопределяет. Настраивается отдельно для каждого ключа в панели управления → API-ключи.Явный выбор провайдера
Добавьте псевдоним поставщика после двоеточия — он учитывается независимо от стратегии маршрутизации. Полный список псевдонимов и примеры — в разделе Models → Providers.
"model": "claude-opus-4.8" // auto — key strategy
"model": "claude-opus-4.8:yellow" // explicitly pin the :yellow channel
"model": "claude-opus-4.8:kiro-pool" // explicitly pin the :kiro-pool channelЛимиты ключей
Для каждого API-ключа вы можете задать в дашборде:
| Параметр | Тип | Описание |
|---|---|---|
allowedModels | список моделей | Белый список моделей, которые может вызывать этот ключ. Пусто — разрешены все. Запрос модели вне списка получит 403. |
routingStrategy / cacheOnly | override | Стратегия и фильтр кеша для этого ключа. |
limitRub | лимит расходов | Лимит расходов для ключа. |
allowedIps | Белый список IP | Ограничение по IP (см. раздел «Аутентификация»). |
Failover (только auto)
С bare model шлюз может переключиться на другой публичный вариант той же модели, если текущий вернул 429, 5xx или пустой 200 без содержимого. Ограничения:
- Запросы с изображениями/PDF не переключаются на другого провайдера (совместимость с vision).
- Failover не переходит на существенно более дорогой вариант (кроме strategy=price).
- Существует верхняя граница числа попыток на один клиентский запрос.
- С pin (
:alias) межпровайдерное переключение при сбое отключено — вы получите ошибку выбранного маршрута.
Повторные попытки с экспоненциальным backoff при 429 описаны в разделе Errors and limits.
Разбивка рейса — какой маршрут обслужил запрос
Для доверенных клиентов reveal/debug после завершения запроса (включая auto) доступны заголовки, показывающие, какой вариант public фактически выполнялся. Обычным клиентам эти данные не предоставляются.
Заголовки ответа для доверенных клиентов reveal/debug (chat / messages / responses)
| Параметр | Тип | Описание |
|---|---|---|
x-getvibe-route | string | Публичный псевдоним маршрута: yellow, codex, claude-code, … |
x-getvibe-model | string | Значение model для повторного закрепления: base или base:alias (например, gpt-6.1-sol:yellow). При явном закреплении оно соответствует вашему выбору. |
x-pv-generation-id | string | id записи истории (без стриминга). См. «Баланс и история». |
curl -sD - https://getvibeapi.com/v1/chat/completions \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-6.1-sol","messages":[{"role":"user","content":"ping"}],"max_tokens":8}' \
-o /dev/null | grep -i getvibe
# x-getvibe-route: yellow
# x-getvibe-model: gpt-6.1-sol:yellowИстория использования
В GET /v1/generations, GET /v1/usage и панели управления каждая запись содержит поля:
| Параметр | Тип | Описание |
|---|---|---|
model | string | Базовое имя модели (без внутренних суффиксов). |
route | string | null | Публичный :alias выигравшего маршрута. |
address_as | string | Точное значение для поля model при повторном закреплении (аналогично addressAs в каталоге). |
cost_detail | object | Как была рассчитана стоимость: строки по токенам с их ставкой за 1M (lines), надбавки (adjustments) и итог. Канал маркетплейса тарифицирует по ценовому уровню (ступени лестницы), продавец которого выполнил запрос, поэтому, когда он отличается от каталожной ставки, rateBasis равен "tier", строки показываются по ставке этой ступени и в сумме дают стоимость, а в tier указано название ставки. realisedRate {input, output} — это цена за 1M, по которой запрос был фактически протарифицирован; найдите её в ценовой лестнице модели (/api/model-ladder), чтобы увидеть, какая ступень его выполнила; minimumCharge равно true (а realisedRate — null), если вместо этого запрос был протарифицирован по минимальной стоимости за запрос. Передайте max_price, чтобы ограничить ступень сверху. |
model и cost_usd остаются скрытыми (кроме клиентов с исключением на раскрытие). Разбивка по провайдерам есть только в заголовках и истории, без поломки SDK.Ограничения
GetVibe не предоставляет «сырой» каскадный список вышестоящих провайдеров в теле запроса. Управление осуществляется через публичный :alias, стратегию ключа и автоматическое переключение при сбоях в рамках каталога моделей. Отдельного API «игнорировать провайдеров» или флагов маршрутизации ZDR нет.