Прочитайте 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 и параметры, которые вы добавили последними.
| Текст в ответе | Причина | Что делать |
|---|---|---|
| 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.
Уберите всё лишнее: одна модель, одно сообщение, без температур и инструментов. Если минимальный запрос проходит, добавляйте поля по одному, пока не сломается.
curl https://api.kosareva.cloud/v1/chat/completions \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"model":"gpt-5-6","messages":[{"role":"user","content":"Привет"}]}'Каждый элемент содержит role и content. Роли пишутся строчными: system, user, assistant. Контент либо строка, либо массив блоков, но не число и не null.
Посчитайте длину входа и уменьшите max_tokens так, чтобы сумма влезала в контекст модели. Для длинных диалогов обрезайте историю с начала.
У Anthropic пустой баланс и у Gemini неверный ключ тоже приходят как 400. Если message говорит про balance или key, чинить надо не запрос.
Нет. В отличие от 429 и 5xx это ошибка содержимого: пока вы не измените запрос, ответ будет тот же.
Набор параметров у моделей разный: рассуждающие не принимают temperature, старые не знают tools. Один и тот же запрос может проходить на одной модели и падать на другой.
У OpenAI и Anthropic неверный ключ даёт 401. У Gemini текст API key not valid приходит с кодом 400, поэтому там смотрите message, а не код.
Наш шлюз принимает запросы в OpenAI-формате по адресу https://api.kosareva.cloud/v1 и в Anthropic-формате по https://api.kosareva.cloud, тело ошибки от поставщика пробрасывается без изменений, поэтому message и param читаются так же. Имена моделей у нас без точек: gpt-5-6, claude-sonnet-5, gemini-3-8-flash. Если 400 приходит из-за пустого баланса, в кабинете есть уведомление о низком балансе, чтобы не доводить до этого.
OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.