3.6 KiB
3.6 KiB
Video Configs API
Base path: /api/v1/video-configs
All endpoints require Authorization: Bearer <jwt>.
Related: 02 - Videos API, 07 - Render Engine, 04 - Templates API
GET /video-configs/:videoId
Returns the current VideoConfig for a video.
Response:
{
"id": "cuid",
"videoId": "cuid",
"templateId": "cuid or null",
"blockOrder": ["blockId1", "freetext:abc123"],
"blockOverrides": {
"blockId1": { "content": "override text", "active": true, "compact": false }
},
"variableValues": {
"sponsor_name": "Acme Corp"
},
"version": 3,
"renderHash": "sha256hex or null",
"renderedAt": "ISO datetime or null",
"createdAt": "ISO datetime",
"updatedAt": "ISO datetime"
}
Returns null if the video has no config yet.
PUT /video-configs/:videoId
Save (create or update) the description config for a video. Requires EDITOR role.
This is the endpoint the video editor calls when the user saves their block configuration.
Request body:
{
"blockOrder": ["blockId1", "freetext:abc123"],
"blockOverrides": {
"blockId1": { "content": "override text", "active": true, "compact": false },
"freetext:abc123": { "content": "free text content", "compact": false }
},
"variableValues": {
"sponsor_name": "Acme Corp"
},
"templateId": "cuid",
"collaboratorIds": ["collabId1"],
"autoRender": true
}
| Field | Required | Notes |
|---|---|---|
blockOrder |
Yes | Ordered array of block IDs. May include freetext:<id> entries — these have no DB block; content comes from blockOverrides. |
blockOverrides |
Yes | Per-block overrides for content, active state, and compact flag. |
variableValues |
Yes | Video-level custom variable values. Override team variables on name collision. |
templateId |
No | Associates the config with a template. Does not re-apply template defaults — it is a reference only. |
collaboratorIds |
No | Updates Video.collaboratorIds on the video row. Controls which collaborators are resolved during description rendering. |
autoRender |
No | If true, enqueues a background render job after saving. Updates Video.renderedDescription asynchronously. |
Response: The saved VideoConfig row (same shape as GET response above).
Notes:
versionis auto-incremented on every save.collaboratorIdsin the request body updatesVideo.collaboratorIds— this is handled separately from theVideoConfigfields. The VideoConfig row itself does not store collaborator IDs.- If
autoRenderis omitted orfalse, the description is not re-rendered immediately. The rendered description updates only when a sync job runs or the render queue processes a background render.
POST /video-configs/:videoId/render-preview
Render the description using the provided config, without saving anything. Used by the video editor's live preview panel.
Request body: Same shape as PUT /video-configs/:videoId.
Response:
{
"rendered": "Full rendered description string",
"hash": "sha256hex"
}
Notes:
- Nothing is persisted. The video's
renderedDescription,lastSyncedHash, andVideoConfigrow are all unchanged. - The preview renders against live data: the video's current metadata, active campaigns, and team variables at the time of the call.
collaboratorIdsin the request body is used for the preview render directly — it does not need to match the currently savedVideo.collaboratorIds. This allows the editor to preview with a collaborator selection before saving.- Active campaign blocks are appended automatically if their date window is currently active.