kimik3.io/Ошибки

Ошибки и режимы отказа Kimi K3

Самые коварные сбои Kimi K3 не выглядят как сбои: вызов возвращает HTTP 200. Ниже — все статусы, с которыми вы реально столкнётесь, с настоящими телами ответов из специально сломанных вызовов.

Та, что действительно вас подловит, — не из привычного ряда этой таблицы: когда max_completion_tokens слишком мал, чтобы рассуждения успели завершиться, K3 возвращает HTTP 200 с пустым content — и тарифицирует вызов полностью. Это тихий сбой: он выглядит как успех, и именно так чаще всего ломается первая интеграция. Полный разбор →

Замерено 2026-07-16 на api.moonshot.ai, повторно проверено 2026-07-18 через direct.evolink.ai, модель kimi-k3вот как.

Как устроена ошибка

Ошибки приходят единым объектом error с полями message, type и code:

{
  "error": {
    "message": "API key is missing or invalid",
    "type": "invalid_authentication_error",
    "code": null
  }
}

Не ветвитесь по code. Поле допускает null, и во всех ошибках, которые мы спровоцировали напрямую у Moonshot, его не было вовсе. Всегда заполненным оказывалось поле type — сопоставляйте по нему.

Через шлюз тела ошибок авторизации и «модель не найдена» ниже не совпадут байт в байт. Неверный ключ отбивает собственный слой авторизации шлюза, и до Moonshot запрос не доходит — вы получите его формулировку, а не формулировку Moonshot. Симптомы, причины и способы починки от этого не меняются. Поведенческие находки на этой странице — ловушка с пустым content, параметры без валидации — свойства самой модели и действуют везде, где отдают K3.

{
  "error": {
    "message": "Invalid Authentication",
    "type": "invalid_authentication_error"
  }
}

Ошибки по симптомам

Воспроизведено 2026-07-16 на kimi-k3; 404 и tool_choice повторно проверены 2026-07-18 через direct.evolink.ai.
СимптомЧто вы получаете на самом делеПричина и починка
Пустой content,
но счёт выставлен

самый вероятный
HTTP 200
finish_reason: "length"
content: ""
заполненный reasoning_content
Рассуждения съели весь бюджет токенов. Поднимите max_completion_tokens или оставьте значение по умолчанию 131 072. Все шесть прогонов →
401
не авторизован
{"error": {
  "message": "Invalid Authentication",
  "type": "invalid_authentication_error"
}}
Ключ отсутствует, опечатан, отозван — или потерялся префикс Bearer. Проверьте, что шелл действительно экспортировал переменную. Поля code для сопоставления здесь нет.
404
модель не найдена
api.moonshot.ai, 2026-07-16:
{"error": {
  "message": "Not found the model kimi-k3-chat
              or Permission denied",
  "type": "resource_not_found_error"
}}
через direct.evolink.ai, 2026-07-18:
{"error": {
  "code": "model_not_found",
  "did_you_mean": "kimi-k3",
  "message": "Model 'kimi-k3-chat' is not
              available for this API key
              (unknown model id, or not
              enabled for your group). This
              error is permanent — do not
              retry with the same model id.
              Did you mean 'kimi-k3'? Call
              GET /v1/models to list the
              models available to this key."
}}
ID — ровно kimi-k3. Обратите внимание: сообщение Moonshot смешивает «неверное имя» и «нет доступа» — если написание верное, дело в правах или в списке моделей, а не в опечатке. Проверьте, что ваш шлюз отдаёт K3. Повторная проверка 2026-07-18 через direct.evolink.ai: в 404 от EvoLink есть поле did_you_mean с правильным ID.
400
пустой messages
{"error": {
  "message": "Invalid request: messages
              must not be empty",
  "type": "invalid_request_error"
}}
Массив сообщений отфильтровался в пустоту где-то выше по коду — обычно это баг обрезки истории. Проверяйте перед отправкой.
400
принудительный tool_choice
{"error": {
  "message": "tool_choice 'specified' is
              incompatible with thinking
              enabled",
  "type": "invalid_request_error",
  "code": null
}}
Замерено 2026-07-18 через direct.evolink.ai.
Всегда включённые размышления K3 отвергают tool_choice с принудительным выбором конкретной функции. tool_choice: "auto" работает — та же схема инструментов вернула finish_reason: "tool_calls". Проверяйте имя вызванного инструмента сами, вместо того чтобы навязывать его.
429
превышен лимит запросов
{"error": {
  "message": "Rate limit exceeded",
  "type": "...",
  "code": null
}}
По задокументированной схеме EvoLink — эту ошибку мы не воспроизводили.
Слишком много запросов или токенов в минуту для вашего тарифа. Отступайте экспоненциально — 1 с, 2 с, 4 с, с джиттером. И сериализуйте собственные всплески: шторм ретраев выглядит как дополнительная нагрузка. За 50 вызовов 2026-07-18 мы не поймали ни одного 429, но в часы пик лимиты реальны — страница K3 у OpenRouter предупреждает о нагрузке.
Таймаут /
зависший запрос
Нет ответа десятки секунд Ожидаемо на длинном контексте: мы замерили 52 с на промпте в 498 тыс. токенов. Ставьте клиентские таймауты в минутах, а не секундах, и используйте stream: true.
Нет usage
при стриминге
Стрим завершился, блока usage нет Передайте stream_options: {"include_usage": true}. Без этого вы не видите, сколько потратили — включая токены рассуждений.
Недостаточно
средств
Зависит от провайдера Проверьте личный кабинет. Длинные контексты тратят быстро: один вызов на 498 тыс. токенов — это $1.49 только за вход.

Сбои, которые не возвращают ошибку

Эту категорию стоит усвоить. K3 не валидирует ваши параметры — мы нашли два случая, когда очевидно некорректный запрос возвращает чистый HTTP 200:

Оба вернули HTTP 200 с обычным завершением. 2026-07-16, повторно проверено 2026-07-18.
Что мы отправилиПочему это должно падатьЧто произошло
reasoning_effort: "low" Задокументирована поддержка только max HTTP 200 — молча игнорируется: принято без предупреждения, устойчивого эффекта нет
max_completion_tokens: 2000000 Почти вдвое больше контекстного окна в 1 048 576 HTTP 200 — значение молча урезано до потолка, без предупреждения

Урок шире этих двух случаев: 200 от K3 не означает, что запрос понят так, как вы задумали. Если вы рассчитываете, что параметр меняет поведение, — проверьте, что поведение действительно изменилось, а не выводите это из отсутствия ошибки. Вместе с ловушкой пустого content правило простое: проверяйте сам ответ, а не код статуса.

Чек-лист перед релизом

  1. model в ответе повторяет kimi-k3 — шлюз ничего молча не подменил.
  2. finish_reason == "stop", а не "length".
  3. content непустой.
  4. usage.total_tokens ненулевой, и вы логируете reasoning_tokens.
  5. Клиентский таймаут в минутах, если работаете с длинным контекстом.
  6. Каждый параметр, на который вы полагаетесь, проверен по наблюдаемому поведению, а не по коду 200.

Готовая проверка для вашего кода — в руководстве по API.

Частые вопросы об ошибках Kimi K3

Что означает ошибка 401 Invalid Authentication у Kimi K3?

Ваш API-ключ отсутствует, опечатан, отозван, либо из заголовка Authorization потерялся префикс Bearer. Тело ответа — {"error": {"message": "Invalid Authentication", "type": "invalid_authentication_error"}} без поля code, поэтому сопоставляйте по type, а не по code.

Почему Kimi K3 возвращает 404 model not found?

ID модели — ровно kimi-k3. Прямой 404 от Moonshot смешивает неверное имя модели с проблемой прав доступа: оно звучит как 'Not found the model X or Permission denied'. При повторной проверке 2026-07-18 через EvoLink тело 404 содержит поле did_you_mean, указывающее на kimi-k3. Если написание верное, дело в доступе или в том, что шлюз не отдаёт K3, а не в опечатке.

Валидирует ли API Kimi K3 параметры запроса?

Ненадёжно. Два некорректных запроса возвращают HTTP 200 с обычным завершением: reasoning_effort со значением 'low' молча игнорируется, а max_completion_tokens со значением 2 000 000 — почти вдвое больше контекстного окна — молча урезается до потолка (повторно проверено 2026-07-18). Принудительный выбор конкретной функции через tool_choice падает по-настоящему: 400, tool_choice 'specified' is incompatible with thinking enabled. Код 200 не означает, что запрос понят так, как вы задумали.

Воспроизведите любой из случаев

Каждый случай отсюда воспроизводится за секунды: нужны curl и ключ. EvoLink отдаёт kimi-k3 через OpenAI-совместимый эндпоинт — 10 бесплатных кредитов, регистрация из любой страны, китайский номер телефона не нужен.

Получить API-ключ EvoLink