400 invalid_request_error

400 invalid_request_error в Claude Fable 5

Либо в payload передан параметр, удалённый из Fable 5, либо настройка хранения данных вашей организации полностью блокирует модель.

Кратко за 30 секунд

Большинство ошибок 400 в Fable 5 вызваны параметрами, которые новые модели Claude больше не принимают: ненулевыми значениями temperature, top_p или top_k, prefill сообщения assistant, thinking с типом disabled и ручным extended thinking с budget_tokens. Другая группа ошибок 400 относится к организации: Fable 5 требует хранения данных 30 дней, и организация с меньшим сроком хранения получает 400 для каждого запроса независимо от payload.

Что вызывает 400 в Fable 5

Сначала прочитайте сообщение об ошибке. Оно называет проблемное поле, а для ошибок в блоках thinking ещё и позицию блока.

  • Предзаполненное сообщение assistant

    Модели Claude 4.6 и новее не поддерживают предзаполнение хода assistant. Если массив messages заканчивается сообщением assistant, возвращается 400 с указанием, что диалог должен заканчиваться сообщением user. Вместо этого используйте структурированные ответы, output_config.format или инструкции в системном промпте.

  • Срок хранения данных организации меньше 30 дней

    Fable 5 — Covered Model, для которой требуется хранение данных 30 дней; при нулевом хранении данных она недоступна. В Claude API запрос из организации с настройкой хранения, не отвечающей этому требованию, возвращает 400 invalid_request_error. Признак: одинаково завершается ошибкой каждый запрос, включая минимальный hello-world payload.

  • Блоки thinking, которые отредактировали или отфильтровали

    Если последнее сообщение assistant содержит блоки thinking или redacted_thinking, которые перед повторной отправкой были переставлены, отфильтрованы или собраны заново, запрос вернёт 400. Сообщение начинается с позиции проблемного блока, например messages.1.content.0.

  • temperature, top_p или top_k имеют значение, отличное от значения по умолчанию

    Установка любого из этих параметров в значение, отличное от значения по умолчанию, возвращает 400. Это не особенность Fable: правило действует с Claude Opus 4.7 и распространяется на Sonnet 5, Opus 5 и Fable 5. Типы запросов SDK по-прежнему содержат эти поля для совместимости со старыми моделями, поэтому код компилируется, но API отклоняет запрос на сервере.

  • Конфигурация thinking, которую Fable 5 не принимает

    Адаптивный thinking всегда включён. И thinking с типом disabled, и ручной extended thinking со значением budget_tokens возвращают 400. В ошибке для случая disabled предлагается thinking.type.enabled, но эта форма также отклоняется в Fable 5, поэтому нужно полностью убрать параметр thinking.

Исправляйте в таком порядке

Сначала проведите одну проверку: если минимальный запрос тоже не проходит, перестаньте отлаживать payload и проверьте настройку организации.

  1. 1

    3. Настройте хранение данных на уровне организации или рабочего пространства

    Если для организации действует нулевое хранение данных, вы всё равно можете включить хранение в течение 30 дней для одного рабочего пространства в разделе Privacy controls настроек рабочего пространства Console, оставив во всех остальных рабочих пространствах нулевое хранение. В противном случае обратитесь к менеджеру Anthropic, который ведёт ваш аккаунт.

  2. 2

    4. Передавайте блоки thinking обратно байт в байт

    При использовании инструментов возвращайте из хода assistant каждый блок thinking и redacted_thinking в точности полученным, включая блоки с пустым полем thinking. Если код фильтрует блоки content по типу перед повторной отправкой, добавьте оба типа блоков в список разрешённых.

  3. 3

    1. Отправьте минимальный запрос, чтобы отделить payload от аккаунта

    Отправьте однострочное сообщение user, указав только model и max_tokens. Если оно успешно, проблема в payload. Если оно завершается той же ошибкой 400, проблема в настройке хранения данных организации, и изменение payload не поможет.

  4. 4

    2. Удалите параметры, которые Fable 5 отклоняет

    Удалите из запроса temperature, top_p и top_k, а не устанавливайте им значения по умолчанию. Удалите весь объект thinking вместо попытки указать другой тип. Удалите завершающее сообщение assistant, используемое для prefill.

Всё-таки это не 400?

Если ответ — HTTP 200 с пустым массивом content, перед вами отказ классификатора, а не некорректный запрос. Для него требуется совершенно другая обработка.

Частые вопросы