Назад в блог

Начало работыИнструкция

Переход с OpenRouter на CheapTokens: base_url, ключ, id модели

Смените base_url, API-ключ и id модели в OpenAI SDK (Python и JavaScript), отправьте первый запрос и проверьте, что всё работает.

Автор: CheapTokens TeamОпубликовано 4 мин чтения

Обложка: перенос приложения на OpenAI SDK с OpenRouter на CheapTokens заменой base_url, ключа и id модели
Содержание
  1. Что именно меняется
  2. Код после переключения
  3. Проверьте, что работает
  4. Какая модель что заменяет
  5. Сколько стоит тот же трафик
  6. Если не работает
  7. Перед выкаткой

Ваше приложение уже ходит в OpenRouter через OpenAI SDK, а хочется, чтобы оно ходило в CheapTokens. Меняются три значения — base_url, API-ключ и id модели model — и удаляются два необязательных заголовка. Остальной код остаётся как был.

Ниже — точные строки для Python, JavaScript и curl, быстрая проверка, что переход сработал, и таблица: какая модель для какой задачи. Если вы ещё не отправляли запросов в CheapTokens, аккаунт и ключ разобраны в руководстве по первому запросу, а полный справочник — в документации.

Что именно меняется#

Быстрый старт OpenRouter (сверено 27 октября 2026) настраивает клиент OpenAI на базовый адрес https://openrouter.ai/api/v1 и называет модели в виде provider/model-name. CheapTokens говорит на том же формате OpenAI Chat Completions по адресу https://api.cheaptokens.dev/v1. Поэтому класс клиента, chat.completions.create и разбор ответа остаются на месте.

До и после: три значения, которые меняются при переходе с OpenRouter на CheapTokens
Три значения для замены. Ключ — в переменной окружения, не в коде.

По одной замене на строку:

  • базовый адрес — https://api.cheaptokens.dev/v1 вместо адреса OpenRouter;
  • API-ключ — ключ из вашего аккаунта CheapTokens, читаемый из переменной окружения;
  • id модели — полный id CheapTokens, например deepseek-ai/DeepSeek-V4-Flash-0731. Берите id из документации CheapTokens: у разных провайдеров одна и та же модель называется по-разному, а короткие id из меток цен не принимаются.

И одно удаление. Заголовки OpenRouter HTTP-Referer и X-OpenRouter-Title необязательны и нужны только для рейтингов OpenRouter. Уберите их из default_headers / defaultHeaders — здесь они не нужны.

Код после переключения#

Один и тот же запрос на трёх языках. Берите тот, на котором написано ваше приложение.

Код после переключения

Python

python
import os
from openai import OpenAI

client = OpenAI(
    base_url='https://api.cheaptokens.dev/v1',
    api_key=os.environ['CHEAPTOKENS_API_KEY'],
)

resp = client.chat.completions.create(
    model='deepseek-ai/DeepSeek-V4-Flash-0731',
    messages=[{'role': 'user', 'content': 'Reply with one word: ready'}],
    max_tokens=20,
)
print(resp.choices[0].message.content)

JavaScript

javascript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.cheaptokens.dev/v1',
  apiKey: process.env.CHEAPTOKENS_API_KEY,
});

const resp = await client.chat.completions.create({
  model: 'deepseek-ai/DeepSeek-V4-Flash-0731',
  messages: [{ role: 'user', content: 'Reply with one word: ready' }],
  max_tokens: 20,
});
console.log(resp.choices[0].message.content);

curl

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-ai/DeepSeek-V4-Flash-0731", "messages": [{"role": "user", "content": "Reply with one word: ready"}], "max_tokens": 20}'

Ещё одно перед запуском. Если в запросе есть поля только для OpenRouter — списки маршрутизации и запасных моделей, предпочтения провайдеров, id с ~-алиасами, — они относятся к OpenRouter. Оставьте в запросе стандартные поля Chat Completions: model, messages, temperature, max_tokens, stream.

Проверьте, что работает#

Ответа мало. Выведите рядом ещё три вещи: какая модель ответила, почему остановилась и сколько токенов записано в счёт.

python
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
Окружение и скрипт проверки в терминале
Один раз задайте ключ, запустите проверку и прочитайте model, finish_reason и usage.

finish_reason со значением stop значит, что модель закончила сама. length — ответ обрезан по max_tokens. usage показывает входные и выходные токены отдельно, и счёт складывается именно из этих двух чисел — тех же, что вы смотрели в OpenRouter.

Попробуйте самиПопробуйте: что покажет finish_reason, если поставить max_tokens равным 1?Показать ответ

Он покажет length — ответ обрезан по max_tokens. Это хороший способ проверить, что ваш код переживает обрезанный ответ.

Какая модель что заменяет#

Выбирайте модель по задаче, а не по названию, к которому вы привыкли в OpenRouter. Данные ниже — из прайса CheapTokens на 27 октября 2026; один баланс работает для всех трёх моделей, а цена не зависит от времени суток.

Модель id в model Контекст Макс. ответ
DeepSeek-V4-Flash deepseek-ai/DeepSeek-V4-Flash-0731 380K 32 768 токенов
GLM-5.3-Flash zai-org/GLM-5.3-Flash 390K 8 192 токена
MiniMax-M2.7 MiniMaxAI/MiniMax-M2.7 180K 8 192 токена

Не уверены, какая строка ваша? Отталкивайтесь от того, что делает приложение:

Выберите свой случай

Чем в основном занято ваше приложение?

Короткие частые запросы — классификация, извлечение данных, ответы поддержки

Попробуйте zai-org/GLM-5.3-Flash: контекст 390K, ответ до 8 192 токенов, а в сумме, с учётом входа и выхода, дешевле OpenRouter.

Длинные ответы, код, циклы агента

Попробуйте deepseek-ai/DeepSeek-V4-Flash-0731: ответ до 32 768 токенов, контекст 380K, одна цена в любое время суток.

Стабильная нагрузка, за которую вы сейчас платите по высокому тарифу OpenRouter

Попробуйте MiniMaxAI/MiniMax-M2.7: контекст 180K, ответ до 8 192 токенов, и в сумме выходит дешевле OpenRouter.

Сколько стоит тот же трафик#

Допустим, ваш бот отправляет 1 000 запросов, в каждом около 500 входных и 300 выходных токенов. Это допущение — подставьте свои числа из usage. Таблица ниже живая: наши цены и колонка OpenRouter берутся из текущего прайса, вход и выход считаются вместе.

Модель За запрос 1 000 запросов OpenRouter, 1 000 запросов
GLM-5.3-Flash $0.000022 $0.022 $0.0434
DeepSeek-V4-Flash $0.000038 $0.0375 $0.0708
MiniMax-M2.7 $0.00007 $0.07 $0.51

500 входных и 300 выходных токенов на запрос. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.

На DeepSeek-V4-Flash эти 1 000 запросов обойдутся в $0.0375. Полные цены — на странице цен; за что именно списывают, разобрано в статье входные и выходные токены.

Если не работает#

После переключения почти все проблемы сводятся к трём. Сопоставьте сообщение и причину:

Найдите пары

Сопоставьте симптом и причину

  • 401 UnauthorizedКлюч не задан, с опечаткой или всё ещё ключ OpenRouter
  • 404 Not FoundНеверный путь в базовом адресе или id модели не полный id CheapTokens
  • Ответ обрывается на полусловеmax_tokens меньше, чем нужно ответу; finish_reason показывает length

Статья про ошибки 401 и 404 разбирает каждую с точными текстами, а в материале что такое base_url объяснено, почему один лишний слэш ломает путь.

Перед выкаткой#

Чек-лист

Чек-лист переключения