Skip to main content

Конверт

Каждый сбой, независимо от статуса, — это один JSON-объект:
  • code стабилен и рассчитан на машинную обработку. Ветвите логику по нему, а не по message.
  • message — пояснение для человека, оно может меняться.
  • request_id — UUID запроса. Он также возвращается в заголовке X-Request-ID в каждом ответе, успешном или нет. Указывайте его, когда сообщаете о проблеме.
На потоковом эндпоинте сбой, случившийся после начала стрима, приходит как событие error с теми же тремя полями; см. Стриминг.

Коды

agent_not_found и agent_disabled проверяются только в POST …/chat и POST …/chat/stream. Два GET-эндпоинта не смотрят на состояние агента: ключ выключенного агента всё ещё может получить список его диалогов и прочитать сообщения.

Что повторять

idempotency_in_progress, conversation_busy, rate_limit_exceeded, api_rate_limit_unavailable, service_unavailable. Повторное использование ключа гарантирует, что вы никогда не заплатите дважды за одно сообщение.
validation_error (прочитайте message; в нём названо проблемное поле), idempotency_conflict (используйте новый ключ для нового тела), permission_denied (используйте ключ с full), agent_mismatch (используйте агента, которому принадлежит ключ).
invalid_api_key (ключ удалён или секрет неверен), agent_disabled, agent_not_found, insufficient_balance (сначала пополните баланс). Цикл повторов на этих кодах только сжигает лимит запросов.
internal_error. Повторите один раз с тем же Idempotency-Key: неуспешная запись освобождается, поэтому повтор выполняет запрос заново, а не воспроизводит сохранённый результат. Это ожидаемо, но не гарантирует бесплатность. Если сбой случился после того, как модель уже ответила, повтор создаст новый ответ и новое списание. Если сбой повторяется, пришлите нам request_id.

Замечание о 401

API не различает удалённый ключ и ключ, которого никогда не было: оба — invalid_api_key. Если ключ, который раньше работал, начал возвращать 401, проверьте карточку «Доступ по API» в приложении; скорее всего, его обновили или удалили.