MCP tool reference: all 82 tools and their parameters

Endpoint https://pagetovid.com/mcp. Generated from the server's own tool registration, so it always matches what tools/list returns. * marks a required parameter.

create_video · create_animation · cancel_video · get_video · release_video · get_video_embed · list_models · quote_cost · list_video_options · list_motions · list_themes · inspect_page · detect_brand · get_account · list_videos · get_storyboard · update_storyboard · rerender_video · translate_video · get_site_plan · generate_site_videos · create_show · list_shows · run_show · update_show · create_format · update_format · get_format · list_formats · fork_format · validate_format · preview_episode · verify_episode · register_mcp_connection · create_character · list_characters · list_commons_assets · generate_asset · list_assets · list_connections · create_object · list_objects · update_object · delete_object · import_objects · save_scene · list_scenes · copy_scene · create_motion · list_motion_templates · get_motion_template · update_motion_template · get_motion_grammar · validate_motion_spec · preview_motion · save_motion_spec · upload_asset · create_upload · list_voices · get_timeline · get_frames · set_brand_kit · get_brand_kit · set_account_defaults · list_options · invite_member · list_members · update_member · remove_member · create_review_link · request_approval · approve · request_changes · list_comments · add_comment · get_audit_log · set_webhook · rotate_webhook_secret · list_revisions · restore_revision · update_character · delete_character

create_video Create video from web page

[40 credits] [paid plans: + 40 per AI still unless ai_mode none; dry_run quotes] Turns a public web page into a narrated, captioned video. Spends credits unless draft:true: draft first and ask before a paid render; to only check a page, use inspect_page. PageToVid posts nowhere: the user gets an MP4, captions and a share page to publish themselves. Asynchronous (minutes, sometimes past fifteen): returns a receipt with the video_id at once; get_video for the full status. A page behind a login is filmed only with a capture session from the VS Code or browser extension (Scale plan and up).

destructive · openWorld

ParameterTypeDescription
url *stringPublic http(s) page to film; you must have the right to.
goalexplainer | ad | demo | tutorial | article
= "explainer"
What the video is for; shapes the script.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5
= "16:9"
9:16 (Reels/Shorts) films the page's MOBILE layout in a phone viewport; 16:9, 1:1 and 4:5 film the 1280-wide desktop layout.
languageen | fr | es | de | it | pt | nl | ar | hi | ko | pl | tr | svLanguage of the script and voiceover. Omitted: the page's own language, else its country domain's (.fr, .de…), else the account's.
target_secondsinteger
= 45
Length asked for: the words are written to fit it.
subtitlesboolean
= true
Burn captions in and emit a .vtt sidecar.
tonestring
= "energetic"
Narration delivery, e.g. calm, or a short direction.
voiceauto | Kore | Zephyr | Puck | Charon | Aoede | Fenrir | Leda | Orus | Callirrhoe | Achird | Sulafat | Sadachbia
= "auto"
Narrator (all multilingual). auto picks a voice that fits the goal and tone and differs from the site's previous films.
musicauto | none | uplift | corporate | chill | cinematic | ambient | pulse | playful | warm
= "auto"
Music bed, "none", or "asset:<id>" (upload_asset). auto fits the goal and differs from the site's previous films.
brand_namestringName on the intro and outro cards; default the site's.
focusstringContext the page cannot show (an offer, the audience, a code, what to avoid). Anything here may be voiced as FACT in the customer's voice; a line in quotation marks is placed verbatim, usually as the hook.
idempotency_keystringSame key within 24 h returns the original video, uncharged. Without one, an identical call within 120 s returns the first video (idempotent_replay).
themeobjectPalette, type and mode; list_themes has the presets and rules, detect_brand reads a site's. Omitted: a filmed video adopts the page's CSS.
introbooleanOpening title card (1.5 s). Omitted: true, except goal "ad" (opens on its hook).
outroboolean
= true
Closing call-to-action card.
routingobject{planner?: flash|pro, footage?: prefer-recorded|record-fresh}. flash is the benched default (pro is a choice, not an upgrade); prefer-recorded reuses the site's banked flow recordings.
lookclean | bold | editorial | playful | tech | auto
= "auto"
The film's look: captions, cutting, sound cues, music family and motion together; auto varies with goal, shape and the site's films (list_video_options).
caption_stylekaraoke | bold | boxed | minimal | outlineOverrides the look's captions.
caption_animationnone | pop | bounce | wave | glow | slideWhat a spoken word does; overrides the look's.
caption_emphasismanual | auto | noneBrand-coloured words: **asterisked** (manual), plus figures (auto), or none.
gradenone | warm | cool | vivid | mono | vintage | contrastFootage colour grade; overrides the look's.
sfx_leveloff | subtle | fullSound-design loudness; overrides the look's.
calloutnone | ring | arrow | underline | dimWhat points at a screencast's subject.
cursor_stylearrow | hand | dot | noneThe pointer a recording draws.
press_effectpunch | freeze | slowmo | noneWhat the picture does on a click.
end_screencta | qr | social | logo | noneThe closing card.
edit_styletiktok_punchy | documentary | corporate | cinematicCutting rhythm (list_motions); a scene's own transition still wins.
ai_modenone | assist | richAI visuals for beats the page cannot show (paid plans): none; assist = a few stills; rich = stills and clips within ai_budget. Omitted: assist where the plan generates, else none. Charged per visual, refunded on failure.
ai_budgetobjectCeiling on AI visuals, given to the planner.
modelstringClip model (list_models) for ai_mode rich, or auto (routed per scene, see optimize); omit for the house clip.
optimizequality | balanced | speed | costWith model auto: quality, balanced (default), speed or cost.
quality_gateobjectauto_fix (default): dead air and colliding overlays fixed before rendering (auto_fixes). hold: also, a film scored under min_score ends "held" until release_video. deliver: as authored. The score judged is the film's measured score: its storyboard check less the length and pace penalties measured on the rendered film.
generate_motionbooleanCustom motion graphics for beats no built-in visual fits (AI plans or a film pass, else built-in).
outputsarrayOne storyboard in 1-4 shapes: the first is this video (replaces aspect_ratio), each other a sibling (get_video formats), a render each, started when the first ends.
draftbooleanFree preview: 1/3 resolution, DRAFT mark, no AI visuals. 5/hour. rerender_video without draft then makes the paid film, no re-plan.
callback_urlstringhttps URL POSTed a JSON event when the render ends (done/held/error/cancelled), 3 tries. Verify: X-PageToVid-Signature = "sha256=" + hex HMAC-SHA256(secret, X-PageToVid-Timestamp + "." + raw body); refuse timestamps over 5 min old. Secret: webhook_secret, shown once, or rotate_webhook_secret.
dry_runbooleanQuote only; nothing made or charged.
max_creditsintegerRefuse (budget_exceeded + quote) above this.
pronunciationsarrayVoice-only lexicon, e.g. [{"text":"Nginx","say":"engine x"}]; captions keep the text.

create_animation Create an animated video from your own content

[40 credits] From content you hold (figures, notes, story), no URL. You write scenes; each drawn, voiced, captioned (list_motions: 25 visuals, some with kinds; visual "rushie" = 964 designed cards, e.g. data {rushie:{template:"end-card",props:{headline,mark,url,cta}}}). AI clips (paid plans) only if asked: data.generate (+data.clip) per scene, or ai_mode rich (assist: stills), the server picks scenes, writes prompts; dry_run shows ai_plan.added. Returns a receipt; get_video for the full status.

destructive

ParameterTypeDescription
scenes *arrayThe scenes, in order, 1-20, all validated before anything is charged. On top of the render, a still (data.generate) costs 40 and a clip (data.clip) 311, refunded if it fails.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5
= "16:9"
16:9 for web and YouTube, 9:16 for Reels/Shorts/TikTok, 1:1 and 4:5 (1080×1350) for feeds.
languagestring
= "en"
As create_video. Write the narration in it.
voicestring
= "auto"
As create_video, plus none: no narrator (also when no scene is narrated).
goalexplainer | ad | demo | tutorial | articleSets the auto look, music, voice and cuts. Omitted: explainer.
musicstring
= "auto"
As create_video.
tonestring
= "energetic"
As create_video.
subtitlesboolean
= true
As create_video.
introboolean
= true
Include the branded opening title card.
outroboolean
= true
As create_video.
target_secondsintegerA check, not a setting: your words set the length. A script over 15% off is refused before any credit moves, with the words to cut or add. Omitted: the scenes alone must run at least 15 s, the film at most 300 s.
titlestringName for the video. Defaults to the first scene's heading.
brand_namestringName shown on the intro and outro cards.
cta_textstringCall to action on the closing card.
source_urlstringAttribution only; nothing is fetched or filmed.
themeobjectAs create_video. Omitted: the house palette.
lookclean | bold | editorial | playful | tech | auto
= "auto"
As create_video.
caption_stylekaraoke | bold | boxed | minimal | outlineAs create_video.
caption_animationnone | pop | bounce | wave | glow | slideAs create_video.
caption_emphasismanual | auto | noneAs create_video.
gradenone | warm | cool | vivid | mono | vintage | contrastAs create_video.
sfx_leveloff | subtle | fullAs create_video.
calloutnone | ring | arrow | underline | dimAs create_video.
cursor_stylearrow | hand | dot | noneAs create_video.
press_effectpunch | freeze | slowmo | noneAs create_video.
end_screencta | qr | social | logo | noneAs create_video.
edit_styletiktok_punchy | documentary | corporate | cinematicAs create_video.
pronunciationsarrayAs create_video.
generate_motionbooleanAs create_video.
ai_modenone | assist | richAs create_video. Server picks scenes and prompts; omitted: data.generate only.
ai_budgetobjectA ceiling on this render's AI generation; the receipt's ai_plan says what was asked for and its cost. Omitted: uncapped.
modelstringAs create_video.
characterstringWith ai_mode: in every added shot.
objectsarrayWith ai_mode: in every added shot.
idempotency_keystringAs create_video.
outputsarrayAs create_video.
draftbooleanAs create_video.
callback_urlstringAs create_video.
dry_runbooleanQuote only; nothing made or charged.
max_creditsintegerRefuse (budget_exceeded + quote) above this.

cancel_video Stop a render and get the credits back

[Free] Stops a running render and refunds its render credit and any AI visual still in flight; AI visuals already made stay (reused free). Use it when get_storyboard shows a plan you do not want. A finished render cannot be cancelled. The video is marked cancelled at once; the worker stops at its next step.

destructive · idempotent

ParameterTypeDescription
video_id *stringThe running video to stop.

get_video Get video status and links

[Free] Reads this account. The full status of a render: phase and progress while it runs (with poll_after_seconds), then the files, length, credits, warnings and quality; on a free film, `upgrade` to relay once. `status` is one of, in pipeline order: draft, queued, analyzing, scripting, recording, voicing, rendering, held, done, error. In flight, so poll again after poll_after_seconds: queued, analyzing, scripting, recording, voicing, rendering. Terminal, so stop polling: held, done, error — a cancelled render ends as error with the reason in `error`, and a film can be done and still carry warnings. held: finished but unpublished by quality_gate. draft has not been queued.

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video_id returned by create_video.

release_video Publish a held video

[Free] Publishes a video its quality_gate held (status "held") as it is: status becomes done. Nothing is re-rendered.

destructive · idempotent

ParameterTypeDescription
video_id *stringThe held video.

get_video_embed Get embed and SEO tags for a video

[Free] Returns ready-to-paste markup for a finished PageToVid video: an HTML video element, Open Graph and Twitter player meta tags so the page unfurls as a playable video, and a schema.org VideoObject JSON-LD block.

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video_id of a finished render.
page_urlstringThe page this markup will be pasted into. Used for og:url so a share resolves to your page rather than nothing.
titlestringOverrides the title in the share card. Defaults to the video's own title.
descriptionstringOverrides the share description. Defaults to a sentence written in the video's language.

list_models List generation models and prices

[Free] Every model this account can generate clips and stills with — capabilities, limits and the exact credit price — before spending anything. Omit model in a scene for the house clip; name one (data.model, or set_inset model) to choose it and pay its price. quote_cost prices a specific request.

readOnly · idempotent

ParameterTypeDescription
modalityvideo | imageOnly video or only image models.
include_unavailablebooleanAlso list models this account cannot use now, with the reason.

quote_cost Quote a cost before spending

[Free] What something will cost, spending nothing: one generation (kind clip or image, optional model, duration_s, resolution, role, count), or a video_id's next rerender_video (render plus every AI visual not yet made). A length between two a model makes is rounded UP, with a warning; one it cannot make is refused with what it can. plan_note says when this plan has no AI generation.

readOnly · idempotent

ParameterTypeDescription
video_idstringPrice the next rerender_video of this video.
kindclip | imagePrice one generation of this kind.
modelstringA model id from list_models. Omit for the house model.
duration_snumberClip length in seconds, within the model's range.
resolution480p | 720p | 768p | 1080p | 2k | 4kClip resolution, one the model offers.
rolescene | insetA full-frame scene or a presenter in a corner (a presenter uses the cheapest resolution).
countintegerHow many, 1-4.

list_video_options List available video options

[Free] Lists what create_video accepts: goals, aspect ratios, languages, voices, background music beds (9, each with a family: calm, energetic, serious, playful) and the allowed length range. Static reference data — no account access.

readOnly · idempotent

list_motions List animation styles

[Free] How a scene can look: 26 visuals, 1129 animations, motions, transitions, fx. Check pairs before writing scenes. New: get_motion_grammar.

readOnly · idempotent

ParameterTypeDescription
rushiestringSearch: words, id or beat (+9:16/1:1).
for_scenestringNarration → 5 picks.

list_themes List theme presets and the rules a theme must satisfy

[Free] Lists what the theme parameter accepts: the built-in presets, the modes, the type faces the renderer can load, and the contrast and palette rules enforced before a credit moves. Static reference data.

readOnly · idempotent

inspect_page See what is on a page worth filming

[Free] Use this, not web browsing, to check a page: it sees what the recorder will. Creates nothing; then ask. Opens a public page in a real browser and ranks what a video could film — calls to action, images, cards, search boxes, headings — each with a CSS selector, kind, size and a ranking score. Says when a robot check, sign-in or missing page stood in front of it (blocked, block_kind), and which fields will never be typed into.

readOnly · idempotent · openWorld

ParameterTypeDescription
url *stringA public page to look at. Nothing is filmed and no credit is spent.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5The viewport to look through. 9:16 loads the page as a phone does, which is the layout a vertical video films — a responsive site offers different elements there (a sticky call bar, stacked cards) and they score differently.
limitinteger
= 12
How many candidates to return, best first (a page offers up to 40; a film uses four or five). The `kinds` histogram still counts every one.
kindsstringComma-separated kinds to keep, e.g. "cta,search,card". The vocabulary is in the `kinds` histogram of any reply: cta, media, image, card, pricing, testimonial, logos, heading, section, nav, search, chat, input. Omitted, every kind is offered.

detect_brand Read a site's colours and typography

[Free] Reads a public page's design tokens from its live CSS: accent colours, heading typeface, light or dark ground, corner style. Returns a theme ready for create_video, create_animation or rerender_video, plus any site colour the film cannot paint with and why.

readOnly · idempotent · openWorld

ParameterTypeDescription
url *stringA public page of the site. A heavy home page can time out (read_failed); then try a content page.

get_account Get plan and credit balance

[Free] Reads this account. CALL THIS FIRST: plan, credits, whether AI visuals are available and charged, watermark, revisions, film passes, add-on clips, renders running, limits. Then: inspect_page (in the aspect you will film), create_video or create_animation, get_storyboard (the chosen shots), update_storyboard, rerender_video.

readOnly · idempotent

list_videos List videos on this account

[Free] Reads this account. Lists videos newest first with their status and, when finished, their links. Filter by status or by a word in the page URL or title. Returns a cursor when more remain.

readOnly · idempotent

ParameterTypeDescription
statusany | queued | analyzing | scripting | recording | voicing | rendering | held | done | error
= "any"
Only videos in this state.
querystringMatches part of the source URL or the title.
created_afterstringISO 8601 timestamp; only videos created after it.
cursorstringThe next_cursor from a previous call. Opaque — pass it back unchanged.
limitinteger
= 10
How many to return.

get_storyboard Get the scenes of a video

[Free] Reads this account. Returns the scene-by-scene plan of a video: what each scene narrates, its on-screen caption, how long it holds, and whether it is real footage of the page or a motion graphic (and which motion).

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video_id to read.

update_storyboard Edit the scenes of a video

[Free] Edits a video's storyboard in 24 operations, each described on its branch: words, captions, visuals (incl. "rushie" designed cards: data.rushie {template, props}), data, shots, scenes, transitions, fx, presenter, voice, music, look. Does not re-render — rerender_video makes the new film. Every call is snapshotted, so an edit can be undone (list_revisions).

ParameterTypeDescription
video_id *stringThe video to edit. Its scene ids come from get_storyboard.
operations *arrayThe changes, in order, up to 20; all are validated before any is written, so a bad batch changes nothing. A wrong figure is set_data plus one rerender_video, not a new video.

rerender_video Re-render a video from its storyboard

[40 credits] [free: captions_only once per paid render, then 10 credits; a missed length target once] A new film from the video's current storyboard, without re-planning, plus any AI visual not yet made (quote_cost prices it). Free once per video when the film missed its length target (length_within_tolerance: false). The file is replaced when the new render finishes. Returns a start receipt; call get_video for the full status.

destructive · openWorld

ParameterTypeDescription
video_id *stringThe video to re-render.
themeobjectAs create_video; replaces the video's theme and is kept for later re-renders.
idempotency_keystringA caller-chosen id for this request. Sending the same key again within 24 hours returns the same re-render instead of starting and charging a second time — use it if your client may retry.
captions_onlybooleantrue re-times the subtitles on the existing voice track and renders again; nothing is re-recorded, re-scripted or re-voiced. The first resync after a paid render is free, the next costs 10 credits (the voice is reused). set_options (subtitles, intro, outro) is applied by the same pass.
target_secondsintegerWhat this film should run now, if it has legitimately grown or shrunk since creation. length_within_tolerance is measured against it and later re-renders keep it; their length fit aims at it (words you wrote are retimed, never rewritten).
quality_gateobjectAs create_video, for this render.
outputsarrayAs create_video; must include this video's shape. Other shapes re-render their sibling or make one, a render each.
draftbooleanAs create_video; only before the first paid render.
callback_urlstringAs create_video, for this render.
dry_runbooleanQuote only; nothing made or charged.
max_creditsintegerRefuse (budget_exceeded + quote) above this.

translate_video Translate a video into other languages

[40 credits] per language: a NEW video from an existing one — same storyboard and pictures, narration translated, re-voiced and re-captioned, card text (rushie cards too) translated. Filmed scenes are re-recorded on the site's page in that language when it has one (hreflang), else the footage is reused and `scenes` says so. Charged and refunded like any render; AI visuals already made are reused free.

destructive · openWorld

ParameterTypeDescription
video_id *stringA finished video.
languages *arrayOne new video each.
idempotency_keystringSame key within 24 h returns the videos already started, uncharged.

get_site_plan Get the video plan for a whole site

[Free] Up to 5 ranked videos a site should have, one per subject: goal, pitch, the real page it films (checked), the video made; detail full adds the brief, sources and shots. First call generates it (~10-20 s, no credit), then banks the site's images, videos and page clips in the background (media counts them). generate_site_videos works from it.

idempotent · openWorld

ParameterTypeDescription
site_url *stringAny public http(s) URL on the site; the site is identified by its domain.
languageen | fr | es | de | it | pt | nl | ar | hi | ko | pl | tr | sv
= "en"
Language the ideas and shot list are written in. This is the planner's working language, not the videos' — generate_site_videos sets that.
refreshboolean
= false
true regenerates the plan even if one exists, overwriting it. A plan is generated automatically the first time.
limitinteger
= 5
How many ideas, best first.
detailshort | full
= "short"
short: title, goal, pitch, page and whether it was made. full: also the brief (focus), its sources, audience, tone and shots.

generate_site_videos Make the videos a site's plan asks for

[40 credits] Per video started. One filmed video per get_site_plan idea without one (or the idea_ids given), of its verified page with its sourced brief as focus. Without confirm it lists what it would make and the cost, capped at the balance (the rest under needs_credits), creating nothing; confirm=true starts those. get_video reports each. A retry never starts an idea twice.

openWorld

ParameterTypeDescription
site_url *stringAny public http(s) URL on the site; the site is identified by its domain.
idea_idsarrayWhich ideas from get_site_plan to make, in order. Omitted: every idea that has no video yet.
urlstringThe page to film for every video. Omitted, each idea films its own verified page (page_url in get_site_plan).
aspect_ratio16:9 | 9:16 | 1:1 | 4:5
= "16:9"
As create_video.
languagestring
= "en"
As create_video.
voicestring
= "auto"
As create_video.
musicstring
= "auto"
As create_video.
subtitlesboolean
= true
As create_video.
introboolean
= true
Include the branded opening title card.
outroboolean
= true
As create_video.
brand_namestringName shown on the intro and outro cards.
themeobjectAs create_video.
lookclean | bold | editorial | playful | tech | auto
= "auto"
As create_video.
caption_stylekaraoke | bold | boxed | minimal | outlineAs create_video.
confirmboolean
= false
false (the default) previews the videos and spends nothing. true starts them and spends 40 credits each.
max_videosinteger
= 5
At most this many videos in one call. Call again for the rest.

create_show Create a show: a recurring video from a feed

[Free] A show makes a video from each new item in a feed: a weekly release video from a changelog, a daily listing video from an RSS feed, a clip per new post. Episodes are ordinary videos made by run_show or, once confirmed, by the scheduler at the show's cadence. A new show is HELD: nothing renders until its owner has called run_show once with confirm=true, and it never spends more than max_credits_per_day.

openWorld

ParameterTypeDescription
site_url *stringAny public http(s) URL on the site; the site is identified by its domain.
name *stringThe show's name, e.g. "Le mot du chantier". Available as {{show}} in templates.
kindvideo | animation
= "video"
video: each episode films the item's own page (like create_video) with focus_template as its brief. animation: each episode is drawn from `scenes` (like create_animation) with the item's data filled in.
feed_kindrss | json | manual | query | watchlist | webhook
= "rss"
rss: RSS/Atom. json: a JSON Feed or any JSON API via feed_map. query: one call per run on a registered connection (`source`). watchlist: the fixed items in `watchlist`. webhook: another system POSTs items to the show's webhook URL, signed with the secret returned once (X-PageToVid-Signature: sha256=HMAC of the body); cadence manual. manual: items passed to run_show, never scheduled.
feed_urlstringThe feed's public URL for rss and json. It is read once now to make sure it parses.
sourceobjectfeed_kind query: {call: {mcp: alias, tool, input} | {http: url, query}, select: an expression into the answer that yields the list, map: dotted paths from an element to the item ({id, title, summary, link, image, date})}. Strings in the input may carry {{ show }}, {{ site }} and {{ now }}. Called once now to make sure it answers.
watchlistarrayfeed_kind watchlist: the items, as run_show takes them. Each is made once — or once per period with repeat_every.
repeat_everynone | month | quarter | year
= "none"
query and watchlist shows: make every item again each period (the period is in the episode key and available to a programme as {{ item.period }}). none: each item once, ever.
feed_mapobjectFor feed_kind json when the document is not a JSON Feed: dotted paths, e.g. {"items":"data.results","id":"slug","title":"name","summary":"excerpt","link":"href","image":"cover.url","date":"published_at"}. `items` may be omitted when the document is an array.
cadencemanual | hourly | daily | weeklyHow often the scheduler runs the show once it is confirmed. manual: only when run_show is called. Default daily; manual for manual and webhook feeds.
max_episodes_per_runinteger
= 1
Newest items first; at most this many episodes per run.
max_credits_per_dayinteger
= 120
The show never spends more than this in a UTC day, however many items the feed gains. An episode is 40 credits.
format_idstringRun an existing format (create_format / list_formats) instead of the fields below; its kind must match. Without it, the fields below become the show's own format, version 1, editable later with update_format.
format_versionintegerWith format_id: pin the show to this version. Omitted, the show follows the format's latest version.
goalexplainer | ad | demo | tutorial | article
= "explainer"
As create_format.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5
= "16:9"
As create_format.
languagestring
= "en"
As create_format.
target_secondsintegerAs create_format.
tonestring
= "energetic"
As create_format.
voicestring
= "auto"
As create_format.
musicstring
= "auto"
As create_format.
subtitlesboolean
= true
As create_format.
introboolean
= true
As create_format.
outroboolean
= true
As create_format.
brand_namestringAs create_format.
themeobjectAs create_video.
focus_templatestringAs create_format. Omitted: a brief leading with the item's title and summary.
title_templatestringAs create_format.
scenesarrayAs create_format. An image scene whose {{image}} is empty for an item is dropped from that episode.
routingobjectAs create_format.

list_shows List shows

[Free] Reads this account. Lists the shows on this account — or one site's — with their cadence, caps, whether each is confirmed or still held, what it spent today, and its five most recent episodes with the video each became.

readOnly · idempotent

ParameterTypeDescription
site_urlstringOnly this site's shows. Omitted: every show on the account.

run_show Run a show now

[40 credits] Per episode started. Reads the show's feed (or the items given), skips items already made, and — within max_episodes_per_run and max_credits_per_day — starts one video per new item. Without confirm: the list, nothing spent. On a held show, confirm=true is the owner's one-time approval: it makes the episodes and lets the scheduler run the show from then on.

openWorld

ParameterTypeDescription
show_id *stringThe show_id from create_show or list_shows.
confirmboolean
= false
false (the default): a free preview of the episodes this run would make. true: make them, and on a held show, confirm it — from then on the scheduler runs it at its cadence.
itemsarrayThe items to make episodes from, for a manual show. A feed show ignores this and reads its feed.

update_show Pause, resume or retune a show

[Free] Changes a show's switch, cadence, caps or name, or moves it to another format or format version. The template itself is edited with update_format, which writes a new version and leaves every episode already made where it is. Nothing is rendered.

idempotent

ParameterTypeDescription
show_id *stringThe show_id from create_show or list_shows.
activebooleanfalse pauses the show (the scheduler skips it, run_show refuses); true resumes it.
cadencemanual | hourly | daily | weeklyA new cadence.
max_episodes_per_runintegerA new per-run cap.
max_credits_per_dayintegerA new daily credit cap (an episode is 40 credits).
namestringA new name.
format_idstringMove the show to another format of the same kind.
format_versionintegerPin the show to this version of its format.
format_version_latestbooleantrue unpins the show so it follows its format's latest version.
sourceobjectquery shows: a new source (same shape as create_show).
watchlistarraywatchlist shows: the new list; it replaces the old one. Items already made stay made.
repeat_everynone | month | quarter | yearquery and watchlist shows: a new period, or none to stop repeating.
rotate_webhook_secretbooleanwebhook shows: mint a new signing secret (returned once in this call's webhook_secret); the old one stops working at once.

create_format Create a format: the reusable shape of a programme

[Free] A format is how an episode is made — aspect, language, voice, music, tone, goal, length, cards, brand, theme, the brief or the scene templates — and knows nothing about any subject. It is versioned: update_format writes a new version, shows pin one or follow latest, and every episode records the version that made it. Validated now against a sample item; nothing is rendered.

ParameterTypeDescription
site_url *stringAny public http(s) URL on the site the format belongs to; the site is identified by its domain.
name *stringThe format's name, e.g. "Le mot du chantier". Available as {{show}} in templates.
kindvideo | animation
= "video"
video: episodes film the item's page. animation: episodes are drawn from `scenes` with the item's data filled in.
goalexplainer | ad | demo | tutorial | article
= "explainer"
What the video is for; shapes the script.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5
= "16:9"
16:9 for web and YouTube, 9:16 for Reels/Shorts/TikTok, 1:1 and 4:5 (1080×1350) for feeds.
languageen | fr | es | de | it | pt | nl | ar | hi | ko | pl | tr | sv
= "en"
Language of the voiceover and captions. Write the narration in this language.
target_secondsintegerA check, not a setting: your words set the length. A script over 15% off is refused before any credit moves, with the words to cut or add. Omitted: the scenes alone must run at least 15 s, the film at most 300 s.
tonestring
= "energetic"
Delivery of the narration, up to 80 characters — e.g. energetic, calm, authoritative, or a short direction like "dry and deadpan, like a friend telling a story".
voiceauto | Kore | Zephyr | Puck | Charon | Aoede | Fenrir | Leda | Orus | Callirrhoe | Achird | Sulafat | Sadachbia
= "auto"
Narrator (all multilingual). auto picks a voice that fits the goal and tone and differs from the site's previous films.
musicauto | none | uplift | corporate | chill | cinematic | ambient | pulse | playful | warm
= "auto"
Music bed, "none", or "asset:<id>" (upload_asset). auto fits the goal and differs from the site's previous films.
subtitlesboolean
= true
Burn captions into the picture and emit a .vtt sidecar.
introboolean
= true
Include the branded opening title card.
outroboolean
= true
Include the closing call-to-action card.
brand_namestringName shown on the intro and outro cards.
themeobjectAs create_video.
focus_templatestringvideo formats: the brief every episode's script writer gets, with {{title}} {{summary}} {{link}} {{date}} {{image}} {{show}} {{site}} filled from the item.
title_templatestringanimation formats: the episode's title, same placeholders. Default "{{show}} — {{title}}".
scenesarrayanimation formats: the scene templates, as create_animation's scenes (not from_library), with the placeholders in any string.
programmeobjectanimation formats: the programme instead of plain scenes. {beats: [...], resolvers: [...], computed: {...}, requires_beats: [...], reject_if: [...]}. A beat is a scene (visual, motion, mood, heading, caption, narration, data) plus beat (one of cold_open, title, identity, context, trend, breakdown, outlier, comparison, caveats, verdict, sources), when (an expression; dropped when not true) and for_each (an expression yielding a list; repeated per element). Any string may carry {{ expressions }} — dotted paths and filters such as money(EUR,M), percent(0), say, sort_by(year), take_last(6), map({label: year, value: total}) — and any field may be {"$bind": "expression"} to receive a real number, list or object (a chart's points). Resolvers fetch data before compiling: {id, call: {mcp: alias, tool, input} | {http: url, query, body}, select, required, on_missing: skip_episode | drop_beats(a,b) | use_default | fail_loud, cache: "30d"}; each reads what the ones before it bound. Every numeral in a narration or caption must come from an expression: a figure typed by hand fails validation by beat. validate_format checks the template; preview_episode runs the resolvers and compiles a real episode for free.
routingobjectHow episodes are made: {planner?: flash|pro, footage?: prefer-recorded|record-fresh}. flash is the benched default (it beat every larger model under the real prompt); pro is a deliberate choice. prefer-recorded uses the site's banked flow recordings when they match a scene; record-fresh films every episode anew, for a subject that changes each time.

update_format Revise a format: writes a new version

[Free] Changes any of a format's template fields. The result is a NEW version — the previous ones stay exactly as they were, and every episode already made keeps the version that made it. Shows following latest use the new version from their next run; pinned shows do not move until update_show moves them. Validated whole before anything is written.

destructive

ParameterTypeDescription
format_id *stringThe format_id from create_format or list_formats.
namestringA new name.
notestringWhat this version changes, for the version history.
goalexplainer | ad | demo | tutorial | articleAs create_format.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5As create_format.
languagestringAs create_format.
target_secondsintegerAs create_format.
tonestringAs create_format.
voicestringAs create_format.
musicstringAs create_format.
subtitlesbooleanAs create_format.
introbooleanAs create_format.
outrobooleanAs create_format.
brand_namestringAs create_format.
themeobjectAs create_video.
focus_templatestringAs create_format.
title_templatestringAs create_format.
scenesarrayanimation formats: the scene templates, as create_animation's scenes (not from_library), with the placeholders in any string.
programmeobjectAs create_format.
routingobjectAs create_format.

get_format Read a format and its versions

[Free] The format's current template, its version history and the shows that run it, with each show's pin.

readOnly · idempotent

ParameterTypeDescription
format_id *stringThe format_id from create_format or list_formats.

list_formats List formats

[Free] The account's formats, newest change first, with versions and the shows running each.

readOnly · idempotent

ParameterTypeDescription
site_urlstringOnly this site's formats. Omitted, every format on the account.

fork_format Copy a format

[Free] A new format whose version 1 is the original's latest version, unpinned from its parent. Edit the copy without touching the original.

ParameterTypeDescription
format_id *stringThe format_id from create_format or list_formats.
namestringThe copy's name. Default: the original's name with " (copy)".
site_urlstringThe site the copy belongs to. Default: the original's site.

validate_format Validate a format against a sample item

[Free] Compiles the template against a sample item, touching no database or feed: the catalogue checks (voice, music, language, theme…), the scene templates filled and checked as an animation, and what the first episode's title, brief and scene count would be. Returns problems by field; nothing is created, rendered or charged.

readOnly · idempotent

ParameterTypeDescription
namestring
= "Preview"
The format's name, for {{show}}.
kindvideo | animation
= "video"
video or animation.
goalexplainer | ad | demo | tutorial | article
= "explainer"
As create_format.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5
= "16:9"
As create_format.
languagestring
= "en"
As create_format.
target_secondsintegerAs create_format.
tonestring
= "energetic"
As create_format.
voicestring
= "auto"
As create_format.
musicstring
= "auto"
As create_format.
subtitlesboolean
= true
As create_format.
introboolean
= true
As create_format.
outroboolean
= true
As create_format.
brand_namestringAs create_format.
themeobjectAs create_video.
focus_templatestringAs create_format.
title_templatestringAs create_format.
scenesarrayanimation formats: the scene templates, as create_animation's scenes (not from_library), with the placeholders in any string.
programmeobjectAs create_format.
routingobjectAs create_format.

preview_episode Preview one episode of a format, for free

[Free] Runs the format's resolvers against the item (real calls, cached) and compiles the storyboard: every beat's final text, the beats dropped and why, the integrity report and where every bound value came from. Nothing is rendered. Read it before run_show confirm=true.

readOnly · idempotent · openWorld

ParameterTypeDescription
format_id *stringThe format_id from create_format or list_formats.
format_versionintegerPreview this version; omitted, the latest.
itemobjectThe item to make the episode of: {title, summary, link, image, date}. Omitted, a sample item.

verify_episode Verify what a video says against its record

[Free] The proof behind a film: the format version that made it (template SHA-256), every resolver source and what it fetched, the integrity report, the claim ledger (which figures trace to the page, the brief or nothing), the Content Credentials (C2PA), and a check recompiling the stored data against the narration word for word.

readOnly · idempotent

ParameterTypeDescription
episode_idstringThe episode to verify, from run_show or a show's recent_episodes.
video_idstringOr a video id: the episode is found through it when there is one; a plain video is verified on its claim ledger and credentials.

register_mcp_connection Name an upstream server for resolvers

[Free] Stores a connection under an alias — the URL and, optionally, a credential kept encrypted on this account — and REPLACES the alias if it already exists, which changes what every format naming it will call on its next run. This tool itself calls nothing: a format's resolvers use the connection only when preview_episode or run_show runs it. Formats refer to the alias only, so a format never carries a secret and is safe to publish or fork. Nothing is called now.

destructive · idempotent

ParameterTypeDescription
alias *stringThe name a format's resolvers use: {"mcp": "finance_ds", ...}. Letters, digits, underscore.
url *stringThe server's public http(s) address: an MCP endpoint (streamable HTTP) or an http API base.
kindmcp | http
= "mcp"
mcp: JSON-RPC tools/call. http: plain JSON endpoints under this base.
secretstringA bearer token or API key sent as Authorization: Bearer. Stored encrypted, never returned, never in a format.
notestringWhat this server is, for the list.

create_character Create a reusable character for consistent clips

[Free or 40 credits] Names a character so generated clips that name it keep one identity. refs (1 to 3 image URLs on this account) is free; a generate prompt DRAWS the reference (paid plans, refunded on failure). Then an image scene's data.clip=true and data.character="<name>". From one of your films take raw_frame_url, never thumbnail_url: its burnt-in text teaches the generator to draw text.

idempotent

ParameterTypeDescription
name *stringThe character's name, e.g. "Ada, the founder". A clip scene names it in data.character to stay consistent.
refsarray1 to 3 reference image URLs — media on this account (a generated still, a bank asset, a commons asset from list_commons_assets). These become Veo's ingredients so the same character recurs. Give these OR a generate prompt.
generatestringDraw the reference portrait instead of supplying one — e.g. "a woman in her late twenties, platinum blonde, grey tee". Paid plans: 40 credits (one still), refunded if it fails. Ignored when refs are given.
descriptionstringA short line describing the character, added to every clip's prompt so words and image agree.
site_urlstringScope the character to one site.

list_characters List the account's characters

[Free] The reusable characters on this account, each with its reference images and description.

readOnly · idempotent

list_commons_assets Browse the asset commons

[Free] Media people shared from their banks for anyone's films — logos, product shots, illustrations, recorded flows — with tags, a licence and the site to credit. An image scene takes an asset's id as data.asset_id (or its url as imageUrl); a gallery takes urls. Only assets their owners switched to shared.

readOnly · idempotent

ParameterTypeDescription
kindimage | videoOnly images, or only clips.
tagstringOne tag, e.g. logo, dashboard, person.
qstringA word to find in tags or the asset's brief.
limitintegerAt most this many, newest first (default 40).

generate_asset Generate one image or clip, without making a video

[40 or 311 credits] One AI still (40 credits each) or clip (house 311, a named model its list_models price) straight into your bank — no render. A still takes model, aspect_ratio, count, negative_prompt, no_faces, character, objects; the rest are clip controls. 6 calls a minute. Clip controls are refused, with the allowed values, when the model is not sent them; model auto picks one and says why. best_of makes N and keeps the best graded (all N charged). Charged before, refunded on failure; dry_run quotes it free. Paid plans. A clip takes 1-3 min: the call answers generating within 45 s; call again with the SAME idempotency_key (or arguments) to collect it, never charged twice.

destructive

ParameterTypeDescription
kindimage | videoimage (a still) or video (a clip). Default image.
prompt *stringWhat to draw or film.
aspect_ratio16:9 | 9:16 | 1:1 | 4:5 | 21:9Default 16:9. 21:9 and 4:5 only where list_models says the model takes them.
modelstringlist_models id, house, house-image, or auto (clips; see optimize).
countintegerStills: how many, each charged.
no_facesbooleanStills: no face or head; people as hands.
optimizequality | balanced | speed | costFor model auto. Default balanced.
duration_sintegerSeconds (list_models range).
resolution480p | 720p | 768p | 1080p | 2k | 4kOne the model offers.
first_framestringBank image id/URL to start on.
last_framestringBank image to end on.
seedintegerWhere the model takes one.
negative_promptstringStills: an Avoid clause. Clips: where the model takes one.
cameraobjectFolded into the prompt.
shotwide | medium | close_upFolded into the prompt.
best_ofintegerN graded, best kept, all charged.
dry_runbooleanQuote only; nothing made or charged.
max_creditsintegerRefuse (budget_exceeded + quote) above this.
characterstringA character from create_character, so the same face comes back.
objectsarrayObject names (list_objects) kept consistent, after the character.
tagsstringComma-separated tags, to find it again.
site_urlstringAttach it to one of your sites.
idempotency_keystringSame key within 24 h returns what it made, uncharged. Without one, an identical call within 10 min does; one still running is reported, not restarted.

list_assets List the account's own media bank

[Free] Your PRIVATE bank: every image, clip and audio file, by origin and subject, with id, URL, brief, tags and facets. Reuse a picture by putting its id in an image scene as data.asset_id (a clip resolves to clipUrl by itself; a recorded flow's steps are clips of their own, tagged rush-step, each exactly one step of the rush); an audio asset is a film's music as "asset:<id>". Reusing costs no credit.

readOnly · idempotent

ParameterTypeDescription
kindimage | video | audio | fontOnly images, clips, uploaded audio or fonts.
qstringWords, and/or facets origin: subject: camera: light: look: mood: orientation:
characterstringOnly assets generated for this character.
site_urlstringOnly assets attached to this site.
limitintegerAt most this many, newest first (default 40).

list_connections List the account's upstream connections

[Free] Every registered connection with its alias, kind and URL. Credentials are never returned.

readOnly · idempotent

create_object Create a reusable object

[Free] Names a product, logo, packaging, place, vehicle or UI screen from reference images so films keep it identical. Generated pictures take it in data.objects (clips, stills, insets, generate_asset) next to a character; image, gallery, pricing and compare cards draw it from data.object with its name and price.

idempotent

ParameterTypeDescription
name *stringThe object's name, e.g. "Aurora watch". Scenes name it.
kind *product | bag | watch | logo | packaging | place | vehicle | ui_screen | otherWhat it is.
refs *array1-6 reference images, best first: asset ids (list_assets) or media URLs on this account.
descriptionstring | nullOne line added to every prompt that names it.
site_urlstringScope it to one of your sites.
source_urlstringWhere it comes from (a product page). Attribution only.
metadataobject{price, currency (ISO 4217), brand, sku, url}. A price is drawn on pricing/compare/image cards.

list_objects List the account's objects

[Free] The reusable objects on this account, with reference images, kind and metadata (price, brand, sku).

readOnly · idempotent

ParameterTypeDescription
kindproduct | bag | watch | logo | packaging | place | vehicle | ui_screen | otherOnly this kind.
qstringA word in the name or description.
site_urlstringScope it to one of your sites.

update_object Change an object

[Free] Changes only the fields sent. Media already generated with it is kept until a scene's description changes.

destructive · idempotent

ParameterTypeDescription
name *stringThe object to change.
new_namestringRename it.
kindproduct | bag | watch | logo | packaging | place | vehicle | ui_screen | otherWhat it is.
refsarrayReplace the references.
descriptionstring | nullOne line added to every prompt that names it.
site_urlstringScope it to one of your sites.
source_urlstringWhere it comes from (a product page). Attribution only.
metadataobjectMerged into the metadata; a null value clears that key.

delete_object Delete an object

[Free] Deletes an object by name. Its images stay in your bank and media made with it stays in its films.

destructive · idempotent

ParameterTypeDescription
name *stringThe object to delete.

import_objects Import a catalogue as objects

[Free] Creates or replaces up to 50 objects from a product feed. Each image is downloaded (public addresses only) and banked as a reference. Failed rows are listed with the reason.

destructive · idempotent · openWorld

ParameterTypeDescription
items *array1-50 catalogue rows. image_url: one public image URL or a list (best first, up to 6); kind defaults to product.
site_urlstringScope it to one of your sites.

save_scene Save a scene to the library

[Free] Saves a scene for reuse: narration, visual, data, style AND its footage and generated media (a copy). Reusing it — update_storyboard add_scene_from_library, create_animation from_library — films and generates nothing, so no AI credit. Write {{placeholders}} in its narration or data first to fill them per use.

destructive · idempotent

ParameterTypeDescription
video_id *stringThe video the scene is in.
scene_id *stringThe scene, from get_storyboard.
name *stringA name to reuse it by. The same name replaces the earlier entry.
tagsarrayTags to find it by.

list_scenes List the scene library

[Free] Saved scenes, newest first: name, id, visual, aspect, whether footage is kept, the {{placeholders}} each needs as params, and tags.

readOnly · idempotent

ParameterTypeDescription
qstringA word in the name, heading or narration.
tagsarrayOnly scenes carrying every one of these tags.
site_urlstringScope it to one of your sites.
limitintegerAt most this many, newest first (default 40).

copy_scene Copy a scene into another video

[Free] Copies a scene into another of your videos with its footage and generated media, so nothing is filmed or generated again. A recording cannot change aspect, nor go into a film made from data. Does not re-render.

ParameterTypeDescription
from_video_id *stringThe video the scene is in.
scene_id *stringThe scene to copy, from get_storyboard.
to_video_id *stringThe video to copy it into (may be the same one).
after_scene_idstringPut it after this scene of the target. Omitted: at the end.

create_motion Design a motion graphic

[Paid plans] Designs a custom motion graphic from a brief (one text-model call; AI plans or a film pass; no credits charged), checks layout, legibility, contrast and timing, and saves it as a private template with params. Use it in a scene: visual "motion", data {motion:{specId, params}}.

destructive

ParameterTypeDescription
brief *stringWhat the scene shows and says, with its facts and figures.
namestringA name for the template.
languagestringOn-screen language (default en).
site_urlstringUse this site's brand kit colours.
tagsarrayLabels to find it by.

list_motion_templates List motion templates

[Free] Your saved motion graphics (visual "motion") and the commons, with their params. Rushie designed cards: list_motions {rushie}.

readOnly · idempotent

ParameterTypeDescription
scopeall | mine | commonsDefault all.
qstringA word in the name, brief or tags.

get_motion_template Read a motion template

[Free] One template with its full spec (layers, motion tokens, declared params).

readOnly · idempotent

ParameterTypeDescription
template_id *stringThe template's id.

update_motion_template Change a motion template

[Free] Renames, retags, sets param defaults or visibility, or replaces the spec of a template you wrote. Films already using it keep their picture.

destructive · idempotent

ParameterTypeDescription
template_id *stringThe template's id.
namestringRename it.
tagsarrayLabels to find it by.
defaultsobjectNew default values for its params, by name.
visibilityprivate | commonscommons shares it with every account (owner/admin only).
specobjectA new spec for a template you wrote (save_motion_spec); checked like validate_motion_spec.

get_motion_grammar Motion spec grammar

[Free] The grammar for writing your own animation as a motion spec: no topic → a short index and the authoring loop; topic → one rule file (layers, params, timing, motion, colour, layout, doctrine, examples, brief). Generated from the DSL itself.

readOnly · idempotent

ParameterTypeDescription
topiclayers | params | timing | motion | colour | layout | doctrine | examples | briefOne topic; omit for the index.

validate_motion_spec Check a motion spec

[Free] Dry-run a spec: deterministic repairs, schema, params, layout/legibility/contrast/timing on four frames and the motion doctrine. Returns ok, every problem with its path and fix, the repaired spec and the params schema. Nothing is saved.

readOnly · idempotent

ParameterTypeDescription
spec *objectA motion spec (get_motion_grammar).
paramsobjectParam values to check it with (default: the declared defaults).
site_urlstringLint against this site's brand colours.

preview_motion Preview a motion spec

[Free] Frames back without a render: per aspect (16:9, 9:16, 1:1) a PNG sheet of four beats (entering, landed, hold, exit) — a deterministic LAYOUT wireframe from the DSL's geometry (exact boxes, wrapping, sizes, colours, timing; system font, no blur or shadow) — plus the problems measured on that frame.

readOnly · idempotent

ParameterTypeDescription
specobjectThe spec to preview (or template_id).
template_idstringA saved template to preview instead of a spec.
paramsobjectParam values to check it with (default: the declared defaults).
aspectsarrayDefault all three.
secondsnumberThe scene's length (its narration slice). Default 5.
site_urlstringLint against this site's brand colours.

save_motion_spec Save a motion spec

[Free] Saves a spec you wrote as a private template once it passes validate_motion_spec (repairs applied). Returns its id, params schema and the scene JSON that uses it: visual "motion", data {motion:{specId, params}}.

destructive

ParameterTypeDescription
spec *objectA motion spec (get_motion_grammar).
namestringDefault: the spec's name.
tagsarrayLabels to find it by.
paramsobjectParam values to check it with (default: the declared defaults).
site_urlstringLint against this site's brand colours.
visibilityprivate | commonsDefault private; commons is owner/admin only.

upload_asset Upload your own image, footage, music or slide deck

[Free] Puts a file in your bank from a public https url. A file you hold: use create_upload (curl -T, no base64 in your context) — data_base64 only for a file of a few KB, since a 100 KB picture is ~135,000 characters of tool input. Picture or clip → data.asset_id in an image scene; audio → music "asset:<id>"; deck (PDF/PPTX) → every slide's text and pictures, to write the storyboard from. Identical bytes return the existing asset.

idempotent · openWorld

ParameterTypeDescription
urlstringPublic https URL.
data_base64stringThe file, base64, ≤ 2 MB.
filenamestringIts file name.
kindimage | video | audio | font | deckRequired with url. image ≤ 20 MB, video ≤ 200 MB/60 s, audio ≤ 50 MB, font ≤ 2 MB, deck (PDF/PPTX) ≤ 30 MB.
namestringA label to find it again.
site_urlstringAttach an image or clip to one of your sites.

create_upload Get an address to send a file to

[Free] A one-hour address to send a file you hold (picture, clip, music, font, PDF/PPTX deck, ≤ 30 MB): curl -sS -T <file> "<upload_url>". The reply is the asset or the deck's slides.

ParameterTypeDescription
kindimage | video | audio | font | deckRead from the bytes if omitted.
namestringA label.
site_urlstringAttach to this site.

list_voices List the narrator voices

[Free] The narrator voices with measured pitch (band and median Hz) and a short sample in the chosen language where one exists (else sample_url is null). Every voice speaks every language. Preset voices only: PageToVid never clones a voice and never narrates with an uploaded recording — say so plainly.

readOnly · idempotent

ParameterTypeDescription
languageen | fr | es | de | it | pt | nl | ar | hi | ko | pl | tr | sv
= "en"
Language of the samples.
pitchlow | mid | highOnly this pitch band.

get_timeline Get a finished film's timeline

[Free] Each scene's start and end in the finished MP4 (seconds), what drew it (recording, page still, AI clip/still, footage, graphic, card, inset), its transition, its slice of the one voice track with word onsets, plus the music and caption style. timeline_source: stored by the render, or rebuilt from the scenes.

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video's id.

get_frames Get stills from a finished film

[Free] JPEG stills (≤ 1280 px wide) cut from the finished MP4 at 1–6 moments in seconds, as URLs. Cached per render.

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video's id.
times *array1–6 times in seconds (0.1 s steps).

set_brand_kit Set a site's brand kit

[Free] Partial update of a site's brand kit: logo, palette, face (named or an uploaded font), intro/outro templates, watermark and logo corner, default voice/music/captions/look/transition. null clears a field. Films of the site inherit it unless the call overrides.

destructive · idempotent · openWorld

ParameterTypeDescription
site_url *stringAny URL of the site.
from_detectbooleanFill palette, face and logo from detect_brand first; your fields win.
colorsobject | nullHex per slot; partial merges.
logo_asset_idstringImage asset id (upload_asset).
font_asset_idstringFont asset id (upload_asset kind "font"); outranks font_family.
logo_cornertl | tr | bl | br | noneLogo corner on the picture, or none.
logo_safe_zonenumberLogo clear space, % of the short side.
watermarkbooleanPaid plans: badge on or off. Free keeps it.
voiceKore | Zephyr | Puck | Charon | Aoede | Fenrir | Leda | Orus | Callirrhoe | Achird | Sulafat | SadachbiaDefault narrator.
musicnone | uplift | corporate | chill | cinematic | ambient | pulse | playful | warmDefault bed, or "asset:<id>".
lookclean | bold | editorial | playful | techDefault look.
caption_stylekaraoke | bold | boxed | minimal | outlineDefault caption style.
transitioncut | crossfade | whip_left | whip_right | zoom_punch | flash | swipe_up | glitch | slide_left | slide_right | spin | blur_dissolve | light_leak | film_burn | zoom_blur | dip_to_black | dip_to_white | whip_up | whip_down | push_left | push_right | push_up | wipe_left | wipe_right | iris | j_cut | l_cutDefault arrival for scenes naming none.
end_screencta | qr | social | logo | noneOutro card template.
introcard | noneIntro card template.
font_familystringA list_options face.
modelstringClip model for ai_mode rich (list_models).

get_brand_kit Get a site's brand kit

[Free] A site's brand kit, what a film paints from it (and what it cannot, with why), the effective watermark, and the account defaults beneath it.

readOnly · idempotent

ParameterTypeDescription
site_url *stringAny URL of the site.

set_account_defaults Set the account's option defaults

[Free] Partial update of the options every film starts from (below a site's brand kit). null clears a field.

destructive · idempotent

ParameterTypeDescription
voiceKore | Zephyr | Puck | Charon | Aoede | Fenrir | Leda | Orus | Callirrhoe | Achird | Sulafat | SadachbiaDefault narrator.
musicnone | uplift | corporate | chill | cinematic | ambient | pulse | playful | warmDefault bed, or "asset:<id>".
lookclean | bold | editorial | playful | techDefault look.
caption_stylekaraoke | bold | boxed | minimal | outlineDefault caption style.
transitioncut | crossfade | whip_left | whip_right | zoom_punch | flash | swipe_up | glitch | slide_left | slide_right | spin | blur_dissolve | light_leak | film_burn | zoom_blur | dip_to_black | dip_to_white | whip_up | whip_down | push_left | push_right | push_up | wipe_left | wipe_right | iris | j_cut | l_cutDefault arrival for scenes naming none.
end_screencta | qr | social | logo | noneOutro card template.
introcard | noneIntro card template.
font_familystringA list_options face.
modelstringClip model for ai_mode rich (list_models).

list_options List every option in one call

[Free] Every enum and range a film accepts (voices, languages, beds, looks, captions, motions, transitions, visuals, aspects, faces, brand kit), the models with a credit example, and the inheritance levels.

readOnly · idempotent

invite_member Invite a team member

[Free] Emails an invite to this workspace with a role, optional site limits and monthly credit cap. Members spend the owner's credits. Seats incl. owner: Free/Creator 1, Pro 3, Scale 5, Business 15, Agency unlimited.

openWorld

ParameterTypeDescription
email *stringThey join by signing in with it.
role *admin | editor | reviewer | viewer | billingeditor makes and spends; reviewer comments and approves.
site_urlsarray | nullLimit to these sites; null = all.
credit_capinteger | nullMonthly credit cap; null = none.

list_members List team members

[Free] Members with role, sites, cap and spend this month; seats; your workspaces (send one as the X-PageToVid-Workspace header to act in it).

readOnly · idempotent

ParameterTypeDescription
site_urlstringOnly members with this site.

update_member Change a member's role, sites or cap

[Free] Changes only the fields sent. Only the owner grants or changes admin and billing.

destructive · idempotent

ParameterTypeDescription
member_id *stringFrom list_members.
roleadmin | editor | reviewer | viewer | billingNew role.
site_urlsarray | nullLimit to these sites; null = all.
credit_capinteger | nullMonthly credit cap; null = none.

remove_member Remove a member

[Free] Removes a member or cancels an invite, freeing the seat; your own member id leaves the workspace. Their work stays.

destructive · idempotent

ParameterTypeDescription
member_id *stringFrom list_members.

request_approval Ask for approval

[Free] Opens an approval round for the named approvers; supersedes a pending one.

ParameterTypeDescription
video_id *stringThe video's id.
approver_ids *arrayMember ids, or the owner's user id.

approve Approve a video

[Free] Approves the pending round, as one of its approvers.

ParameterTypeDescription
video_id *stringThe video's id.
commentstringOptional note.

request_changes Request changes on a video

[Free] Closes the pending round as changes requested.

ParameterTypeDescription
video_id *stringThe video's id.
comment *stringWhat to change.

list_comments Read a video's comments

[Free] Timestamped comments from members and review-link guests, oldest first, and the approval round.

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video's id.

add_comment Comment on a video

[Free] Adds a timestamped comment; open comments feed the editor's AI revision.

ParameterTypeDescription
video_id *stringThe video's id.
scene_idstringFrom get_storyboard.
at_snumberMoment in the film, seconds.
text *stringThe comment.

get_audit_log Read the workspace audit log

[Free] Who did what here, newest first: members, spending, review links, approvals, comments.

readOnly · idempotent

ParameterTypeDescription
site_urlstringOnly entries about this site.
sincestringOnly entries from this time on.

set_webhook Set the account's completion webhook

[Free] Sets (or with null clears) the account-wide URL that receives a signed JSON event whenever a render ends. The first time a secret is needed it is created and returned here, once.

destructive · idempotent

ParameterTypeDescription
url *string | nullPublic https URL for the completion event of every render that has no callback_url of its own; null removes it. Signed as callback_url describes on create_video.

rotate_webhook_secret Rotate the webhook signing secret

[Free] Replaces the secret completion events are signed with and returns the new one, once. The old secret stops verifying at once, including for retries still in flight.

destructive

list_revisions List a storyboard's revisions

[Free] Every storyboard edit, newest first: what changed and a revision_id. restore_revision puts the storyboard back as it was before one.

readOnly · idempotent

ParameterTypeDescription
video_id *stringThe video whose storyboard history to use.
limitinteger
= 20
How many, newest first.

restore_revision Undo storyboard edits

[Free] Puts the storyboard back as it was before a revision, undoing that edit and every later one. Itself a revision, so it can be undone. Nothing is re-rendered until rerender_video.

destructive

ParameterTypeDescription
video_id *stringThe video whose storyboard history to use.
revision_id *stringFrom list_revisions. The storyboard returns to how it was BEFORE this edit.

update_character Update a character

[Free] Changes a character's references, description or name; anything not given is kept. Clips already made keep the look they were made with.

destructive · idempotent

ParameterTypeDescription
name *stringThe character's current name.
new_namestringRename it. Scenes that name the old name must be updated.
refsarray1-3 reference image URLs from your bank, replacing the current ones.
descriptionstring | nullWhat the character looks like; null clears it.

delete_character Delete a character

[Free] Deletes a character by name. Its reference images stay in your bank and clips made with it stay in their films.

destructive · idempotent

ParameterTypeDescription
name *stringThe character's current name.