Felo API PlatformFelo API Platform

Felo APIs

PPT Task API

Створюйте завдання генерування PPT, переглядайте теми й опитуйте спільні endpoint завдань.

POST/v2/ppts

Автентифікація

Bearer API key

Тип вмісту

application/json

Примітки щодо обмежень

Можуть діяти обмеження для окремих endpoint.

PPT Task API надає можливості асинхронної генерації PPT. Ви можете створити завдання, а потім опитувати його статус за task_id. Також можна переглядати доступні теми PPT і застосовувати їх під час створення завдань.

Це асинхронний API. Про спільну схему надсилання, опитування та отримання див. Асинхронні завдання.

Автентифікація

Усі запити потребують API-ключа в заголовку Authorization:

Authorization: Bearer YOUR_API_KEY

Використання з агентами ШІ

Щоб створювати слайди з агента, установіть повний пакет felo-ai, а не фіксований набір Skills. Його інсталятор динамічно знаходить кожен каталог пакета, що містить SKILL.md, зокрема PPT Skill і майбутні доповнення. Установіть усі знайдені Skills у рідний каталог для вашого агента: Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills або Hermes Agent ~/.hermes/skills. Дотримуйтеся посібника з ручного налаштування агента ШІ, щоб дізнатися про налаштування API-ключа та перевірку для кожної платформи.

1. Список тем PPT

Отримайте доступні теми PPT із посторінковим виводом, пошуком за ключовим словом і фільтрацією за мовою та типом.

Endpoint

GET https://openapi.felo.ai/v2/ppt-themes

Параметри запиту

ПараметрТипОбов'язковийОпис
langstringНіКод мови для локалізованого вмісту (напр. en, zh-Hans). За замовчуванням: en
typestringНіФільтр за типом теми (напр. default, custom)
keywordstringНіКлючове слово для пошуку; збігається із заголовками тем
pageintegerНіНомер сторінки, починаючи з 1. За замовчуванням: 1
sizeintegerНіРозмір сторінки, до 100. За замовчуванням: 20

Приклад

curl -X GET 'https://openapi.felo.ai/v2/ppt-themes?lang=en&page=1&size=10' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Успішна відповідь (200)

{
  "status": "ok",
  "message": null,
  "data": {
    "total": 8,
    "page": 1,
    "size": 10,
    "items": [
      {
        "id": "43122897-0d3c-4c9e-ae19-20527ad36c04",
        "title": "Inspiration Themes",
        "subtitle": "AI-tailored visual solutions",
        "description": "Style and layout, both crafted by AI from your content in real time"
      }
    ]
  }
}

Поля відповіді теми

ПолеТипОпис
totalintegerЗагальна кількість тем, що відповідають фільтру
pageintegerНомер поточної сторінки
sizeintegerРозмір сторінки
itemsarrayСписок об'єктів тем
items[].idstringID теми; використовуйте його як ai_theme_id під час створення PPT
items[].titlestringЗаголовок теми (локалізований)
items[].subtitlestringПідзаголовок теми (локалізований)
items[].descriptionstringОпис теми (локалізований)

2. Створити завдання PPT

Endpoint

POST https://openapi.felo.ai/v2/ppts

Заголовки запиту

ЗаголовокОбов'язковийОпис
AuthorizationТакВаш API-ключ у форматі Bearer YOUR_API_KEY
Content-TypeТакapplication/json або multipart/form-data

Тіло запиту

ПараметрТипОбов'язковийОпис
querystringТакЗапит-підказка для генерації PPT
livedoc_short_idstringНіКороткий ID наявного LiveDoc, який потрібно пов'язати із сеансом PPT. Якщо не вказано, новий LiveDoc створюється автоматично.
resource_idsarray of stringsНіСписок ID ресурсів LiveDoc, які використовуватимуться як контекст для генерації PPT
ppt_configobjectНіПараметри конфігурації PPT
ppt_config.ai_theme_idstringНіID теми з endpoint Список тем PPT

Приклад

curl -X POST 'https://openapi.felo.ai/v2/ppts' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "Felo, 2 pages",
    "ppt_config": {
      "ai_theme_id": "02968979-a69f-42c4-b136-de02c40ab2d7"
    }
  }'

Створення із завантаженого файлу

Використовуйте multipart/form-data, щоб завантажити один файл і створити завдання PPT в одному запиті. Платформа спершу завантажує файл як ресурс LiveDoc, а потім передає його ID ресурсу завданню PPT.

ЧастинаТипОбов'язковаОпис
querystringТакЗапит-підказка для генерації PPT
filefileТакВихідний файл, що використовується як контекст PPT
stream_protocolstringНіПротокол потокової передачі; за замовчуванням message_center_v1
livedoc_short_idstringНіНаявний LiveDoc, до якого потрібно додати файл. Якщо не вказано, створюється новий LiveDoc.
ppt_configJSONНіКонфігурація PPT із тією самою структурою, що й тіло JSON-запиту. Надсилайте цю частину як application/json.
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -F 'query=Create a 10-page presentation based on this report' \
  -F 'ppt_config={"ai_theme_id":"02968979-a69f-42c4-b136-de02c40ab2d7"};type=application/json' \
  -F '[email protected]'

Відповідь використовує ту саму схему, що й JSON-запит. Повернутий livedoc_short_id ідентифікує LiveDoc, що містить завантажений ресурс.

Успішна відповідь (200)

{
  "status": "ok",
  "message": null,
  "data": {
    "livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
    "ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
    "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
  }
}

3. Отримати статус завдання

Endpoint

GET https://openapi.felo.ai/v2/tasks/{task_id}/status

Приклад

curl -X GET 'https://openapi.felo.ai/v2/tasks/019cad6d-e874-55ef-d577-686344b5a7e9/status' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Успішна відповідь (200)

{
  "status": "ok",
  "message": null,
  "data": {
    "status": "RUNNING"
  }
}

4. Отримати історію завдання

Endpoint

GET https://openapi.felo.ai/v2/tasks/{task_id}/historical

Приклад

curl -X GET 'https://openapi.felo.ai/v2/tasks/019cb17e-9e23-3d40-4447-48a651249460/historical' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer YOUR_API_KEY'

Відповідь у стані RUNNING

{
  "status": "ok",
  "message": null,
  "data": {
    "task_id": "019cb17e-9e23-3d40-4447-48a651249460",
    "task_status": "RUNNING",
    "ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
    "ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx"
  }
}

Відповідь у стані COMPLETED

{
  "status": "ok",
  "message": null,
  "data": {
    "task_id": "019cb17e-9e23-3d40-4447-48a651249460",
    "task_status": "COMPLETED",
    "ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
    "ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
    "live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
    "live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
  }
}

Відповідь у стані COMPLETED (AI_PAGE)

{
  "status": "ok",
  "message": null,
  "data": {
    "task_id": "019d7a4d-6ab5-a96d-0f98-43ca434ab621",
    "task_status": "COMPLETED",
    "ppt_biz_id": "9qiLTmT77fA3aVurrMHvRJ",
    "ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ",
    "ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ"
  }
}

Відповідь у стані FAILED / PENDING / EXPIRED / CANCELED

{
  "status": "ok",
  "message": null,
  "data": {
    "task_id": "019cb17e-9e23-3d40-4447-48a651249460",
    "task_status": "FAILED",
    "ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
    "ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
    "error_message": "PPT generation failed",
    "live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
    "live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
  }
}

Поля відповіді історії

ПолеТипОпис
task_idstringID завдання
task_statusstringПоточний статус завдання
ppt_biz_idstringБізнес-ID PPT (відповідає thread_short_id у бекенді)
ppt_urlstringURL-адреса PPT у форматі https://felo.ai/slides/{ppt_biz_id}
error_messagestringПрисутнє для FAILED / PENDING / EXPIRED / CANCELED; порожній рядок "", якщо нижчий рівень не надає деталей помилки
ai_page_htmlstringПрисутнє, коли завдання виконується в режимі AI_PAGE і нижчий рівень повертає URL-адресу HTML-результату
live_doc_short_idstringКороткий ID LiveDoc. Для COMPLETED походить із поля live_doc_short_id нижчого рівня; для термінальних статусів помилки повертається, коли доступний
live_doc_urlstringURL-адреса LiveDoc, що відповідає live_doc_short_id

Експорт PPTX

Після досягнення завданням генерації PPT статусу COMPLETED надішліть асинхронний експорт, використовуючи ppt_business_id із відповіді на створення (або ppt_biz_id із відповіді історії):

curl -X POST 'https://openapi.felo.ai/v2/ppts/YOUR_PPT_BUSINESS_ID/export' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{}'

Опитуйте GET https://openapi.felo.ai/v2/ppts/{ppt_business_id}/export із тим самим ключем Bearer API кожні 2–5 секунд. Власник API-ключа має бути власником PPT. Обидва endpoint повертають data.status: NOT_STARTED, PROCESSING, COMPLETED або FAILED. Лише COMPLETED містить download_url і expires_at.

Підписана URL-адреса завантаження діє 30 хвилин після видачі. Викличте GET-endpoint знову, щоб отримати свіжу URL-адресу; це не перегенеровує PPTX. POST використовує application/json і приймає {}. Повторний POST під час обробки експорту не запускає ще одне завдання; виклик після завершення перегенеровує PPTX і спричиняє чинну плату за експорт PPT у кредитах. У разі недостатніх кредитів повертається HTTP 402. Можуть застосовуватися обмеження швидкості для конкретного endpoint; у разі HTTP 429 повторіть спробу пізніше. Невдалий експорт можна надіслати повторно.

{
  "status": "ok",
  "message": null,
  "data": {
    "status": "COMPLETED",
    "download_url": "https://example.com/presentation.pptx?signature=...",
    "expires_at": "2026-09-29T10:30:00Z"
  }
}

Рекомендації щодо опитування

Використовуйте task_id із відповіді на створення та опитуйте статус кожні 2-5 секунд, доки статус не стане термінальним.

Приклади типових статусів:

  • RUNNING: завдання ще обробляється
  • COMPLETED: завдання успішно завершено
  • FAILED / PENDING / EXPIRED / CANCELED: завдання досягло термінального статусу з error_message; live_doc_url також повертається, коли доступний

У міру розвитку бекенду можуть з'являтися невідомі значення статусів; вважайте їх нетермінальними, якщо не задокументовано інше.

Коди помилок

КодСтатус HTTPОпис
UNAUTHORIZED401API-ключ недійсний або відкликаний
PPT_TASK_CREATE_FAILED502Не вдалося виконати виклик нижчого рівня для створення завдання
PPT_TASK_QUERY_FAILED502Не вдалося виконати виклик нижчого рівня для отримання статусу завдання