Посібники
Помилки, обмеження та повторні спроби
Читайте відповіді з помилками й заголовки обмежень швидкості, повторюйте безпечно та діагностуйте типові проблеми.
Кожен 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 | Параметр відсутній або недійсний | Виправте запит; не повторюйте без змін |
| 401 | UNAUTHORIZED | API-ключ відсутній, недійсний, прострочений або відкликаний | Надішліть Authorization: Bearer $FELO_API_KEY; змініть ключ, якщо його відкликано |
| 402 | INSUFFICIENT_CREDITS | Недостатньо кредитів послуг | Поповніть баланс у Console Billing, потім повторіть |
| 404 | Специфічний для endpoint | Невідома модель, завдання або маршрут | Перевірте ID моделі чи ID завдання та шлях endpoint |
| 429 | RATE_LIMITED | Перевищено обмеження швидкості | Зачекайте Retry-After, потім повторіть |
| 5xx | CHAT_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 секунди, подвоюйте, обмежте 30 секундами.
- Додавайте випадковий розкид, щоб клієнти не повторювали синхронно.
- Зупиняйтеся після невеликої кількості спроб і повідомляйте про помилку.
- Для 429 дотримуйтеся
Retry-Afterзамість власного графіка.
Послідовність налагодження
- Перевірте, що ключ наявний і не відкликаний.
- Викличте
GET /api/v1/modelsіз тим самим ключем, щоб підтвердити автентифікацію. - Надішліть мінімальний дійсний запит на цільовий endpoint.
- Додавайте потокову передачу, інструменти або великі вхідні дані по одному.
- Для асинхронної роботи перевірте статус завдання, перш ніж надсилати повторно.