Документация 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: платформа уже перебрала доступные маршруты.Да
502upstream_empty_responseПровайдер вернул пустой ответ, хотя токены были израсходованы. Повторите попытку позже.Повторите с 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Не удалось подтвердить результат запроса. Проверьте его состояние перед повторной отправкой.Работа могла начаться. Если есть ID задачи, проверяйте её состояние; иначе обратитесь в поддержку. Резерв может сохраняться до подтверждения результата.Не автоматически
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)

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

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

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

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

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

Повторяйте временные ошибки только когда операция безопасна для повтора. Одного статуса 429/502/503/504 недостаточно: он не доказывает, что генерация не началась или что списание отменено. Для безопасных повторов используйте экспоненциальную задержку, jitter и ограничение числа попыток.

Запросы с hosted tools, сохранённым состоянием или генерацией изображений могут продолжать выполняться после потери соединения. Если платформа не повторила такой запрос из-за неизвестного результата, повтор со стороны клиента также может создать вторую платную работу. При provider_result_unknown или сетевом таймауте после отправки не повторяйте создающий POST автоматически. Если получили ID задачи, проверяйте её через GET; если ID нет, сохраните request id и обратитесь в поддержку.

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

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]);

// Только чтение состояния: эта функция не отправляет повторные POST.
async function getWithBackoff(url: string, headers: HeadersInit) {
  for (let attempt = 0; attempt < 3; attempt += 1) {
    const response = await fetch(url, { method: "GET", headers });
    if (response.ok || !retryable.has(response.status)) return response;
    if (attempt === 2) return response;

    const rawRetryAfter = response.headers.get("retry-after");
    const retryAfter = rawRetryAfter?.trim()
      ? (/^\d+$/.test(rawRetryAfter.trim())
        ? Number(rawRetryAfter)
        : (Date.parse(rawRetryAfter) - Date.now()) / 1000)
      : NaN;
    const delay = Number.isFinite(retryAfter) && retryAfter >= 0
      ? retryAfter * 1000 + Math.random() * 300
      : 1000 * 2 ** attempt + Math.random() * 300;
    if (delay > 30_000) return response;
    await response.body?.cancel();
    await new Promise((resolve) => setTimeout(resolve, delay));
  }
  throw new Error("unreachable");
}

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

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

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

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

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