Назад до блогу

Початок роботиПосібник

Перехід з OpenRouter на CheapTokens: base_url, ключ, ідентифікатор моделі

Змініть base_url, ключ API та ідентифікатор моделі в OpenAI SDK (Python і JavaScript), надішліть перший запит і перевірте, що він спрацював.

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

Обкладинка: перехід застосунку на OpenAI SDK з OpenRouter на CheapTokens шляхом зміни base_url, ключа та ідентифікатора моделі
На цій сторінці
  1. Що насправді змінюється
  2. Код після перемикання
  3. Перевірте, що це спрацювало
  4. Яка модель що замінює
  5. Скільки коштує той самий трафік
  6. Якщо не працює
  7. Перед релізом

Ваш застосунок уже звертається до OpenRouter через OpenAI SDK, і ви хочете, щоб він звертався до CheapTokens. Ви змінюєте три значення — base_url, ключ API та ідентифікатор model — і видаляєте два необов'язкові заголовки. Решта коду залишається як є.

Нижче — точні рядки для Python, JavaScript і curl, швидкий спосіб переконатися, що перемикання спрацювало, і таблиця, яка модель підходить для якої задачі. Якщо ви ніколи не надсилали запит до CheapTokens, посібник із першого запиту до API охоплює акаунт і ключ; у документації є повний довідник.

Що насправді змінюється#

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

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

Це одна заміна на рядок:

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

І одне видалення. Заголовки 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 — списки маршрутизації чи резервних варіантів, налаштування провайдера, ідентифікатори моделей ~alias — вони належать 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; один баланс покриває всі три моделі, і ціна не змінюється залежно від часу доби.

Модель Ідентифікатор 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 вихідних токенів на запит. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.

На DeepSeek-V4-Flash ці 1 000 запитів коштують $0.0375. Повні ціни — на сторінці цін; про те, за що ви платите, — у вхідні проти вихідних токенів.

Якщо не працює#

Після перемикання три помилки охоплюють більшість проблем. Зіставте повідомлення з причиною:

З'єднайте пари

Зіставте кожен симптом із його причиною

  • 401 UnauthorizedКлюч відсутній, введений з помилкою або досі від OpenRouter
  • 404 Not FoundШлях базової URL-адреси неправильний або ідентифікатор моделі не є повним ідентифікатором CheapTokens
  • Відповідь обірвана посеред реченняmax_tokens менший, ніж потрібно для відповіді; finish_reason каже length

Стаття про усунення несправностей 401 і 404 проходить кожну з точними повідомленнями, а що таке base_url пояснює, чому один неправильний слеш ламає шлях.

Перед релізом#

Чек-лист

Контрольний список перемикання