Clip tools take milliseconds on the clip’s playback timeline — the clip as watched, with cuts applied, the same timeline as
get_transcript, thumbnails, and previews. A start at or past the end of the clip is rejected with a 400.Three kinds of tool on this page use a different timeline, and say so on their startTimeMs:get_video_frameandget_video_previewcount from the video’s playback start, cumulative across clips.get_source_thumbnailcounts from the start of the raw source file — no clip cuts apply.get_storyboarddoes the same when given asourceId.- Stored cut definitions (
get_clip’s andupdate_clip’scuts) describe removed ranges of the raw recording. Cuts are always undoable by replacing them with[].
upload_clip
Add a new clip to a video from an uploaded source. Callcreate_source first, PUT the bytes to the returned uploadUrl, then pass the sourceId here.
string
required
Video ID
string
required
Source ID returned by
create_sourcestring
Clip name. Defaults to the next
Clip N.list_clips
List clips in a video, ordered by their position.string
required
Video ID
get_clip
Get a single clip’s details.string
required
Video ID
string
required
Clip ID
update_clip
Update a clip’s name, ordering, cuts, background, transition, Studio Sound opt-out, audio volumes, or animated cursor.string
required
Video ID
string
required
Clip ID
string
New clip name
integer
New position within the video
object[]
Replaces the clip’s full cut set. Each cut is
{startTimeMs, durationMs} in ms of the raw recording (the playback timeline you’d get after clearing all cuts). Pass [] to clear all cuts. To cut what you currently see, use cut_clip instead.object
Background
{type, color?, sourceId?, imageUrl?, videoUrl?, videoDurationSeconds?, gradientColor1?, gradientColor2?, gradientAngle?}. type is one of solid, image, video, gradient. For your own image or video, pass a sourceId from create_source (kind: "image" or kind: "video"). To use a catalog background, pass the exact background object returned by list_backgrounds; arbitrary image and video URLs are rejected.enum<string>
How this clip enters from the previous clip —
smooth, hard_cut, or default. Use default to remove the clip override and follow the video’s defaultClipTransition. The first clip has nothing to transition from.boolean
Per-clip Studio Sound opt-out.
false disables enhanced audio for this clip while the video-level switch (update_video’s studioSound) stays on; true re-enables it.number | null
Microphone volume for this clip only, overriding
update_video’s microphoneVolume. 1 is the recorded level, 0 mutes it, 2 doubles it. Pass null to clear the override so the clip follows the video again. Errors when the clip has no microphone audio to control.number | null
System audio (screen or uploaded footage) volume for this clip only, overriding
update_video’s systemAudioVolume. Same range and null-to-clear behaviour. Errors when the clip has no such audio to control.boolean
Draw an animated cursor from captured mouse data on this clip’s screen recording. Errors when the clip has no screen recording.
get_clip reports each volume as:
- a number — this clip overrides the video setting
null— it follows the video- absent — there is nothing to control: no such track, or a recording without audio, like a screen recording made without sharing system audio
transition, plus animatedCursor when the clip has a screen recording.
delete_clip
Remove a clip from its video.string
required
Video ID
string
required
Clip ID
duplicate_clip
Duplicate a clip. The copy is inserted right after the original by default.string
required
Video ID
string
required
Clip ID to duplicate
string
Name for the new clip
integer
Position for the new clip
reorder_clip
Move a clip to a new position; other clips shift to stay contiguous.string
required
Video ID
string
required
Clip ID
integer
required
New 0-based position
cut_clip
Cut one or more time ranges from a clip in a single call. Overlapping or adjacent ranges are merged into the clip’s existing cuts. To clear all cuts, callupdate_clip with cuts: [].
string
required
Video ID
string
required
Clip ID
object[]
required
Array of
{fromMs, toMs} ranges to cut, in ms (what you currently see and hear — the same timeline as get_transcript and get_silences). All ranges are resolved against the playback timeline as it is when the call starts, so send every range in one call instead of issuing many cut_clip calls.cut_clip_by_transcript
Cut one or more ranges from a clip by referencing word indices in the transcript. The server resolves each word’s exact start/end ms — no padding is applied. Useget_transcript to look up word indices.
string
required
Video ID
string
required
Clip ID
object[]
required
Array of
{fromWordIndex, toWordIndex} ranges. Both indices are inclusive and come from the clip’s transcript (indices are stable — already-cut words are simply absent).get_silences
Detect silent ranges in the clip’s audio, in ms on the clip’s playback timeline (cuts applied) — pass them directly tocut_clip. Silences already removed by cuts are not reported.
string
required
Video ID
string
required
Clip ID
integer
Minimum silence length to report, in ms. Defaults to 200.
remove_fillers
Auto-detect and cut filler words (“um”, “uh”, etc.) from the clip’s transcript.string
required
Video ID
string
required
Clip ID
remove_silences
Auto-detect and cut silent pauses from the clip’s audio, like the editor’s Remove silences tool.string
required
Video ID
string
required
Clip ID
enum<string>
How aggressively to remove silences —
natural cuts pauses longer than 800ms, fast longer than 500ms, faster longer than 300ms. Defaults to natural.list_sources
List the underlying recordings (camera, screen, mic) the clip was cut from, each with the volume it plays at in this clip:volume is the clip’s own override (null when it inherits) and effectiveVolume is what actually plays. Read these to inspect a mix; change it with update_clip’s microphoneVolume/systemAudioVolume.
string
required
Video ID
string
required
Clip ID
get_clip_frame
Get a rendered frame from a clip’s playback timeline (cuts applied), including the clip’s layouts, b-roll media, zooms, and masks. Forjpg, png, or webp, returns inline image content the model can see, plus a signed URL. For gif, returns the signed URL only (vision models don’t read animation, so the bytes aren’t inlined).
string
required
Video ID
string
required
Clip ID
enum<string>
jpg (default), png, webp, or gifinteger
Frame offset in ms on the clip’s playback timeline (default 0)
integer
Duration in ms when
format is gifinteger
Output width in pixels (default 320). The frame keeps the video’s aspect ratio.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
boolean
Suggest a download disposition on the signed URL
code: "thumbnail_not_ready" and status: "processing" instead of an image — retry once the video finishes processing. Other upstream failures return code: "thumbnail_fetch_failed" with a signed URL to fetch manually.
get_clip_preview
Get an MP4 preview from a clip’s rendered playback timeline. It returns a signed URL rather than inline video content.string
required
Video ID
string
required
Clip ID
integer
Preview offset in ms on the clip’s playback timeline (default 0)
integer
Preview duration in ms (default 5000, range 500–30000)
integer
1, 2, 5, 10, or 30 (default 30)integer
Output width in pixels. Defaults to 320. The preview keeps the video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
boolean
Suggest a download disposition on the signed URL
get_video_frame
Get a rendered frame from an entire video’s playback timeline. It returns the same processing results and accepts the same frame format and sizing options asget_clip_frame.
string
required
Video ID
enum<string>
jpg (default), png, webp, or gifinteger
Frame offset in ms from the video’s playback start (cumulative across clips, cuts applied)
integer
Duration in ms when
format is gifinteger
Output width in pixels. Defaults to 320 (small, cheap in LLM tokens). The frame keeps the video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
get_video_preview
Get an MP4 preview from an entire video’s rendered playback timeline. It returns a signed URL rather than inline video content.string
required
Video ID
integer
Preview offset in ms from the video’s playback start (cumulative across clips, cuts applied)
integer
Preview duration in ms (default 5000, range 500–30000)
integer
1, 2, 5, 10, or 30 (default 30)integer
Output width in pixels. Defaults to 320. The preview keeps the video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
get_storyboard
Get a fixed 4×4 WebP storyboard whose 16 tiles are sampled evenly across the requested window (durationMs/16 apart; every 5 seconds for the default 80s window).
- Returns inline WebP image content the model can inspect, plus JSON with the signed
url,columns,rows, andintervalMs. Tilei(row-major) shows the frame atstartTimeMs + i * intervalMs. - Pass
videoIdalone for the full story,videoIdwithclipIdfor a rendered clip, orsourceIdalone for a streaming upload.
string
Required for a story or clip. Video/story ID
string
Clip/scene ID; requires
videoIdstring
Required for a streaming upload. Source ID; cannot be combined with
videoId or clipIdinteger
Storyboard window start in ms on the selected target’s timeline (default 0): the video’s cumulative playback timeline, the clip’s playback timeline, or the raw source file.
integer
Window duration in ms (default 80,000ms). Pass the target’s full duration to sample the whole video end to end.
durationMs.
set_video_thumbnail
Set a video’s thumbnail. Two modes, mutually exclusive:- Uploaded image: call
create_sourcewithkind: "image", HTTP PUT the image bytes to the returneduploadUrl, then pass thesourceIdhere. - Frame from the video: pass
inpointMs, a time on the video’s playback timeline (cuts applied, cumulative across clips). Inspect candidate frames first withget_video_frame, passing the same value asstartTimeMs.
customThumbnailURL null — verify it through thumbnailInpointMs in the video’s settings from get_video.
string
required
Video ID
string
Uploaded image source ID
integer
Thumbnail frame time in ms
remove_video_thumbnail
Remove a video’s custom thumbnail (uploaded image or picked frame) and revert to the default auto-generated thumbnail.string
required
Video ID
get_source_thumbnail
Get a thumbnail of a specific source recording. Forjpg, png, or webp, returns inline image content plus a signed URL; for gif or mp4, returns the signed URL only.
string
required
Video ID
string
required
Clip ID
string
required
Source recording ID
enum<string>
jpg, png, webp, gif, or mp4integer
Frame offset in ms from the raw source file’s start — no clip cuts apply
integer
Duration of the animated preview (gif/mp4 only)
integer
Output width in pixels. Defaults to 320 (small, cheap in LLM tokens). The thumbnail keeps the video’s aspect ratio, so omit height to have it derived automatically.
integer
Output height in pixels. Derived from the video’s aspect ratio when omitted.
get_source_waveform
Get the waveform data for a source recording’s audio track.string
required
Video ID
string
required
Clip ID
string
required
Source recording ID
get_transcript
Transcript for the clip (cuts applied — what the viewer hears). Word indices are stable identifiers forcut_clip_by_transcript; they don’t shift when cuts change. To see words that were cut out, clear the cuts first (update_clip with cuts: []) — cuts are always undoable.
string
required
Video ID
string
required
Clip ID
update_transcript_words
Fix what the transcript says. Each edit addresses one word by itsindex from get_transcript and sets either text (the corrected wording, which also unhides the word) or hidden (whether the word shows in captions and subtitles) — never both. Returns the edited words in their new state.
- Corrections apply to the transcript, captions and subtitles together. The audio and the clip’s timing are untouched — use
cut_clip_by_transcriptto actually remove spoken words. - Send every correction for a clip in one call: at most one edit per word, and at most 100 words.
- Hiding or showing a word leaves its wording alone, so the two can be combined in any order.
string
required
Video ID
string
required
Clip ID
object[]
required
Array of
{index, text} or {index, hidden} edits, at most 100. Indices come from get_transcript; a word that is currently cut out of the clip can’t be edited.