Felo APIs
PPT Task API
Maak PPT-generatietaken, toon thema's en bevraag gedeelde task-endpoints.
/v2/pptsAuthenticatie
Bearer API key
Inhoudstype
application/json
Toelichting op limieten
Er kunnen limieten gelden die specifiek zijn voor het endpoint.
De PPT Task API biedt de mogelijkheid om asynchroon PPT-presentaties te genereren. Je kunt een taak aanmaken en daarna de taakstatus pollen via task_id. Je kunt ook beschikbare PPT-thema's bekijken en toepassen bij het aanmaken van taken.
Dit is een asynchrone API. Zie Asynchrone taken voor het gedeelde patroon van indienen, pollen en ophalen.
Authenticatie
Alle verzoeken vereisen een API-sleutel in de Authorization-header:
Authorization: Bearer YOUR_API_KEYGebruik met AI-agents
Om slides te maken vanuit een agent installeer je het volledige pakket felo-ai in plaats van een vaste subset van Skills. Het installatieprogramma ontdekt dynamisch elke pakketmap die SKILL.md bevat, inclusief de PPT Skill en toekomstige toevoegingen. Installeer alle gevonden Skills in de eigen map van je agent: Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills of Hermes Agent ~/.hermes/skills. Volg de handleiding voor handmatige AI-agentconfiguratie voor platformspecifieke configuratie en verificatie van de API-sleutel.
1. PPT-thema's weergeven
Vraag beschikbare PPT-thema's op met paginering, zoeken op trefwoord en filteren op taal en type.
Endpoint
GET https://openapi.felo.ai/v2/ppt-themesQueryparameters
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
lang | string | Nee | Taalcode voor gelokaliseerde inhoud (bijvoorbeeld en, zh-Hans). Standaard: en |
type | string | Nee | Filter op thematype (bijvoorbeeld default, custom) |
keyword | string | Nee | Zoekwoord; komt overeen met thematitels |
page | integer | Nee | Paginanummer, beginnend bij 1. Standaard: 1 |
size | integer | Nee | Paginagrootte, maximaal 100. Standaard: 20 |
Voorbeeld
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'Succesrespons (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"
}
]
}
}Responsvelden van thema's
| Veld | Type | Beschrijving |
|---|---|---|
total | integer | Totaal aantal thema's dat aan het filter voldoet |
page | integer | Huidig paginanummer |
size | integer | Paginagrootte |
items | array | Lijst met themaobjecten |
items[].id | string | Thema-ID; gebruik deze als ai_theme_id bij het aanmaken van een PPT |
items[].title | string | Thematitel (gelokaliseerd) |
items[].subtitle | string | Ondertitel van het thema (gelokaliseerd) |
items[].description | string | Beschrijving van het thema (gelokaliseerd) |
2. Een PPT-taak aanmaken
Endpoint
POST https://openapi.felo.ai/v2/pptsVerzoekheaders
| Header | Verplicht | Beschrijving |
|---|---|---|
Authorization | Ja | Je API-sleutel in de vorm Bearer YOUR_API_KEY |
Content-Type | Ja | application/json of multipart/form-data |
Verzoekbody
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
query | string | Ja | Prompt voor het genereren van de PPT |
livedoc_short_id | string | Nee | Korte ID van een bestaande LiveDoc om aan de PPT-sessie te koppelen. Als je dit weglaat, wordt automatisch een nieuwe LiveDoc aangemaakt. |
resource_ids | array van strings | Nee | Lijst met LiveDoc-resource-ID's om als context voor de PPT-generatie te gebruiken |
ppt_config | object | Nee | Configuratieopties voor de PPT |
ppt_config.ai_theme_id | string | Nee | Thema-ID van het endpoint PPT-thema's weergeven |
Voorbeeld
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"
}
}'Maken op basis van een geüpload bestand
Gebruik multipart/form-data om in één verzoek een bestand te uploaden en een PPT-taak aan te maken. Het platform uploadt het bestand eerst als LiveDoc-resource en geeft daarna het resource-ID door aan de PPT-taak.
| Onderdeel | Type | Verplicht | Beschrijving |
|---|---|---|---|
query | string | Ja | Prompt voor het genereren van de PPT |
file | file | Ja | Bronbestand dat als PPT-context wordt gebruikt |
stream_protocol | string | Nee | Streamprotocol; standaard message_center_v1 |
livedoc_short_id | string | Nee | Bestaande LiveDoc om het bestand in te ontvangen. Als je dit weglaat, wordt een nieuwe LiveDoc aangemaakt. |
ppt_config | JSON | Nee | PPT-configuratie met dezelfde structuur als de JSON-verzoekbody. Stuur dit onderdeel als 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]'De respons gebruikt hetzelfde schema als het JSON-verzoek. De geretourneerde livedoc_short_id identificeert de LiveDoc met de geüploade resource.
Succesrespons (200)
{
"status": "ok",
"message": null,
"data": {
"livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
"ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
"task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
}
}3. De taakstatus opvragen
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/statusVoorbeeld
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'Succesrespons (200)
{
"status": "ok",
"message": null,
"data": {
"status": "RUNNING"
}
}4. Historische taakinformatie opvragen
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/historicalVoorbeeld
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-respons
{
"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-respons
{
"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-respons (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-respons
{
"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"
}
}Responsvelden van de historische opvraag
| Veld | Type | Beschrijving |
|---|---|---|
task_id | string | Taak-ID |
task_status | string | Huidige taakstatus |
ppt_biz_id | string | Zakelijke PPT-ID (toegewezen vanuit thread_short_id in de backend) |
ppt_url | string | PPT-URL, vorm: https://felo.ai/slides/{ppt_biz_id} |
error_message | string | Aanwezig bij FAILED / PENDING / EXPIRED / CANCELED; een lege string "" wanneer downstream geen foutdetails geeft |
ai_page_html | string | Aanwezig wanneer de taak in AI_PAGE-modus draait en de historische opvraag downstream een HTML-resultaat-URL retourneert |
live_doc_short_id | string | Korte LiveDoc-ID. Bij COMPLETED komt deze uit live_doc_short_id downstream; bij definitieve foutstatussen wordt deze geretourneerd wanneer beschikbaar |
live_doc_url | string | LiveDoc-URL die bij live_doc_short_id hoort |
PPTX exporteren
Nadat de PPT-generatietaak COMPLETED heeft bereikt, dien je een asynchrone export in met ppt_business_id uit de maakrespons (of ppt_biz_id uit de historische respons):
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 '{}'Poll GET https://openapi.felo.ai/v2/ppts/{ppt_business_id}/export elke 2-5 seconden met dezelfde Bearer API-sleutel. De eigenaar van de API-sleutel moet eigenaar van de PPT zijn. Beide endpoints retourneren data.status: NOT_STARTED, PROCESSING, COMPLETED of FAILED. Alleen COMPLETED bevat download_url en expires_at.
De ondertekende download-URL verloopt 30 minuten na uitgifte. Roep het GET-endpoint opnieuw aan voor een nieuwe URL; dit genereert de PPTX niet opnieuw. POST gebruikt application/json en accepteert {}. Als je POST herhaalt terwijl een export wordt verwerkt, start er geen nieuwe taak; als je het na voltooiing aanroept, wordt de PPTX opnieuw gegenereerd en geldt de bestaande kosten in service-tegoed voor PPT-export. Onvoldoende service-tegoed levert HTTP 402 op. Er kunnen endpointspecifieke rate limits gelden; probeer het later opnieuw bij HTTP 429. Een mislukte export kan opnieuw worden ingediend.
{
"status": "ok",
"message": null,
"data": {
"status": "COMPLETED",
"download_url": "https://example.com/presentation.pptx?signature=...",
"expires_at": "2026-09-29T10:30:00Z"
}
}Aanbeveling voor pollen
Gebruik task_id uit de maakrespons en poll de status elke 2-5 seconden tot de status definitief is.
Veelvoorkomende statussen:
RUNNING: de taak wordt nog verwerktCOMPLETED: de taak is geslaagdFAILED/PENDING/EXPIRED/CANCELED: de taak heeft een definitieve status meterror_message;live_doc_urlwordt ook geretourneerd wanneer beschikbaar
Onbekende statuswaarden kunnen opduiken naarmate de backend zich ontwikkelt; behandel ze als niet-definitief, tenzij anders gedocumenteerd.
Foutcodes
| Code | HTTP-status | Beschrijving |
|---|---|---|
UNAUTHORIZED | 401 | API-sleutel is ongeldig of ingetrokken |
PPT_TASK_CREATE_FAILED | 502 | De downstream-aanroep om de taak aan te maken is mislukt |
PPT_TASK_QUERY_FAILED | 502 | De downstream-aanroep om de taakstatus op te vragen is mislukt |