Как пользоваться
OpenAI-совместимый шлюз. Клиенту нужен один base URL и ключ, выписанный в админке. Дальше модель выбирается строкой provider/name.
Старт
- В админке выпишите ключ клиента — он выглядит как sk-mr-… и показывается один раз.
- Base URL: https://router.kabak.top/v1
- Заголовок: Authorization: Bearer sk-mr-…
GET https://router.kabak.top/health не требует ключа и отвечает {"status":"ok"}.
Эндпоинты
| Метод | Путь | |
|---|---|---|
| GET | /health | живо ли приложение |
| GET | /v1/models | список моделей и алиасов, нужен ключ |
| POST | /v1/chat/completions | чат, в том числе stream: true |
| POST | /v1/embeddings | векторы, обычно через OpenRouter |
Тело чата — как у OpenAI Chat Completions: model, messages, опционально temperature, max_tokens, tools и остальное, что понимает апстрим.
Эмбеддинги — как у OpenAI Embeddings: model, input (строка или массив строк). Если model не передан, берётся алиас embed.
Модели
Формат: провайдер/модель. Для OpenRouter всё после первого / уходит апстриму как есть: openrouter/openai/text-embedding-3-small → провайдер openrouter, модель openai/text-embedding-3-small.
Чат
| Запрос | Провайдер | У апстрима |
|---|---|---|
| openai/gpt-4o | openai | gpt-4o |
| openai/gpt-4o-mini | openai | gpt-4o-mini |
| openai/gpt-4.1 | openai | gpt-4.1 |
| openai/gpt-4.1-mini | openai | gpt-4.1-mini |
| deepseek/deepseek-chat | deepseek | deepseek-chat |
| deepseek/deepseek-reasoner | deepseek | deepseek-reasoner |
| qwen/qwen-plus | qwen | qwen-plus |
| qwen/qwen-turbo | qwen | qwen-turbo |
| qwen/qwen-max | qwen | qwen-max |
| openrouter/openai/gpt-4o-mini | openrouter | openai/gpt-4o-mini |
| openrouter/anthropic/claude-3.5-sonnet | openrouter | anthropic/claude-3.5-sonnet |
| openrouter/google/gemini-2.0-flash-001 | openrouter | google/gemini-2.0-flash-001 |
Эмбеддинги
| Запрос | Провайдер | У апстрима |
|---|---|---|
| openai/text-embedding-3-small | openai | text-embedding-3-small |
| openai/text-embedding-3-large | openai | text-embedding-3-large |
| openrouter/openai/text-embedding-3-small | openrouter | openai/text-embedding-3-small |
| openrouter/openai/text-embedding-3-large | openrouter | openai/text-embedding-3-large |
| openrouter/qwen/qwen3-embedding-8b | openrouter | qwen/qwen3-embedding-8b |
Каталог не жёсткий: любой id вида openrouter/… уйдёт в OpenRouter, даже если его нет в таблице.
Короткие алиасы. В чате без model берётся cheap; в эмбеддингах — embed.
| Алиас | Модель |
|---|---|
| cheap | deepseek/deepseek-chat |
| gpt | openai/gpt-4o-mini |
| qwen | qwen/qwen-plus |
| embed | openrouter/openai/text-embedding-3-small |
| default | openrouter/openai/gpt-4o-mini |
В списке /v1/models будут только те провайдеры, для которых в админке есть рабочий ключ.
curl
curl https://router.kabak.top/v1/chat/completions \
-H "Authorization: Bearer sk-mr-…" \
-H "Content-Type: application/json" \
-d '{
"model": "cheap",
"messages": [{"role": "user", "content": "привет"}]
}'
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://router.kabak.top/v1",
api_key="sk-mr-…",
)
resp = client.chat.completions.create(
model="cheap",
messages=[{"role": "user", "content": "привет"}],
)
print(resp.choices[0].message.content)
Эмбеддинги
Тот же ключ и https://router.kabak.top/v1. Эндпоинт POST /v1/embeddings, тело как у OpenAI: model, input (строка или массив), опционально dimensions и encoding_format. Расход пишется в админку (входные токены).
Через OpenRouter модель — openrouter/<id у OpenRouter>. Алиас embed = openrouter/openai/text-embedding-3-small.
curl https://router.kabak.top/v1/embeddings \
-H "Authorization: Bearer sk-mr-…" \
-H "Content-Type: application/json" \
-d '{
"model": "embed",
"input": "привет"
}'
vec = client.embeddings.create(
model="openrouter/openai/text-embedding-3-small",
input=["привет", "как дела"],
)
print(len(vec.data[0].embedding))
Другие частые id: openrouter/openai/text-embedding-3-large, openrouter/qwen/qwen3-embedding-8b. Напрямую в OpenAI, минуя OpenRouter: openai/text-embedding-3-small.
Cursor
- Settings → Models
- OpenAI API Base URL: https://router.kabak.top/v1
- API Key: ключ sk-mr-…
- Override OpenAI Base URL: включить
- Модель: cheap, gpt или полный id вроде openrouter/anthropic/claude-3.5-sonnet
Стрим
Передайте "stream": true. Ответ — SSE, как у OpenAI, заканчивается data: [DONE].
stream = client.chat.completions.create(
model="gpt",
messages=[{"role": "user", "content": "привет"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)