Claude Opus 5.5 API: первый запрос и исправление ошибок 400
Создайте API Key BetterToken, отправьте минимальный запрос к Claude Opus 5.5 и по шагам устраните ошибки 400 из-за Model ID, max_tokens, thinking и tool_choice.
Содержание
Даже с рабочим API Key первый запрос к Claude Opus 5.5 может завершиться 400 Bad Request. Проверьте точный Model ID, обязательные поля Messages API, включая max_tokens, настройки thinking и tool_choice. Отсутствие max_tokens — общая ошибка валидации Messages, а не новое ограничение Opus 5.5; при миграции именно этой модели меняются правила thinking и принудительного выбора инструмента.
Ниже сначала приведён минимальный запрос, затем — порядок проверки ошибок 400. Обязательные поля сверяйте с документацией Messages API, а изменения Opus 5.5 — с руководством по миграции Anthropic. Один раз выполните минимальный запрос, чтобы проверить соединение и маршрут модели; если он завершится ошибкой, разбирайте полученное тело ответа по пунктам. Перед вызовом claude-opus-5-5 через BetterToken также проверьте в день публикации или запуска, что точный Model ID есть в текущем каталоге.
1. Сначала проверьте API Key, Base URL и Model ID
Для первого запроса нужны только три значения: ваш собственный BetterToken API Key, Anthropic-compatible Base URL и доступный сейчас Model ID.
- Войдите в BetterToken Workspace и создайте API Key в своём аккаунте. Храните его в менеджере секретов или локальном файле окружения; не добавляйте ключ в Git и не отправляйте его в поддержку.
- Откройте актуальный каталог моделей и цен и убедитесь, что точный ID
claude-opus-5-5доступен. Anthropic использует фиксированный ID без суффикса с датой, но доступность и цена в BetterToken являются динамическими. - Передайте ключ через переменную окружения, а не через жёстко записанное значение в коде.
Для создания API Key нужен собственный аккаунт BetterToken. Создать аккаунт BetterToken
Скриншоты шагов в интерфейсе есть в BetterToken Quickstart.
2. В Base URL нет /v1, но в исходном HTTP-пути есть /v1/messages
Для Anthropic SDK используйте https://bettertoken.ai как Base URL, а для прямого Messages-запроса — https://www.bettertoken.ai/v1/messages.
https://bettertoken.ai
Не используйте /messages как Base URL и не добавляйте /v1/messages повторно, если SDK уже формирует путь ресурса. Задайте три переменные в текущей shell-сессии:
read -rs ANTHROPIC_API_KEY && export ANTHROPIC_API_KEY
export ANTHROPIC_BASE_URL="https://bettertoken.ai"
export CLAUDE_MODEL_ID="claude-opus-5-5"
Сначала выполните только первую строку. Терминал перейдёт в режим скрытого ввода: введите или вставьте API Key и нажмите Enter — символы не отображаются. Ключ экспортируется только в текущую shell-сессию, а в истории остаётся команда read, а не сам секрет. Не дописывайте ключ в командную строку.
claude-opus-5-5 — Model ID, который Anthropic указывает для Claude Platform. Если в текущем каталоге BetterToken нет точно такого ID, остановитесь и уточните доступность вместо того, чтобы подбирать псевдоним.
3. Отправьте минимальный запрос без расширенных параметров
Для первой проверки не добавляйте tools, tool_choice и thinking: так базовую проблему подключения проще отделить от несовместимых настроек.
curl --fail-with-body "$ANTHROPIC_BASE_URL/v1/messages" \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d "{
\"model\": \"$CLAUDE_MODEL_ID\",
\"max_tokens\": 4096,
\"messages\": [
{\"role\": \"user\", \"content\": \"Ответь только словом: pong\"}
]
}"
В этом запросе указан точный Model ID, присутствует положительный max_tokens, отсутствует поле thinking и не навязывается вызов инструмента. В примере max_tokens равен 4096: то же значение использует Anthropic в примере миграции, и оно оставляет больше места для adaptive thinking и короткого ответа. Это отправная точка для диагностики, а не результат проведённого здесь теста и не готовый production-лимит; для production подберите значение под ожидаемый ответ, effort, стоимость и задержку.
Флаг --fail-with-body сохраняет тело ответа при HTTP 4xx/5xx. Перед публикацией логов удалите API Key, полный Prompt, ответ модели и другие чувствительные данные.
4. Не считайте, что content[0] обязательно содержит текст
HTTP 200 и верхнеуровневый type со значением message означают, что endpoint принял и обработал запрос. Для этой проверки короткого ответа наличие text block подтверждает, что генерация содержимого завершилась; adaptive thinking и текст ответа делят общий max_tokens, поэтому корректный ответ может исчерпать лимит до появления текста.
Проверьте следующие признаки:
- верхнеуровневый
typeравенmessage, а полеmodelсоответствует запрошенной модели; - при нормальном завершении короткой проверки
stop_reasonравенend_turn, а в массивеcontentесть хотя бы один блок сtypeравнымtext; - если
stop_reasonравенmax_tokens, ответ корректен, но обрезан: увеличьтеmax_tokensи повторите запрос; если явно задан высокий effort и глубокое рассуждение не нужно, можно снизить effort; - если text block отсутствует, а
stop_reasonне равенmax_tokens, сохраните полный ответ и разбирайте указанную причину остановки; отсутствие текста само по себе не означает сбой соединения и не требует сразу менять Key или Base URL; - код выбирает блоки по
type, а не безусловно читаетcontent[0].text; - объект
usageсодержит число входных и выходных Token; - в BetterToken Dashboard появилась запись с нужным временем, моделью, статусом, input/output/cache Token и списанием.
Структура ответа описана в официальной документации Anthropic Messages API, а руководство по stop_reason объясняет обработку обрезанных ответов. Dashboard помогает сопоставить запрос и учёт использования, но не следует обещать, что там обязательно хранится полный Prompt или полный ответ.
5. Ошибки 400: общая проверка Messages и изменения Opus 5.5
В запросе осталось старое имя модели
Замените прежний ID или выдуманный вариант с датой на claude-opus-5-5. В руководстве Anthropic это фиксированный ID без суффикса даты. Облачные платформы могут использовать собственные идентификаторы; в этом Anthropic-compatible примере BetterToken нужен точный ID из текущего каталога BetterToken.
Отсутствует max_tokens
Добавьте положительный max_tokens в каждый Messages-запрос. Отсутствие поля — общая ошибка валидации Messages API, а не новое правило Opus 5.5. Это жёсткий предел всего вывода — thinking вместе с финальным текстом. Даже smoke test должен оставлять место для обеих частей; если stop_reason равен max_tokens, увеличьте лимит и повторите запрос, а не считайте вызов ошибкой соединения.
Payload отключает thinking или задаёт ручной бюджет
Самое простое исправление — полностью удалить поле thinking. В Opus 5.5 adaptive thinking включён всегда. Руководство Anthropic относит оба старых варианта к запросам, которые получают 400:
{"thinking": {"type": "disabled"}}
{"thinking": {"type": "enabled", "budget_tokens": 10000}}
Если поле нужно указать явно, используйте {"thinking": {"type": "adaptive"}}. Глубину рассуждения регулируйте через output_config.effort: доступны low, medium, high, xhigh и max, значение по умолчанию — medium. Для первого запроса эти поля не нужны.
Payload принудительно задаёт tool_choice
Для tool_choice используйте только {"type": "auto"} или {"type": "none"}. Opus 5.5 отклоняет {"type": "any"} и {"type": "tool", "name": "..."}. В сценарии с инструментами оставьте выбор в режиме auto, объясните в Prompt, когда применять инструмент, и проверьте каждую JSON Schema до включения strict tool use.
6. При других статусах сначала прочитайте тело ответа
| Статус | Что проверить первым | Чего не делать |
|---|---|---|
400 | Корректность JSON, model, max_tokens, messages, thinking и tool_choice | Не менять Key вслепую и не повторять один и тот же неверный payload |
401 / 403 | Полноту ключа, аккаунт или группу ключа, Base URL | Не отправлять полный Key в поддержку |
404 | Для прямого HTTP-вызова нужен путь /v1/messages | Не считать /messages полным маршрутом |
429 | Указанную паузу, баланс, лимиты и историю запросов | Не повторять запрос без интервала |
Если в shell остались переменные другого провайдера, очистите их перед новой настройкой:
unset ANTHROPIC_API_KEY
unset ANTHROPIC_BASE_URL
unset CLAUDE_MODEL_ID
После исправления повторите тот же минимальный запрос. Если одновременно поменять модель, endpoint, Prompt и расширенные параметры, будет трудно понять, какое изменение действительно помогло.
7. Не смешивайте прайс Anthropic и текущую цену BetterToken
На странице запуска от 22 сентября 2026 года Anthropic указала для Claude Platform $4 за миллион входных Token, $20 за миллион выходных, $0.20 за cache reads и $5 за cache writes. Это официально опубликованные цены платформы Anthropic на момент запуска. Цена BetterToken меняется динамически, поэтому проверьте актуальную страницу цен и самостоятельно сопоставьте один небольшой запрос с записью в Dashboard.
Thinking Token тарифицируются как output Token, а max_tokens ограничивает thinking вместе с финальным текстом. Поэтому у задачи, перенесённой с конфигурации, где thinking был отключён, профиль выходных Token может измениться даже при том же Prompt. Перед production проверьте актуальную страницу цен BetterToken и сопоставьте небольшой запрос с записью в Dashboard.
Перед переходом к SDK, streaming или production-трафику ещё раз проверьте Model ID, хранение ключа, размер max_tokens, чтение блоков по type, отсутствие forced tool choice и наличие обезличенного тела ошибки для диагностики. Дальше используйте BetterToken API Reference и официальное руководство по миграции Opus 5.5.