Документация NeuroAPI
Надёжность

Ошибки и статусы

Справочник ошибок API NeuroAPI: HTTP-статусы, машинные коды, повторные попытки с backoff и стабильность.

Обрабатывайте HTTP-статус и машинный error.code, а не сравнивайте полный текст сообщения. Текст предназначен человеку и может уточняться.

{
  "error": {
    "message": "Безопасное описание ошибки",
    "type": "neuroapi_error",
    "code": "upstream_unavailable"
  }
}

Ошибки запроса — нужно действие с вашей стороны

HTTPКодТекст, который возвращает APIПричина и что делатьПовтор
400insufficient_user_quotaНедостаточно средств на балансе. Пополните баланс и повторите запрос.Пополните баланс в личном кабинете.Нет
400insufficient_company_quotaНедостаточно средств на балансе компании. Пополните баланс и повторите запрос.Пополните баланс компании.Нет
400pre_consume_token_quota_failedНедостаточно квоты API-ключа. Проверьте лимиты ключа или создайте новый.Проверьте лимит ключа или создайте новый ключ.Нет
400moderation_blockedЗапрос отклонён правилами безопасности. Переформулируйте его, уберите чувствительные данные или небезопасные инструкции и повторите попытку.Переформулируйте запрос. Внутренние коды content_filter, sensitive_words_detected и им подобные приводятся к этому же коду и тексту.Нет
400max_tokensНевозможно сгенерировать ответ. Увеличьте max_tokens и повторите запрос.Увеличьте max_tokens.Нет
400invalid_max_tokensПараметр ограничения ответа должен быть целым числом от 1 до N. Исправьте параметр и повторите запрос.Передайте целое число в допустимых пределах; N — актуальный лимит платформы, он подставляется в текст ответа.Нет
400invalid_tool_choiceПараметр tool_choice несовместим с переданными tools. Для auto/none без инструментов удалите tool_choice; для required или выбора функции добавьте соответствующий инструмент.Согласуйте tool_choice со списком tools.Нет
400no_candidatesМодель не смогла сформировать ответ для такого запроса. Смягчите или уточните формулировку и повторите попытку.Смягчите или уточните формулировку запроса.Нет
400invalid_image_inputНе удалось прочитать изображение. Проверьте формат файла и повторите запрос.Проверьте формат и целостность изображения.Нет
400invalid_text_request / invalid_embedding_request / invalid_responses_requestНе удалось обработать параметры запроса. Проверьте формат и повторите попытку.Сверьте тело запроса с документацией выбранного метода.Нет
400invalid_video_requestНе удалось обработать параметры видеозапроса. Проверьте длительность, разрешение и формат, затем повторите попытку.Проверьте длительность, разрешение и формат входных данных.Нет
400invalid_audio_request / count_audio_token_failedНе удалось прочитать аудиофайл: он повреждён или имеет неподдерживаемый формат. Проверьте файл или конвертируйте его в MP3/WAV и повторите запрос.Проверьте целостность аудиофайла (обрезанный файл даёт ошибку декодирования) или конвертируйте в MP3/WAV.Нет
400invalid_external_media / count_token_failed_file_url_fetchНе удалось получить файл по ссылке. Проверьте доступность ссылки или передайте файл как data URL в Base64.Убедитесь, что ссылка публичная и открывается без авторизации, либо передайте файл как Base64.Нет
400convert_request_failedНе удалось подготовить запрос для выбранной модели. Проверьте параметры и повторите попытку.Проверьте совместимость параметров с выбранной моделью.Нет
400unsupported_service_tierВыбранный режим обслуживания (service_tier) не поддерживается. Уберите параметр или выберите другой.Уберите параметр service_tier или выберите другой.Нет
400effective_request_unsupportedЗапрос в текущем виде не поддерживается. Упростите параметры и повторите попытку.Упростите набор параметров запроса.Нет
400context_length_exceededЗапрос превышает допустимую длину контекста. Сократите сообщения или выберите модель с большим контекстом.Сократите контекст или выберите модель с большим контекстом.Нет
400 / 404invalid_api_type / api_not_implementedЭтот метод API не поддерживается для выбранной модели.Используйте поддерживаемый метод API для выбранной модели.Нет
400count_token_failedНе удалось обработать содержимое запроса. Проверьте вложения и параметры, затем повторите попытку.Проверьте вложения и параметры запроса.Нет
400upstream_invalid_requestНе удалось обработать параметры запроса. Проверьте формат запроса и повторите попытку.Проверьте формат запроса; это также общий ответ на неизвестные ошибки 400/422.Нет

Временная недоступность — повторяйте с backoff

HTTPКодТекст, который возвращает APIПричина и что делатьПовтор
503upstream_unavailableВыбранная модель временно недоступна. Повторите попытку позже.Повторите с backoff: платформа уже перебрала доступные маршруты.Да
503upstream_unavailableСейчас слишком большая нагрузка, попробуйте позже.Внутренние коды rate_limit_exceeded, too_many_requests, upstream_quota_exhausted и temporarily_unavailable приводятся к этому же коду и тексту.Да
503upstream_model_unavailable / upstream_auth_rejected / upstream_api_format_incompatibleВыбранная модель временно недоступна. Повторите попытку позже.Временный сбой на стороне генерации; повторите позже.Да
503upstream_header_timeoutСервис временно недоступен. Повторите попытку позже.Маршрут не отдал первый ответ за адаптивный бюджет (p95 по модели). Платформа сама перебирает другие маршруты; получили этот финал — повторите с backoff. Не рвите соединение раньше времени: у моделей со скрытым рассуждением первый токен честно идёт минуты.Да
503do_request_failedСервис временно недоступен. Повторите попытку позже.Повторите с backoff.Да
502provider_result_unknownНе удалось доставить полный ответ. Списание за эту попытку отменено; повторите запрос.Списание за попытку отменено — безопасно повторить запрос.Да
503empty_stream_response / incomplete_upstream_stream / responses_stream_timeoutОтвет был прерван. Повторите запрос ещё раз.Поток ответа прерван; повторите запрос.Да
503invalid_upstream_response / invalid_response / bad_response_body / read_response_body_failed / unmarshal_response_body_failedСервис получил некорректный ответ. Повторите запрос позже.Повторите с backoff.Да
503channel_stream_queue_timeout и другие *_queue_timeout / *_capacity_exceededСервис перегружен. Повторите попытку позже.Очередь запросов переполнена; повторите с backoff и снизьте параллелизм.Да
503get_channel_failedСейчас слишком большая нагрузка, попробуйте позже.Повторите с backoff.Да
500internal_error / local_token_count_failedЧто-то пошло не так, попробуйте позже.Временная ошибка платформы; повторите с backoff.Да
503external_media_busy / external_media_unavailableСервис загрузки файлов временно перегружен. Повторите попытку через несколько секунд.Повторите через несколько секунд или передайте файл как Base64.Да
503local_tokenizer_busyСервис обработки запросов временно перегружен. Повторите попытку позже.Повторите с backoff.Да
503model_price_errorВыбранная модель временно недоступна. Повторите попытку позже.Повторите позже.Да
503context_limit_format_unsupported / count_tokens_channel_unsupportedЭта возможность временно недоступна для выбранной модели.Повторите позже или используйте другую модель.Да
500billing_settlement_pendingОтвет обработан, но учёт списания завершится автоматически. Списание за попытку не изменится.Учёт завершится автоматически; повтор запроса безопасен.Да
503video_create_result_unknown / video_task_persistence_failedСервис видеогенерации временно недоступен. Повторите попытку позже.Повторяйте POST, только если не получен ID задачи или HTTP 202.Да

Коды, которых нет в таблице, приводятся к ближайшему безопасному варианту по HTTP-статусу: 400/422 → upstream_invalid_request, 401/403/429 и 5xx → upstream_unavailable, всё остальное → internal_error.

Стабильность и перегрузки

Если вы часто видите 429/503 или ошибки перегрузки, проверьте тариф API-ключа: резервный маршрут и официальные каналы заметно снижают число сбоев.

Тариф «Смарт» (группа auto)

Сначала использует экономичный «Пилот», а при сбое делает ровно одну безопасную резервную попытку через «Оптимальный». Списание всегда идёт по группе успешной попытки, фиксированного коэффициента нет. Подходит большинству нагрузок: дешевле, когда всё стабильно, и живучее при перегрузках.

Тариф «Оптимальный» (группа plus)

Коммерческие официальные API-каналы — максимальная стабильность для продуктивных нагрузок, где важнее предсказуемость, чем экономия.

Переключение — в настройках API-ключа (группа токена). Ни один тариф не обещает ноль ошибок: резервный маршрут снижает число сбоев, но обрабатывать временные ошибки в коде всё равно нужно.

Когда повторять

Повторяйте только явно полученные временные 429/502/503/504. Ответ 429/503 означает, что платформа уже перебрала доступные маршруты, — делайте повтор с экспоненциальной задержкой, jitter и ограничением числа попыток, как в примере ниже. Запросы с hosted tools или генерацией изображений платформа может сознательно не повторять между маршрутами (защита от двойного списания) — в этом случае безопасно повторить тот же запрос со стороны клиента. Сетевой таймаут после отправки тела запроса может означать, что генерация уже началась: не повторяйте создающий POST вслепую.

Когда не повторять

400/422, цензура, неверные медиа и недостаток баланса требуют действия пользователя. Автоматический повтор только создаст лишнюю нагрузку.

Таймауты клиента

Не разрывайте соединение раньше времени — пока идёт ожидание, платформа сама перебирает маршруты, а у моделей со скрытым рассуждением (GPT-5.6, Claude) первый токен честно занимает минуты. Рекомендуемые таймауты на первый ответ: 120 секунд для лёгких моделей, 300 секунд для моделей с рассуждением, до 600 секунд для тяжёлых (Claude Opus, GPT-5.6 Sol), 360 секунд для генерации изображений. Клиент, отключающийся на 30–60 секундах, будет регулярно терять ответы, которые уже почти дошли.

const retryable = new Set([429, 502, 503, 504]);

async function requestWithBackoff(run: () => Promise<Response>) {
  for (let attempt = 0; attempt < 3; attempt += 1) {
    const response = await run();
    if (response.ok || !retryable.has(response.status)) return response;
    if (attempt === 2) return response;

    const retryAfter = Number(response.headers.get("retry-after"));
    const delay = Number.isFinite(retryAfter)
      ? retryAfter * 1000
      : 1000 * 2 ** attempt + Math.random() * 300;
    await new Promise((resolve) => setTimeout(resolve, delay));
  }
  throw new Error("unreachable");
}

Важно: для асинхронного видео действуют более строгие правила: если получен task ID или HTTP 202, повторять POST нельзя. Повторяйте только GET статуса или скачивания.

Медиа по внешней ссылке

Ссылка может быть недоступна, слишком медленна либо затронута сетевой фильтрацией и ТСПУ Роскомнадзора. Проверьте, что URL публичный и открывается без cookie/авторизации. Для небольших файлов надёжнее скачать их в приложении и передать Base64.

Информация: если запрос завершился ошибкой NeuroAPI или провайдера, стоимость успешной генерации не списывается. При спорном списании сохраните время, модель и request id и обратитесь в поддержку.

Полная таблица ошибок Alibaba Cloud, Images и Video →