ЦАРЬ РОУТЕР

Быстрый старт

ЦАРЬ РОУТЕР - агрегатор российских и open-source нейросетей с единым OpenAI-совместимым API. Один ключ, один формат: меняете base_url - и весь код на OpenAI SDK работает без изменений. Не нужно регистрироваться в Yandex Cloud, Cloud.ru, GigaChat или MWS - ЦАРЬ РОУТЕР берёт это на себя.

Информация

  1. При ответе 429 (превышен лимит) подождите столько секунд, сколько указано в заголовке Retry-After, и повторите запрос - пример в разделе 5. Если 429 мешает постоянно или возникают другие ошибки, напишите нам на support@tsarrouter.ru.
  2. Действуют лимиты запросов по уровням - подробнее на странице Лимиты.
  3. На странице Истории изменений можно узнать какие модели добавились/изменились/удалились и другие изменения сервиса.

Спасибо, желаем удачного использования!

1. Базовый URL

https://api.tsarrouter.ru/v1

Это адрес, который вы подставляете вместо base_url OpenAI. Все эндпоинты совместимы с форматом OpenAI.

2. Ключ

Зарегистрируйтесь в личном кабинете и создайте API-ключ. Формат: sk-tsar- + 40 hex-символов. Ключ типа «Вызов моделей» открывает доступ ко всем моделям всех провайдеров. Второй тип, «Просмотр баланса», только показывает баланс аккаунта - см. «Ключи и доступ».

Передавайте ключ в заголовке Authorization:

Authorization: Bearer sk-tsar-ваш-ключ

3. Первый запрос

from openai import OpenAI

client = OpenAI(
    base_url="https://api.tsarrouter.ru/v1",
    api_key="sk-tsar-ваш-ключ",
)

response = client.chat.completions.create(
    model="yandex/yandexgpt-pro-5.1",
    messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.tsarrouter.ru/v1",
  apiKey: "sk-tsar-ваш-ключ",
});

const response = await client.chat.completions.create({
  model: "sber/gigachat-2-max",
  messages: [{ role: "user", content: "Привет!" }],
});
console.log(response.choices[0].message.content);
curl https://api.tsarrouter.ru/v1/chat/completions \
 -H "Authorization: Bearer sk-tsar-ваш-ключ" \
 -H "Content-Type: application/json" \
 -d '{
    "model": "yandex/yandexgpt-pro-5.1",
    "messages": [{"role": "user", "content": "Привет!"}]
  }'

4. Названия моделей

Все модели используют формат provider/model: yandex/yandexgpt-pro-5.1, sber/gigachat-2-max, BAAI/bge-m3.

Регистр имеет значение. sber/gigachat-2-max ≠ Sber/gigachat-2-max.

Актуальный каталог моделей с ценами - на странице "Модели". Список моделей с ценами (pricing_rub, см. справочник) можно получить и запросом:

from openai import OpenAI

client = OpenAI(
    base_url="https://api.tsarrouter.ru/v1",
    api_key="sk-tsar-ваш-ключ",
)

models = client.models.list()
for model in models.data:
    print(model.id)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.tsarrouter.ru/v1",
  apiKey: "sk-tsar-ваш-ключ",
});

const models = await client.models.list();
for (const model of models.data) {
  console.log(model.id);
}
curl https://api.tsarrouter.ru/v1/models \
 -H "Authorization: Bearer sk-tsar-ваш-ключ"

5. Если пришёл 429

Ответ 429 значит, что превышен лимит запросов (см. «Лимиты»). В заголовке Retry-After - сколько секунд подождать перед повтором:

import os
import time
import requests

def create_with_retry(payload, attempts=5):
    for _ in range(attempts):
        r = requests.post(
            "https://api.tsarrouter.ru/v1/chat/completions",
            headers={"Authorization": f"Bearer {os.environ['TSARROUTER_KEY']}"},
            json=payload,
        )
        if r.status_code != 429:
            r.raise_for_status()
            return r.json()
        time.sleep(int(r.headers.get("Retry-After", "5")))
    r.raise_for_status()
async function createWithRetry(payload: object, attempts = 5) {
  for (let i = 1; ; i++) {
    const r = await fetch("https://api.tsarrouter.ru/v1/chat/completions", {
      method: "POST",
      headers: {
        Authorization: `Bearer ${process.env.TSARROUTER_KEY}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify(payload),
    });
    if (r.status !== 429 || i === attempts) {
      if (!r.ok) throw new Error(`HTTP ${r.status}: ${await r.text()}`);
      return r.json();
    }
    const wait = Number(r.headers.get("Retry-After") ?? 5);
    await new Promise((resolve) => setTimeout(resolve, wait * 1000));
  }
}

Официальные SDK OpenAI повторяют 429 сами: по умолчанию 2 раза, с учётом Retry-After. Число попыток задаётся параметром клиента - max_retries в Python, maxRetries в TypeScript.

Если 429 приходит постоянно, напишите на support@tsarrouter.ru.

На этой странице

Редактировать на GitVerse