Felo API PlatformFelo API Platform

Посібники

Помилки, обмеження та повторні спроби

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

Кожен Felo API повертає тіло помилки JSON зі стабільним кодом помилки та ID запиту. Спершу прочитайте код стану HTTP, потім код, потім повідомлення.

Структура помилки

Поточні відповіді в продакшені використовують код стану HTTP як status:

{
  "status": 401,
  "code": "UNAUTHORIZED",
  "message": "Invalid API Key",
  "request_id": "202610221444486982113280416060637185"
}
ПолеЗначення
statusКод стану HTTP, повторений у тілі
codeМашиночитаний код помилки
messageПояснення для людини
request_idНепрозорий ідентифікатор цього запиту; додавайте його до запитів у підтримку

Деякі старіші приклади endpoint використовують status: "error" та інший рядок коду. Орієнтуйтеся на код стану HTTP і code, а не на точне формулювання message.

Типові коди

HTTPКодЩо це означаєЩо робити
400Код перевірки, специфічний для endpointПараметр відсутній або недійснийВиправте запит; не повторюйте без змін
401UNAUTHORIZEDAPI-ключ відсутній, недійсний, прострочений або відкликанийНадішліть Authorization: Bearer $FELO_API_KEY; змініть ключ, якщо його відкликано
402INSUFFICIENT_CREDITSНедостатньо кредитів послугПоповніть баланс у Console Billing, потім повторіть
404Специфічний для endpointНевідома модель, завдання або маршрутПеревірте ID моделі чи ID завдання та шлях endpoint
429RATE_LIMITEDПеревищено обмеження швидкостіЗачекайте Retry-After, потім повторіть
5xxCHAT_FAILED, *_FAILED, SERVICE_UNAVAILABLEЗбій вищого постачальника або сервісуПовторіть із збільшенням інтервалу; зверніться до підтримки, якщо це повторюється

Довідники endpoint перелічують коди, специфічні для цього endpoint. Почніть з помилок Chat API або довідника endpoint, який викликаєте.

Endpoint генерації моделей

POST /api/v1/images/generations і POST /api/v1/videos/generations повертають помилки рівня endpoint у структурі помилок OpenAI, а не в наведеній вище:

{
  "error": {
    "message": "Model kind does not match this generation endpoint",
    "type": "invalid_request_error",
    "param": null,
    "code": "model_kind_mismatch"
  }
}

ID запиту міститься в заголовку відповіді X-Request-Id, а не в тілі. Відхилений запит не створює завдання. Коли завдання вже існує, більшість збоїв надходять як термінальний статус завдання у відповіді 200, а не як помилка HTTP: перевірте status на failed або interrupted, потім прочитайте error.message. Див. Генерація зображень і Асинхронні завдання.

ID запитів

Тіла помилок Felo містять request_id. Записуйте його в журнал разом з endpoint, кодом стану HTTP, кодом помилки, ID моделі та ID завдання. Ніколи не записуйте в журнал повний API-ключ.

Model API також приймає необов'язковий заголовок запиту X-Request-Id. Коли ви його надсилаєте, він повертається у відповіді для діагностики, що дає змогу зіставити власні журнали із запитом. Якщо ви його не надсилаєте, використовуйте повернутий request_id.

Обмеження швидкості

/v2/chat — єдиний endpoint Felo із задокументованими примусовими обмеженнями швидкості:

  • Для кожного API-ключа, вікно 1 хвилина.
  • Для кожного користувача, вікно 1 хвилина.
  • Для кожного користувача, вікно 1 година.

Користувачі з чинною платною підпискою Felo, зокрема корпоративною, звільнені від обмежень і не отримують заголовків X-RateLimit-*. Якщо статус підписки неможливо перевірити, обмеження все одно застосовуються.

ЗаголовокЗначення
X-RateLimit-LimitЛіміт найжорсткішого виміру, що наразі діє
X-RateLimit-RemainingМінімальна залишкова квота за трьома вимірами
X-RateLimit-ResetЧасова позначка Unix у секундах, коли скидається поточне вікно
Retry-AfterДля 429 — рекомендована затримка в секундах

Інші endpoint /v2/** наразі не мають примусових обмежень швидкості. Запити Model API усе ще можуть обмежуватися вищим постачальником, що може проявитися як 429.

Не вшивайте числові ліміти жорстко. Читайте заголовки в кожній відповіді.

Політика повторних спроб

СитуаціяПовторювати?
400, 401, 402, 404Ні. Спершу виправте запит, ключ або баланс.
429Так, після Retry-After або X-RateLimit-Reset.
5xx, тайм-аути, скидання з'єднанняТак, з експоненційним збільшенням інтервалу та випадковим розкидом.
Потокове з'єднання розірвано посеред відповідіПовторюйте, лише якщо ваш застосунок може допустити дубльовану генерацію.

Рекомендований цикл:

  1. Повторюйте лише ідемпотентні запити або запити, безпечні для повтору.
  2. Використовуйте експоненційне збільшення інтервалу: почніть приблизно з 1 секунди, подвоюйте, обмежте 30 секундами.
  3. Додавайте випадковий розкид, щоб клієнти не повторювали синхронно.
  4. Зупиняйтеся після невеликої кількості спроб і повідомляйте про помилку.
  5. Для 429 дотримуйтеся Retry-After замість власного графіка.

Послідовність налагодження

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

Пов'язані розділи