# Felo Presentatie maken

POST /api/v1/data/ppts

Genereer asynchroon een presentatie en exporteer daarna een PPTX-bestand. Houd de generatie- en exportstappen gescheiden: een aangemaakte taak is nog geen voltooid bestand.

Alle voorbeelden gebruiken `FELO_API_KEY` uit het [overzicht](https://openapi.felo.ai/nl/docs/data-api/guides/felo-overview.md). Aanroepen gebruiken **platformsaldo**, niet Felo Pro-credits. Reactievoorbeelden zijn illustratief; live inhoud en optionele velden kunnen variëren.





## 1. Maak de presentatie aan

`POST /api/v1/data/ppts`

| Veld | Type | Vereist | Betekenis |
|---|---|---|---|
| `query` | string | Ja | Generatie-instructies, 1–25.000 tekens |
| `stream_protocol` | string | Nee | Standaard `message_center_v1`; normaal ongemoeid laten |
| `ppt_config` | object | Nee | Optionele configuratie; de huidige implementatie leest `ai_theme_id` |
| `livedoc_short_id` | string | Nee | Bestaande context-ID, tot 100 tekens; moet door native API-eigendom- en vervalcontroles komen |
| `resource_ids` | string array | Nee | Tot 100 UUID-resource-ID's; onderworpen aan dezelfde contexttoegangcontroles |

Laat voor een eerste integratie de context- en configuratievelden weg. Een context die via `/v2` is aangemaakt, komt hier niet automatisch in aanmerking voor hergebruik.

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/ppts" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"Create a 5-slide introduction to retrieval augmented generation for software developers."}'
```

HTTP 200 retourneert identificatiegegevens op de root:

```json
{
  "task_id":"example-task-id",
  "ppt_business_id":"example-ppt-id",
  "livedoc_short_id":"example-livedoc-id",
  "expires_at":"2026-11-13T00:00:00Z"
}
```

Aanvullende identificatiegegevens zoals `resource_id`, `stream_key` en `thread_short_id` kunnen aanwezig zijn. Een succesvolle aanmaakreactie betekent dat de taak is geaccepteerd, niet dat de generatie is voltooid. Het gevraagde aantal dia's is een instructie; facturering gebruikt het daadwerkelijk gegenereerde aantal pagina's.

```bash
TASK_ID="example-task-id"
PPT_ID="example-ppt-id"
```

### Generatiegebeurtenissen lezen met SSE

Als de aanmaak een `stream_key` retourneert, maak dan onmiddellijk verbinding met een API-sleutel die bij hetzelfde account hoort. Als er geen stream key wordt geretourneerd, gebruik dan de status- en resultaatquery's hieronder.

```bash
curl -N 'https://openapi.felo.ai/api/v1/data/conversations/stream/YOUR_STREAM_KEY?format=structured' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: text/event-stream'
```

| Queryparameter | Betekenis |
|---|---|
| `format` | `raw` (standaard) behoudt de `content`-string; `structured` decodeert geldige JSON naar een object of array |
| `offset` | Optionele upstream-hervatpositie voor herverbinding; leid deze niet af uit je lokale evenementenaantal |

Lees elk volledig SSE-gebeurtenis, decodeer de externe JSON en verwerk dan `content`. Een `answer`-toepassingsgebeurtenis draagt tekst in `data.text`; `finished` signaleert voltooiing van de generatie in de stream. Verwerk ook upstream `done`, `[DONE]` en `error`-signalen. Als de verbinding wordt verbroken zonder voltooiingssignaal, query dan de taakstatus.

Gebruik de parseringsregels en het clientvoorbeeld in [SuperAgent SSE](https://openapi.felo.ai/nl/docs/api-reference/superagent.md#2-sse-stream-consumeren), met deze sectie zijn `/api/v1/data/conversations/stream/{stream_key}`-URL. Lees het taakresultaat nadat de stream eindigt; PPTX-export blijft een aparte stap. Dit eindpunt schakelt `stream: true` op `/api/v1/data/chat` niet in.



## Levensduur, eigendom en facturering

- Presentaties verlopen **zeven dagen na aanmaak**. Query's en exports verlengen deze periode niet. De `expires_at` van de presentatie en de ondertekende download-URL `expires_at` beschrijven verschillende levensduren.
- Alleen het aanmakende API-account kan zijn taken en presentaties benaderen. Een ontbrekende of ontoegankelijke resource kan 404 retourneren; een verlopen of verwijderde resource kan 410 retourneren, of 404 na opschoning.
- Generatie wordt gefactureerd per gegenereerde pagina (`ppt.generate`). Onder paginaprijs reserveert aanmaak de prijs van tien pagina's, rekent daarna af op basis van de daadwerkelijk succesvolle uitvoer en geeft de ongebruikte reservering vrij. Je account heeft voldoende beschikbaar saldo nodig voor de reservering, zelfs als de prompt minder pagina's vraagt.
- Export heeft een aparte verzoekprijs (`ppt.export`). Statusquery's, resultaatquery's, exportstatusquery's en verwijderen brengen geen nieuwe kosten met zich mee.
- Na een time-out query je de opgeslagen taak in plaats van nog een presentatie aan te maken. Zie [Facturering en fouten](https://openapi.felo.ai/nl/docs/data-api/guides/felo-billing.md).
