Ошибка insufficient_quota в OpenAI API: причины и как её убрать
Ошибка insufficient_quota приходит с кодом 429, но это не rate limit, а деньги или лимит расходов. Разбираем причины, точные коды и обработку в Python.
5 мин · · ошибки · оплата
Ошибка insufficient_quota OpenAI приходит со статусом 429, и многие первым делом пытаются повторить запрос, как при обычном rate limit. Это не поможет: ошибка про деньги или лимит расходов, а не про скорость. Ниже — что именно значит insufficient_quota, как по коду ошибки найти точную причину, как обработать её в Python и как та же ситуация выглядит в шлюзе Zukko.
Что значит insufficient_quota в OpenAI
В документации OpenAI ошибки, связанные с оплатой и лимитами расходов, отдаются со статусом HTTP 429. Общий тип ошибки error.type при этом может быть insufficient_quota, а конкретную причину OpenAI советует смотреть в поле error.code. Классический текст сообщения — «You exceeded your current quota, please check your plan and billing details».
Структура ответа выглядит примерно так:
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details. ...",
"type": "insufficient_quota",
"code": "credit_balance_exhausted"
}
}Главное из документации: повтор таких запросов доступ не вернёт. Сначала нужно пополнить баланс или изменить лимит.
Почему возникает ошибка: коды из документации OpenAI
error.code | Причина | Как решить |
|---|---|---|
credit_balance_exhausted | Закончились предоплаченные кредиты организации | Пополнить кредиты в настройках оплаты |
organization_spend_limit_exceeded | Организация упёрлась в месячный лимит расходов, который вы сами задали | Поднять или снять лимит, либо дождаться сброса в новом месяце |
project_spend_limit_exceeded | Проект упёрся в свой месячный лимит; другие проекты продолжают работать | Поднять лимит в настройках проекта или дождаться сброса |
organization_usage_limit_exceeded | Организация достигла лимита использования, назначенного OpenAI | Запросить повышение лимита или написать в поддержку |
Ещё несколько частых бытовых причин:
- Подписка ChatGPT не даёт кредитов на API. ChatGPT и API оплачиваются отдельно, поэтому оплаченный ChatGPT Plus не спасает от insufficient_quota.
- Ключ не из того проекта. Ключ принадлежит проекту или организации без денег, а пополняли вы другую.
- Лимит проекта забыли. Деньги на счету есть, но проект упёрся в свой потолок.
Отличить эти случаи от обычного rate limit просто: rate limit проходит после паузы (OpenAI советует ждать не меньше, чем указано в заголовке Retry-After). У ошибок оплаты — коды из таблицы выше, и пауза ничего не меняет.
Как решить insufficient_quota: пошагово
- Посмотрите
error.code, а не только статус. Он сразу скажет, кончились ли кредиты или сработал лимит. - Проверьте, какой ключ использует код. Переменная окружения могла остаться от старого проекта.
- Проверьте баланс и лимиты организации и проекта в настройках оплаты OpenAI.
- Остановите повторы. В Python SDK OpenAI статус 429 превращается в
openai.RateLimitError, и SDK по умолчанию повторяет его два раза. Для ошибок оплаты это лишние запросы: ловите их отдельно и останавливайте задачу с понятным сообщением.
Аналог в Zukko: 402 и лимиты ключа
В шлюзе Zukko баланс один на все модели, в долларах. Ситуации из таблицы выглядят так:
| OpenAI | Zukko | Что делать |
|---|---|---|
429 credit_balance_exhausted | 402, код insufficient_balance | Пополнить баланс от $1 |
429 project_spend_limit_exceeded | 429 key_daily_limit_reached или key_monthly_limit_reached | Поднять лимит ключа в кабинете или дождаться сброса |
| 429 rate limit | 429 без этих кодов — ограничение у провайдера модели | Повтор с паузой |
Два отличия от OpenAI, которые стоит учесть в коде:
- Нехватка баланса — это 402, а не 429. Шлюз проверяет баланс до отправки запроса модели. В Python SDK OpenAI статус 402 приходит как общий
openai.APIStatusError, и SDK его не повторяет — лишних запросов не будет. - Лимиты задаются на ключ, а не на проект. У каждого ключа — дневной и месячный лимит в долларах и список разрешённых моделей. Отдельный ключ на каждый проект даёт ту же изоляцию, что project spend limit у OpenAI. Подробнее — в документации по лимитам ключей.
Пополнить баланс из России можно через СБП или картой РФ (в рублях по рыночному курсу на момент оплаты) либо криптовалютой. Пошагово — в статье об оплате через СБП. Остаток можно проверять заранее через API — см. справку по балансу.
На сколько хватит $5
Цены на 7 октября 2026. Возьмём запрос на 2 000 входных и 500 выходных токенов; формула: (2000 × вход + 500 × выход) / 1 000 000.
| Модель | Вход / выход, $ за 1M | Один запрос | Запросов на $5 |
|---|---|---|---|
deepseek-v4.1-flash | 0.013 / 0.038 | $0.000045 | около 111 111 |
gpt-6.1-sol | 0.27 / 1.32 | $0.0012 | около 4 166 |
claude-sonnet-5 | 0.4 / 2 | $0.0018 | около 2 777 |
Проверка второй строки: (2 000 × 0.27 + 500 × 1.32) / 1 000 000 = (540 + 660) / 1 000 000 = $0.0012; 5 / 0.0012 ≈ 4 166. Это пример расчёта: цены меняются, актуальный список и цены — GET https://api.zukko.pro/v1/models или страница «Модели» в кабинете.
Обработка ошибок оплаты в Python
Код ниже работает и с OpenAI напрямую, и через Zukko: он ловит ошибки оплаты по статусу, типу и коду, а временные ошибки оставляет встроенным повторам SDK. Учтите, что 429 от OpenAI SDK сначала сам повторит два раза и только потом отдаст исключение вашему коду; 402 от Zukko он не повторяет.
import openai
from openai import OpenAI
client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")
BILLING_CODES = {
# OpenAI
"insufficient_quota",
"credit_balance_exhausted",
"organization_spend_limit_exceeded",
"project_spend_limit_exceeded",
"organization_usage_limit_exceeded",
# Zukko
"insufficient_balance",Если вы переносите проект с OpenAI, меняются только base_url, ключ и имена моделей, остальной код остаётся прежним. Подробности — в статье о миграции с OpenAI API, а пошаговая замена ключа — в статье API-ключ OpenAI в России.
Чтобы попробовать, создайте ключ в кабинете, пополните баланс на удобную сумму и задайте ключу дневной лимит.
Частые вопросы
Пополнил баланс OpenAI, а insufficient_quota осталась. Почему?
Посмотрите error.code. Если там project_spend_limit_exceeded или organization_spend_limit_exceeded, дело в лимите расходов, а не в кредитах. Ещё проверьте, что ключ принадлежит тому проекту и организации, которые вы пополнили.
Даёт ли подписка ChatGPT Plus доступ к API?
Нет. ChatGPT и API оплачиваются отдельно, для API нужны свои кредиты.
Что вернёт Zukko, если баланс закончился?
Статус 402 с кодом insufficient_balance. Запрос до модели не доходит, повторять его до пополнения бессмысленно.
Почему у OpenAI это 429, а у Zukko 402?
Так решили сами сервисы. У OpenAI ошибки оплаты объединены с rate limit под 429 и различаются по коду, у Zukko нехватка баланса вынесена в отдельный статус 402, а 429 означает лимит ключа или ограничение провайдера.
zukko
Платите в 25×
меньше
за Claude Code & ChatGPT
Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.
Похожие статьи
- Your card was declined в OpenRouter: почему отклоняется картаРазбираем, из-за чего платёж картой может отклоняться на зарубежном сервисе, что проверить самому и как подключить модели, если оплата не проходит.
- Ключи OpenAI API в открытом доступе: почему ими нельзя пользоватьсяОткуда берутся «бесплатные» ключи на GitHub, почему пользоваться ими опасно и для вас, и для владельца, и как защитить собственный ключ от такой же утечки.
- Ошибки GLM API: почему не работает запрос и как это исправитьНеверный id модели, переполненный контекст 128K, ключ, баланс, лимиты: типичные причины ошибок GLM API и быстрый способ найти свою.
- This organization has been disabled в Claude API: что это и как продолжитьКлюч Anthropic внезапно отвечает «organization has been disabled». Объясняем, что это за ошибка, что проверить и как перенести SDK и Claude Code на другой провайдер.