Felo API PlatformFelo API Platform

Руководства

Ошибки, лимиты и повторные попытки

Читайте ответы с ошибками и заголовки лимитов, повторяйте запросы безопасно и диагностируйте типичные сбои.

Каждый Felo API возвращает JSON-тело ошибки со стабильным кодом и request ID. Сначала читайте HTTP-статус, затем code, затем message.

Оболочка ошибки

Текущие production-ответы используют HTTP-статус как status:

{
  "status": 401,
  "code": "UNAUTHORIZED",
  "message": "Invalid API Key",
  "request_id": "202610221444486982113280416060637185"
}
ПолеЗначение
statusHTTP-статус, повторённый в теле
codeМашиночитаемый код ошибки
messageПонятное человеку объяснение
request_idНепрозрачный идентификатор запроса; указывайте его в обращениях в поддержку

В некоторых старых примерах endpoint'ов используется status: "error" и другая строка кода. Ориентируйтесь на HTTP-статус и code, а не на точную формулировку message.

Частые коды

HTTPCodeЧто означаетЧто делать
400Код валидации endpoint'аПараметр отсутствует или неверенИсправьте запрос; не повторяйте его без изменений
401UNAUTHORIZEDAPI key отсутствует, неверен, истёк или отозванОтправьте Authorization: Bearer $FELO_API_KEY; при отзыве ротируйте key
402INSUFFICIENT_CREDITSНедостаточно сервисных кредитовПополните баланс в Console Billing и повторите
404Зависит от endpoint'аНеизвестная модель, задача или маршрутПроверьте ID модели или задачи и путь endpoint'а
429RATE_LIMITEDПревышен лимит запросовДождитесь Retry-After и повторите
5xxCHAT_FAILED, *_FAILED, SERVICE_UNAVAILABLEСбой upstream или сервисаПовторите с backoff; если не проходит, обратитесь в поддержку

Справочники endpoint'ов перечисляют коды, специфичные для них. Начните с ошибок Chat API или справочника нужного endpoint'а.

Request ID

Тела ошибок Felo содержат request_id. Записывайте его вместе с endpoint'ом, HTTP-статусом, кодом ошибки, ID модели и ID задачи. Никогда не логируйте полный API key.

Model API также принимает необязательный заголовок запроса X-Request-Id. Если вы его отправите, он вернётся в ответе для диагностики, что позволяет сопоставить ваши логи с запросом. Если не отправляли — используйте возвращённый request_id.

Лимиты запросов

/v2/chat — единственный Felo endpoint с документированными принудительными лимитами:

  • На API key, окно 1 минута.
  • На пользователя, окно 1 минута.
  • На пользователя, окно 1 час.

Пользователи с действующей платной подпиской Felo, включая корпоративные, освобождены и не получают заголовки X-RateLimit-*. Если статус подписки не удаётся проверить, лимиты применяются.

ЗаголовокЗначение
X-RateLimit-LimitЛимит самого строгого из действующих измерений
X-RateLimit-RemainingМинимальный остаток квоты по трём измерениям
X-RateLimit-ResetUnix-время в секундах, когда сбрасывается текущее окно
Retry-AfterПри 429 — рекомендуемая задержка в секундах

У других endpoint'ов /v2/** сейчас нет принудительных лимитов. Запросы Model API всё равно могут ограничиваться upstream-провайдером, что проявляется как 429.

Не хардкодьте числовые лимиты. Читайте заголовки каждого ответа.

Политика повторных попыток

СитуацияПовторять?
400, 401, 402, 404Нет. Сначала исправьте запрос, key или баланс.
429Да, после Retry-After или X-RateLimit-Reset.
5xx, таймауты, сбросы соединенияДа, с экспоненциальным backoff и jitter.
Соединение streaming оборвалось посреди ответаТолько если приложение допускает повторную генерацию.

Рекомендуемый цикл:

  1. Повторяйте только идемпотентные или безопасно повторяемые запросы.
  2. Используйте экспоненциальный backoff: начните примерно с 1 секунды, удваивайте, ограничьте 30 секундами.
  3. Добавляйте случайный jitter, чтобы клиенты не повторяли синхронно.
  4. Остановитесь после нескольких попыток и верните ошибку наружу.
  5. При 429 соблюдайте Retry-After, а не собственное расписание.

Порядок диагностики

  1. Проверьте, что key присутствует и не отозван.
  2. Вызовите GET /api/v1/models с тем же key, чтобы подтвердить аутентификацию.
  3. Отправьте минимальный валидный запрос к целевому endpoint'у.
  4. Добавляйте streaming, tools или большие входные данные по одному.
  5. Для асинхронной работы проверяйте статус задачи перед повторной отправкой.

Связанные разделы