API referenceVideos
Set video chapters
PUT
Replaces all chapters of a video. Send up to 200 chapters whose start_seconds strictly increase. An empty list removes every chapter.
AccessKeyheader
AccessKey<token>The private key of a library, starting with ovk_. Copy it from API & embeds in the console, keep it on your server, and rotate it there if it leaks.
videoId*stringID of the video.
Format
uuidAccessKey*stringThe library's private key. Same value as the AccessKey security scheme; listed here so code samples include it.
application/json- body
chapters*array<>All chapters of the video, with strictly increasing start_seconds. An empty list removes every chapter.
Items
items <= 200The updated video.
application/json- response
data*curl -X PUT 'https://api.octavideo.tech/api/v1/videos/6f1c2b9e-4a7d-4f3e-9b8a-2d5c7e1f0a34/chapters' \ -H 'AccessKey: ovk_YOUR_LIBRARY_PRIVATE_KEY' \ -H 'Content-Type: application/json' \ -d '{ "chapters": [ { "title": "Welcome", "start_seconds": 0 }, { "title": "Course outline", "start_seconds": 95.5 } ]}'Example Response
{ "data": { "id": "6f1c2b9e-4a7d-4f3e-9b8a-2d5c7e1f0a34", "library_id": "0b8e5d3a-1c2f-4e6a-8b7d-9f0a1b2c3d4e", "title": "Lesson 1: Introduction", "description": "", "encoding_status": "ready", "progress": 100, "duration_seconds": 754.2, "size_bytes": 412337152, "chapters": [ { "title": "Welcome", "start_seconds": 0 }, { "title": "Course outline", "start_seconds": 95.5 } ], "created_at": "2026-10-25T09:30:00Z" }}