Прочитайте message и param
Тело ответа обычно называет поле напрямую. Если в логах инструмента видно только «400», включите вывод тела ответа или повторите запрос через curl.
Сервер прочитал ваш запрос и отказался его выполнять: что-то не так с самим содержимым. Ключ и деньги здесь обычно ни при чём, ищите поле.
Коротко: Ошибка API с кодом 400 (bad request) значит, что запрос дошёл до сервера, но собран неверно: сломанный JSON, неизвестное поле, неправильный тип значения, слишком длинный контекст или недопустимое сочетание параметров. Сервер не стал его выполнять и вернул описание, что именно не так. Повторять такой запрос без изменений бессмысленно: он упадёт снова.
У OpenAI это type invalid_request_error, а в поле param часто стоит имя сломанного поля: messages, max_tokens, temperature. У Anthropic тот же смысл несёт invalid_request_error, и под 400 попадают ещё два случая, которые легко перепутать с другими кодами: превышение длины контекста и текст Your credit balance is too low, то есть пустой баланс. У Gemini под 400 идут API key not valid и User location is not supported, поэтому там 400 может означать и ключ, и регион.
Первым делом читайте поле message в теле ответа: в 9 случаях из 10 оно называет проблему прямо. Дальше проверьте формат messages, имя модели, лимит max_tokens и параметры, которые вы добавили последними.
Формат запросов у нас как у OpenAI и Anthropic, тело ошибки приходит без изменений. Имена моделей пишутся без точек: gpt-5-6, claude-sonnet-5.
https://api.kosareva.cloud/v1, ключ из кабинетаfrom openai import OpenAI client = OpenAI( api_key="ВАШ_API_КЛЮЧ", base_url="https://api.kosareva.cloud/v1", ) response = client.chat.completions.create( model="gpt-5-6", messages=[{"role": "user", "content": "Привет!"}], stream=True, )
import OpenAI from "openai"; const client = new OpenAI({ apiKey: "ВАШ_API_КЛЮЧ", baseURL: "https://api.kosareva.cloud/v1", }); const response = await client.chat.completions.create({ model: "gpt-5-6", messages: [{ role: "user", content: "Привет!" }], stream: true, });
curl https://api.kosareva.cloud/v1/chat/completions \ -H "Authorization: Bearer ВАШ_API_КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-5-6","messages":[{"role":"user","content":"Привет!"}],"stream":true}'
лишняя запятая, незакрытая кавычка, кириллица в неверной кодировке, тело отправлено строкой вместо объекта.
нет поля role или content, роль написана с большой буквы, контент передан не строкой и не массивом блоков.
сумма входа и запрошенного выхода превышает контекст модели. У Anthropic это отдельный текст про context length, у OpenAI code context_length_exceeded.
temperature у рассуждающих моделей, старое поле functions вместо tools, неизвестное поле, которое сервер не игнорирует.
пустой баланс тоже приходит как 400 с текстом credit balance is too low, а не как 402.
API key not valid и User location is not supported приходят как 400, хотя по смыслу это 401 и 403.
| Текст в ответе | Причина | Что делать |
|---|---|---|
| invalid_request_error, param: messages | Сломан формат массива сообщений | Проверьте role и content у каждого элемента |
| context_length_exceeded | Вход плюс max_tokens больше контекста модели | Сократите историю или уменьшите max_tokens |
| Unrecognized request argument | Поле, которого нет у этой модели или версии API | Уберите поле или сверьтесь с документацией поставщика |
| Your credit balance is too low (Anthropic) | Баланс исчерпан, запрос при этом корректный | Пополните счёт: это не ошибка запроса |
| API key not valid (Gemini) | Ключ не принят, хотя код 400 | Проверьте ключ и проект, к которому он привязан |
| User location is not supported (Gemini) | Запрос из региона без поддержки | Читайте разбор про регион по ссылке ниже |
Тексты приведены по ответам OpenAI, Anthropic и Gemini на момент написания; точная формулировка может отличаться от версии к версии.
Тело ответа обычно называет поле напрямую. Если в логах инструмента видно только «400», включите вывод тела ответа или повторите запрос через curl.
Уберите всё лишнее: одна модель, одно сообщение, без температур и инструментов. Если минимальный запрос проходит, добавляйте поля по одному, пока не сломается.
Каждый элемент содержит role и content. Роли пишутся строчными: system, user, assistant. Контент либо строка, либо массив блоков, но не число и не null.
Посчитайте длину входа и уменьшите max_tokens так, чтобы сумма влезала в контекст модели. Для длинных диалогов обрезайте историю с начала.
У Anthropic пустой баланс и у Gemini неверный ключ тоже приходят как 400. Если message говорит про balance или key, чинить надо не запрос.
Исключение BadRequestError, в нём поле body с полным ответом сервера. Печатайте body целиком, а не только строку исключения.
В чате видно «API request failed» и тело ответа. Чаще всего это лишний параметр из настроек провайдера или модель, которой нет.
Ошибка приходит в ноду как текст. Проверьте, что поле messages собирается как массив, а не как строка с JSON внутри.
400 обычно приходит, когда base URL указывает на API другого формата: Anthropic-формат отправлен на OpenAI-совместимый адрес или наоборот.
Нет. В отличие от 429 и 5xx это ошибка содержимого: пока вы не измените запрос, ответ будет тот же.
Набор параметров у моделей разный: рассуждающие не принимают temperature, старые не знают tools. Один и тот же запрос может проходить на одной модели и падать на другой.
У OpenAI и Anthropic неверный ключ даёт 401. У Gemini текст API key not valid приходит с кодом 400, поэтому там смотрите message, а не код.
Чаще всего разорвана история сообщений: после ответа модели с tool_calls на каждый вызов должно идти сообщение с ролью tool и тем же tool_call_id. У Anthropic правило то же: на каждый блок tool_use в следующем сообщении нужен tool_result с его id. Реже виновата невалидная JSON Schema в описании параметров инструмента.
В Messages API у Anthropic свои правила: системный промпт передаётся отдельным полем system, а не сообщением с ролью system, и поле max_tokens обязательно. Перенесите system на верхний уровень и задайте max_tokens или отправляйте запрос в формате OpenAI на совместимый адрес: у нас Claude принимает его на https://api.kosareva.cloud/v1.
OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.