AI для початківцівПосібник
Помилка "Недостатньо токенів": що вона означає і як її виправити
Порожній баланс, обмеження швидкості, поганий ключ, занадто довгий запит або обірвана відповідь: зіставте свою помилку API з однією з п'яти причин, виконайте швидку перевірку, застосуйте виправлення.

На цій сторінці
"Недостатньо токенів" — це не одна помилка. Люди використовують цю фразу для п'яти різних проблем: баланс порожній, запити надходять занадто швидко, ключ неправильний, запит не вміщується в контекстне вікно моделі, або відповідь досягла ліміту виводу й обірвалася на півслові. Кожна має своє виправлення, і найшвидший спосіб їх розрізнити — це HTTP-статус і тіло помилки, а не формулювання повідомлення.
Знайдіть свій симптом у таблиці, виконайте перевірку, застосуйте виправлення.
Прокрутіть таблицю праворуч →
| Що ви бачите | Ймовірна причина | Перевірка | Виправлення |
|---|---|---|---|
| Запит відхилено; у повідомленні згадується баланс, білінг або кредит | Баланс порожній | Відкрийте свій акаунт і подивіться на баланс | Поповніть баланс, повторіть спробу |
| Працює, потім збої серіями, минає після паузи | Обмеження швидкості: занадто багато запитів одночасно або за хвилину | Чи проходить той самий запит після хвилинного очікування? Чи надсилаєте ви запити паралельно? | Уповільніться, повторіть спробу зі зростаючою затримкою |
| Кожен запит збоїть одразу, навіть однорядковий запит | Неправильний, прострочений або з помилкою в написанні ключ, або неправильна базова URL-адреса | Порівняйте ключ у вашому коді з ключем у вашому акаунті; перевірте URL-адресу | Вставте свіжий ключ, не зберігайте його у вихідному коді |
| Короткі запити працюють, довгі — ні | Запит плюс історія перевищують контекстне вікно | Оцініть розмір усього, що ви надсилаєте | Скоротіть або підсумуйте історію, розділіть документ або виберіть модель із більшим вікном |
| Помилки немає, але відповідь обривається на півслові | Відповідь досягла ліміту виводу | finish_reason дорівнює "length" |
Збільште max_tokens до ліміту моделі, попросіть коротший формат або попросіть продовжити |
Три значення слова "токени"#
Слово в повідомленні про помилку вказує на три різні величини.
- Баланс. Токени — це те, за що ви платите, тому "закінчилися токени" часто означає "закінчилися гроші". На передплатному сервісі це баланс.
- Ліміт за хвилину. Ліміти можуть рахуватися в запитах або в токенах за хвилину. Якщо ви досягли одного, виправлення — зачекати й надсилати менше за раз.
- Розмір вікна. Контекстне вікно — це скільки токенів модель може прочитати за один запит, ваш запит і його відповідь разом.
І одне, чого це слово ніколи не означає: API-ключ — це не запас токенів. Ключ ідентифікує ваш акаунт. Закінчується баланс за ним або ліміт, прив'язаний до нього. Якщо ви новачок у самій одиниці, почніть з Що таке токен в AI?.
1. Баланс порожній#
Документація API DeepSeek описує HTTP 402 Insufficient Balance як "У вас закінчився баланс". API Claude використовує 402 billing_error для проблем із білінгом і оплатою. Різні назви, та сама ситуація: гроші закінчилися.
CheapTokens працює за тим самим принципом: передплатний баланс, оплата за фактом використання, один баланс для всіх моделей. Тож коли щось ламається, спершу подивіться на баланс. Це перевірка на десять секунд, і вона виключає найпоширенішу причину.
2. Ви досягли обмеження швидкості#
DeepSeek документує HTTP 429 Rate Limit Reached як занадто швидкі запити або перевищення ліміту паралельності чи QPS. Виправлення — задати темп: менше паралельних запитів і затримка повтору, що зростає (1 с, 2 с, 4 с), замість бомбардування ендпоінта.
Одна пастка. API Claude також повертає 429 rate_limit_error, коли ви досягаєте місячного ліміту витрат вашого рівня, і ця відповідь не має заголовка retry-after. Тож 429, який ніколи не минає після очікування, може стосуватися грошей, а не швидкості. Якщо очікування не допомагає, поверніться до причини 1.
3. Ключ неправильний#
HTTP 401 — це проблема з ключем в обох документаціях: DeepSeek вказує його як неправильний API-ключ, Claude — як authentication_. Звичайні причини — зайвий пробіл або новий рядок, скопійований разом із ключем, ключ, який було видалено або перегенеровано, і ключ, надісланий на неправильну адресу. Ключ від одного сервісу не працює за URL-адресою іншого сервісу. Для CheapTokens базова URL-адреса — https:/.
Про інші помилки, які можуть виникнути під час підключення, дивіться Поширені помилки підключення та як їх виправити.
4. Запит не вміщується в контекстне вікно#
Контекстне вікно враховує все, що модель читає за один запит: системний запит, усю історію розмови, ваше нове повідомлення й місце для відповіді. На CheapTokens вікна моделей у нашому каталозі такі:
Прокрутіть таблицю праворуч →
| Модель | Контекстне вікно | Максимальний вивід за відповідь |
|---|---|---|
| DeepSeek-V4-Flash | 380K | 32 768 токенів |
| GLM-5.3-Flash | 390K | 8 192 токени |
| MiniMax-M2.7 | 200K | 8 192 токени |
Чат не має власної пам'яті. Клієнт надсилає всю історію знову з кожним запитом, тому кожен запит більший за попередній. Ось вигаданий чат, щоб показати зростання (округлі числа, для ілюстрації): системний запит на 1 000 токенів, і кожен хід додає близько 500 токенів питання і 1 500 токенів відповіді, разом 2 000.
1 000 + 30 × 2 000 = 61 000 токенів
Це розмір історії після 30 ходів. Кожен із цих токенів знову зараховується як вхідний у наступному запиті. 31-й запит несе цю історію на 61 000 токенів плюс нове питання на 500 токенів, тож його вхід — 61 500 токенів. З відповіддю на 1 500 токенів на MiniMax-M2.7 це коштує $0.0033. Ось усі три моделі для того самого запиту, з ціною OpenRouter для порівняння:
| Модель | Вхід $/1М | Вихід $/1М | Вартість | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0013 | $0.0027 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0011 | $0.0032 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0033 | $0.0203 |
61 500 вхідних і 1 500 вихідних токенів загалом. Ціни за 1 млн токенів актуальні та змінюються разом із нашими тарифами; стовпець OpenRouter показує довідкові ціни для того самого навантаження.
Той самий чат заповнює найменше вікно приблизно за сто ходів:
(200 000 − 1 000) / 2 000 = 99,5
Коли воно переповнюється, провайдер відхиляє запит. Код статусу залежить від провайдера, тому читайте тіло помилки. Наприклад, 413 request_ у Claude стосується розміру запиту в байтах (32 МБ для Messages), це інший ліміт, ніж токенне вікно.
Що робити:
- Відкиньте найстаріші ходи або замініть їх коротким підсумком.
- Не вставляйте весь документ, коли завданню потрібен один розділ.
- Перейдіть на модель із більшим вікном, якщо вам справді потрібен повний текст.
5. Відповідь обірвано#
Тут немає помилки, і саме це робить цей випадок заплутаним. Модель просто зупинилася, бо досягла max_tokens або власного ліміту виводу моделі. У форматі Chat Completions ознака — finish_ у виборі.
На CheapTokens DeepSeek-V4-Flash може повертати до 32 768 токенів за відповідь; GLM-5.3-Flash і MiniMax-M2.7 — до 8 192. Якщо ваш max_tokens нижчий за це, збільште його. Якщо ви вже на ліміті, розділіть роботу ("напиши частину 1 з 3") або попросіть модель продовжити з останнього речення.
Вивід MiniMax-M2.7 коштує $0.15 за 1M токенів, і це дешевше, ніж на OpenRouter за вивід.
Та сама проблема під різними назвами#
Провайдери позначають ті самі причини по-різному. Ось що каже їхня документація станом на 20 жовтня 2026 року:
Прокрутіть таблицю праворуч →
| Проблема | API DeepSeek | API Claude |
|---|---|---|
| Баланс порожній | 402 Insufficient Balance |
402 billing_error |
| Обмеження швидкості | 429 Rate Limit Reached |
429 rate_limit_error (також місячний ліміт витрат рівня) |
| Поганий ключ | 401 | 401 authentication_ |
| Запит занадто великий | не вказано як окремий код | 413 request_ (байти, не токени) |
| Ліміт витрат, який ви встановили самі | не вказано | 400 invalid_ |
Джерела: Коди помилок DeepSeek, Помилки API Claude. Жодна сторінка не показує дату публікації, тож дата перевірки — наша.
Висновок: не вгадуйте за формулюванням. Помилки повертаються як JSON з об'єктом error, що містить type і message. Зіставляйте за статусом і типом, бо текст повідомлення змінюється.
Подивіться, що насправді повертається#
Цей фрагмент виводить статус і тіло невдалого запиту та finish_reason успішного. Це діагностичний начерк, а не журнал тестів: запустіть його зі своїм ключем і прочитайте, що отримаєте.
# Placeholders: YOUR_API_KEY, MODEL_ID (a model id you have access to)
from openai import OpenAI, APIStatusError
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.cheaptokens.dev/v1")
try:
r = client.chat.completions.create(
model="MODEL_ID",
messages=[{"role": "user", "content": "Write a long checklist."}],
max_tokens=1000,
)
except APIStatusError as e:
# Read the status and the body, not the wording of the message
print("status:", e.status_code)
print("body:", e.body)
else:
print("finish_reason:", r.choices[0].finish_reason) # "length" = cut off
print("usage:", r.usage) # prompt_tokens and completion_tokensЯкщо перевірка вказує на баланс#
Поповніть баланс і надішліть запит знову. Ціни на CheapTokens фіксовані для кожної моделі, немає пікових годин, і один баланс покриває всі моделі, тож вам не потрібне окреме поповнення для кожної. Поточні тарифи тут:
| Модель | Контекст | Вхід $/1М | Вихід $/1М | OpenRouter вхід | OpenRouter вихід |
|---|---|---|---|---|---|
| GLM-5.3-Flash reasoning | 390K | $0.02 | $0.04 | $0.0413 | $0.0758 |
| DeepSeek-V4-Flash | 380K | $0.015 | $0.10 | $0.0475 | $0.1568 |
| MiniMax-M2.7 | 180K | $0.05 | $0.15 | $0.30 | $1.20 |
Ціни в USD за 1 млн токенів. Показники OpenRouter наведено для порівняння, вони можуть змінюватися.
Підставте свій обсяг у таблицю витрат, перш ніж поповнювати. Поповніть свій баланс, коли цифри виглядають правильно, а якщо ви хочете спершу оцінити більше навантаження, дивіться Як оцінити вартість AI-агента.



