ListenHubDocs
API ReferenceExplainer & Slides

Slides

The slides mode — presentation layouts, voiceover scripts, and why PPT export is not on the API.

slides is the third mode on the shared storybook endpoints. It produces presentation-style pages with AI visuals and voiceover scripts, for meetings, business reports, and conference talks. For the endpoints, request parameters, polling, statuses, and the video render step, see the Explainer & Slides overview. This page covers only what is specific to slides.

Set mode: "slides" on POST /v1/storybook/episodes. The field is optional on the endpoint — omitting it gives you info, not slides — so it is effectively required for this mode. The overview's mode table has what slides mode draws.

Getting a PPT file

PPT export is not available through the OpenAPI. The API returns each slide as an image plus its narration script; to export an editable .pptx, open the episode on the ListenHub platform.

Using the pages without a video

Slides is the mode where the raw materials are most often the deliverable. Each item in pages[] carries the slide image (imageUrl) and its narration script (text), usable as speaker notes, so you can assemble a deck in your own tooling and skip the video render entirely.

Pair that with skipAudio: true on creation when you do not need the narration audio at all — the images and scripts still come back, and speakers becomes optional.

Example

Slides with narration:

curl -X POST "https://api.marswave.ai/openapi/v1/storybook/episodes" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sources": [
      {"type": "text", "content": "Q3 results: revenue, retention and the two bets for Q4..."}
    ],
    "speakers": [{"speakerId": "<SPEAKER_ID>"}],
    "language": "en",
    "mode": "slides"
  }'

Slide images and scripts only — no speakers, no audio render:

curl -X POST "https://api.marswave.ai/openapi/v1/storybook/episodes" \
  -H "Authorization: Bearer $LISTENHUB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "sources": [
      {"type": "url", "content": "https://example.com/quarterly-report"}
    ],
    "language": "zh",
    "mode": "slides",
    "skipAudio": true
  }'

Poll the returned episodeId, then optionally render the video — see the workflow.

On this page