Editor
PUT
/videos/{id}/presentation-scenes

Replaces the whole scene timeline. Send a bare JSON array or wrap it as { "presentationScenes": [ ... ] } ({ "scenes": [ ... ] } is accepted too).

Every scene is validated against the end of the transcript, or the source duration when there is none: a scene outside that window is clamped, and one that ends at or before it starts is dropped. Scenes are stored sorted by startMs. A video with neither a transcript nor a known duration cannot place scene timings and is refused with 409 warning-source-not-ready.

Only presentation videos have this timeline; anything else is 409 wrong-video-type.

Authorization

bearerAuth
AuthorizationBearer <token>

An API key created under Settings > API & Webhooks. Keys start with sf_live_.

In: header

Path Parameters

id*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

[index: integer]?

One beat of a presentation timeline. startMs and endMs are clamped to the video timeline on save, and a scene that ends at or before it starts is dropped.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X PUT "https://example.com/videos/string/presentation-scenes" \  -H "Content-Type: application/json" \  -d '{    "presentationScenes": [      {        "id": "s1a2b3",        "startMs": 0,        "endMs": 3200,        "text": "Ship your first video in under a minute",        "template": "heroTitle",        "tone": "light"      },      {        "id": "s4d5e6",        "startMs": 3200,        "endMs": 7400,        "text": "Three steps, no editing timeline",        "template": "flowSteps",        "tone": "accent"      }    ]  }'
{  "data": [    {      "id": "string",      "startMs": 0,      "endMs": 0,      "text": "string",      "emphasis": "string",      "template": "string",      "tone": "light",      "caption": "show",      "hidden": true,      "visual": {        "type": "string",        "items": 1,        "anchors": [          "string"        ]      },      "content": {},      "params": {},      "direction": {},      "composed": {}    }  ]}