Ошибка 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».

Структура ответа выглядит примерно так:

bash
{
  "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: пошагово

  1. Посмотрите error.code, а не только статус. Он сразу скажет, кончились ли кредиты или сработал лимит.
  2. Проверьте, какой ключ использует код. Переменная окружения могла остаться от старого проекта.
  3. Проверьте баланс и лимиты организации и проекта в настройках оплаты OpenAI.
  4. Остановите повторы. В Python SDK OpenAI статус 429 превращается в openai.RateLimitError, и SDK по умолчанию повторяет его два раза. Для ошибок оплаты это лишние запросы: ловите их отдельно и останавливайте задачу с понятным сообщением.

Аналог в Zukko: 402 и лимиты ключа

В шлюзе Zukko баланс один на все модели, в долларах. Ситуации из таблицы выглядят так:

OpenAIZukkoЧто делать
429 credit_balance_exhausted402, код insufficient_balanceПополнить баланс от $1
429 project_spend_limit_exceeded429 key_daily_limit_reached или key_monthly_limit_reachedПоднять лимит ключа в кабинете или дождаться сброса
429 rate limit429 без этих кодов — ограничение у провайдера моделиПовтор с паузой

Два отличия от 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-flash0.013 / 0.038$0.000045около 111 111
gpt-6.1-sol0.27 / 1.32$0.0012около 4 166
claude-sonnet-50.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 он не повторяет.

bash
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.

insufficient_quota OpenAI: что значит ошибка и как решить · Zukko