Перейти к содержимому
NotHolyДокументация

Руководства

Ошибки

Формат ошибок, коды статуса и какие ошибки стоит повторять.

Открыть как Markdown

Ошибки приходят в формате того эндпоинта, который вы вызвали.

Форматы OpenAI:

JSON
{"error": {"message": "not enough credits for this request. Add credits in the console", "type": "insufficient_quota", "code": "insufficient_credits", "param": null, "request_id": "req_..."}}

Messages:

JSON
{"type": "error", "error": {"type": "rate_limit_error", "message": "too many requests per minute for this key"}, "request_id": "req_..."}
СтатусКодПовторять?Что делать
400invalid_request, unsupported_parameterНетИсправьте тело запроса
400context_length_exceededПосле сокращенияСм. Длина контекста
401invalid_api_keyНетПроверьте ключ
402insufficient_credits, key_budget_exceededНетПополните баланс или увеличьте бюджет ключа
403key_not_allowed, account_suspendedНетПроверьте модели и разрешённые IP ключа или напишите в поддержку
403consent_requiredНетСоздатель ключа не дал или отозвал согласие на обработку партнёрами в других странах. Принять его можно в консоли
404model_not_found, not_foundНетПроверьте ID
413request_too_largeНетОтправляйте меньше
429rate_limit_exceeded, concurrency_limit_exceeded, capacity_busyДаПодождите retry-after секунд
500internal_errorДа, с задержкойЕсли повторяется, сообщите x-request-id
502, 504upstream_error, upstream_timeoutДа, с задержкой
503model_unavailableДаПовторите с задержкой (retry-after задаётся, пока сервис перезапускается) или используйте другую модель

retry-after указывается в целых секундах, не больше 60.

Запрос, который упал до начала ответа, не оплачивается, а в разделе Активность он виден со статусом и кодом ошибки (до 30 упавших запросов на ключ в минуту). Если ответ оборвался на середине, вы платите за уже сгенерированные токены.

Длина контекста

Запрос, который не помещается в модель, возвращает 400. В форматах OpenAI код ошибки context_length_exceeded. В Messages тип invalid_request_error, сообщение то же. Если уже по оценке запрос намного больше лимита, он останавливается до обращения к модели:

Text
this request has about N tokens and MODEL accepts M; shorten it or compact the conversation

Иначе его отклоняет сама модель, обычно потому, что промпт вместе с лимитом вывода не помещается, и сообщение такое:

Text
this request is too large for MODEL, which accepts M tokens including the answer; shorten it or compact the conversation

В обоих случаях оплаты нет. N — это оценка. Лимит каждой модели указан как context_length в GET /v1/models.

API не сжимает переписку. Как и другие API, совместимые с OpenAI и Anthropic, он никогда не отбрасывает и не переписывает ваши сообщения, поэтому держать переписку в пределах лимита должен клиент. Удалите самые старые сообщения или замените их сводкой, не разделяйте вызов инструмента и его результаты и отправьте запрос снова. Агент в терминале делает это за вас.

Безопасные повторы

Для запросов без стриминга отправляйте заголовок Idempotency-Key. Повтор с тем же ключом в течение 24 часов возвращает первый ответ с x-notholy-idempotent-replay: true и повторно не оплачивается. Воспроизводятся только успешные ответы. Ответ хранится в памяти сервера, который его дал, и никогда на диске, поэтому повтор после перезапуска или на другом сервере выполняется заново и оплачивается.

curl
curl https://api.notholy.com/v1/chat/completions \
  -H "Authorization: Bearer $NOTHOLY_API_KEY" \
  -H "Idempotency-Key: report-42-summary" \
  -H "Content-Type: application/json" \
  -d '{"model": "notholy-specter", "messages": [{"role": "user", "content": "One-line summary of an open redirect."}]}'

Официальные SDK уже повторяют 429 и 5xx с задержкой.

Что дальше