Felo API PlatformFelo API Platform

Felo APIs

PPT Task API

Maak PPT-generatietaken, toon thema's en bevraag gedeelde task-endpoints.

POST/v2/ppts

Authenticatie

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_KEY

Gebruik 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-themes

Queryparameters

ParameterTypeVerplichtBeschrijving
langstringNeeTaalcode voor gelokaliseerde inhoud (bijvoorbeeld en, zh-Hans). Standaard: en
typestringNeeFilter op thematype (bijvoorbeeld default, custom)
keywordstringNeeZoekwoord; komt overeen met thematitels
pageintegerNeePaginanummer, beginnend bij 1. Standaard: 1
sizeintegerNeePaginagrootte, 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

VeldTypeBeschrijving
totalintegerTotaal aantal thema's dat aan het filter voldoet
pageintegerHuidig paginanummer
sizeintegerPaginagrootte
itemsarrayLijst met themaobjecten
items[].idstringThema-ID; gebruik deze als ai_theme_id bij het aanmaken van een PPT
items[].titlestringThematitel (gelokaliseerd)
items[].subtitlestringOndertitel van het thema (gelokaliseerd)
items[].descriptionstringBeschrijving van het thema (gelokaliseerd)

2. Een PPT-taak aanmaken

Endpoint

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

Verzoekheaders

HeaderVerplichtBeschrijving
AuthorizationJaJe API-sleutel in de vorm Bearer YOUR_API_KEY
Content-TypeJaapplication/json of multipart/form-data

Verzoekbody

ParameterTypeVerplichtBeschrijving
querystringJaPrompt voor het genereren van de PPT
livedoc_short_idstringNeeKorte ID van een bestaande LiveDoc om aan de PPT-sessie te koppelen. Als je dit weglaat, wordt automatisch een nieuwe LiveDoc aangemaakt.
resource_idsarray van stringsNeeLijst met LiveDoc-resource-ID's om als context voor de PPT-generatie te gebruiken
ppt_configobjectNeeConfiguratieopties voor de PPT
ppt_config.ai_theme_idstringNeeThema-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.

OnderdeelTypeVerplichtBeschrijving
querystringJaPrompt voor het genereren van de PPT
filefileJaBronbestand dat als PPT-context wordt gebruikt
stream_protocolstringNeeStreamprotocol; standaard message_center_v1
livedoc_short_idstringNeeBestaande LiveDoc om het bestand in te ontvangen. Als je dit weglaat, wordt een nieuwe LiveDoc aangemaakt.
ppt_configJSONNeePPT-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}/status

Voorbeeld

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}/historical

Voorbeeld

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

VeldTypeBeschrijving
task_idstringTaak-ID
task_statusstringHuidige taakstatus
ppt_biz_idstringZakelijke PPT-ID (toegewezen vanuit thread_short_id in de backend)
ppt_urlstringPPT-URL, vorm: https://felo.ai/slides/{ppt_biz_id}
error_messagestringAanwezig bij FAILED / PENDING / EXPIRED / CANCELED; een lege string "" wanneer downstream geen foutdetails geeft
ai_page_htmlstringAanwezig wanneer de taak in AI_PAGE-modus draait en de historische opvraag downstream een HTML-resultaat-URL retourneert
live_doc_short_idstringKorte LiveDoc-ID. Bij COMPLETED komt deze uit live_doc_short_id downstream; bij definitieve foutstatussen wordt deze geretourneerd wanneer beschikbaar
live_doc_urlstringLiveDoc-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 verwerkt
  • COMPLETED: de taak is geslaagd
  • FAILED / PENDING / EXPIRED / CANCELED: de taak heeft een definitieve status met error_message; live_doc_url wordt ook geretourneerd wanneer beschikbaar

Onbekende statuswaarden kunnen opduiken naarmate de backend zich ontwikkelt; behandel ze als niet-definitief, tenzij anders gedocumenteerd.

Foutcodes

CodeHTTP-statusBeschrijving
UNAUTHORIZED401API-sleutel is ongeldig of ingetrokken
PPT_TASK_CREATE_FAILED502De downstream-aanroep om de taak aan te maken is mislukt
PPT_TASK_QUERY_FAILED502De downstream-aanroep om de taakstatus op te vragen is mislukt