Начало работыИнструкция
Переход с OpenRouter на CheapTokens: base_url, ключ, id модели
Смените base_url, API-ключ и id модели в OpenAI SDK (Python и JavaScript), отправьте первый запрос и проверьте, что всё работает.

Содержание
Ваше приложение уже ходит в OpenRouter через OpenAI SDK, а хочется, чтобы оно ходило в CheapTokens. Меняются три значения — base_url, API-ключ и id модели model — и удаляются два необязательных заголовка. Остальной код остаётся как был.
Ниже — точные строки для Python, JavaScript и curl, быстрая проверка, что переход сработал, и таблица: какая модель для какой задачи. Если вы ещё не отправляли запросов в CheapTokens, аккаунт и ключ разобраны в руководстве по первому запросу, а полный справочник — в документации.
Что именно меняется#
Быстрый старт OpenRouter (сверено 27 октября 2026) настраивает клиент OpenAI на базовый адрес https:/ и называет модели в виде provider/. CheapTokens говорит на том же формате OpenAI Chat Completions по адресу https:/. Поэтому класс клиента, chat. и разбор ответа остаются на месте.

По одной замене на строку:
- базовый адрес —
https:/вместо адреса OpenRouter;/ api. cheaptokens. dev/ v1 - API-ключ — ключ из вашего аккаунта CheapTokens, читаемый из переменной окружения;
- id модели — полный id CheapTokens, например
deepseek-. Берите id из документации CheapTokens: у разных провайдеров одна и та же модель называется по-разному, а короткие id из меток цен не принимаются.ai/ DeepSeek- V4- Flash- 0731
И одно удаление. Заголовки OpenRouter HTTP-Referer и X- необязательны и нужны только для рейтингов OpenRouter. Уберите их из default_headers / defaultHeaders — здесь они не нужны.
Код после переключения#
Один и тот же запрос на трёх языках. Берите тот, на котором написано ваше приложение.
Код после переключения
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
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
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.
Проверьте, что работает#
Ответа мало. Выведите рядом ещё три вещи: какая модель ответила, почему остановилась и сколько токенов записано в счёт.
print(resp.model)
print(resp.choices[0].finish_reason)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)
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- |
380K | 32 768 токенов |
| GLM-5.3-Flash | zai- |
390K | 8 192 токена |
| MiniMax-M2.7 | MiniMaxAI/ |
180K | 8 192 токена |
Не уверены, какая строка ваша? Отталкивайтесь от того, что делает приложение:
Выберите свой случай
Чем в основном занято ваше приложение?
Выберите вариант, чтобы увидеть ответ
Короткие частые запросы — классификация, извлечение данных, ответы поддержки
Попробуйте zai-: контекст 390K, ответ до 8 192 токенов, а в сумме, с учётом входа и выхода, дешевле OpenRouter.
Длинные ответы, код, циклы агента
Попробуйте deepseek-: ответ до 32 768 токенов, контекст 380K, одна цена в любое время суток.
Стабильная нагрузка, за которую вы сейчас платите по высокому тарифу OpenRouter
Попробуйте MiniMaxAI/: контекст 180K, ответ до 8 192 токенов, и в сумме выходит дешевле OpenRouter.
Сколько стоит тот же трафик#
Допустим, ваш бот отправляет 1 000 запросов, в каждом около 500 входных и 300 выходных токенов. Это допущение — подставьте свои числа из usage. Таблица ниже живая: наши цены и колонка OpenRouter берутся из текущего прайса, вход и выход считаются вместе.
| Модель | Вход $/1M | Выход $/1M | За запрос | 1 000 запросов | OpenRouter, 1 000 запросов |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000022 | $0.022 | $0.0434 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000038 | $0.0375 | $0.0708 |
| MiniMax-M2.7 | $0.05 | $0.15 | $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 объяснено, почему один лишний слэш ломает путь.
Перед выкаткой#
Чек-лист
Чек-лист переключения



