Videos need a plan that includes Content (the Growth Marketing Manager). Without it every endpoint here
returns
403 plan_not_included.Pricing
Each video is priced at what the providers that make it charge us (presenter renders, generated shots and pictures, narration, rendering) plus a small markup, and is charged once, at the moment it is released to render:- with your own
script, when you create it; - otherwise, when its written script is approved (automatically or by you).
400 and nothing is bought.
Quote first. POST /v1/videos/quote takes the same body as POST /v1/videos and returns the price,
without making anything:
script the quote is exact. Without one, the words (or shots, or slides) are not written
yet, so the quote is an estimate from target_duration_seconds (estimated: true) and the charge at
approval is for what was actually written. Every video also shows price_cents (what it costs now, or
was charged) and billed_cents (what it was charged, once released).
Cap it. Pass max_price_cents when you create a video. With your own script, a video above the cap
is rejected with 400 before anything is created. With a script approved automatically, one that comes
out above the cap is not approved: it waits in script_review with the reason in error, for you to
shorten and approve (or delete). When you approve by hand, pass max_price_cents to
POST /v1/videos/{id}/approve instead.
Templates
template picks the recipe, and preset a style within it (omit it for the template’s default).
Templates marked No write their own script scene by scene (or slide by slide), so sending
script
with them is a 400. The self-recorded style (where you film yourself) needs an upload in the
dashboard and is not available here.
Everything else the dashboard’s Configure step sets is in the body: format (vertical or
horizontal), target_duration_seconds, the presenter (avatar_provider, replica_id, avatar_id,
voice_id, avatar_layout), the background (background_mode, background_image, b_roll),
subtitles, the video model for freeform_ai, slide settings for slideshow, the clip for
real_footage and meme_hook, and a site demo’s demo_focus and demo_login. Settings a template does
not use are ignored. Presenters and voices can’t be listed through the API yet: leave out
replica_id and avatar_id for the default presenter.
Sources. Give at least one of source_url (your website) or source_text (a description). Images
and videos must already be in LumisReach (source_image_urls, source_video_urls); there is no upload
endpoint in the API yet, so upload them in the dashboard or describe the business in source_text.
Script up front, or review
TRACK_ID is a track_id from GET /v1/videos/music.
- Your own
script: spoken word for word. The video skips review, is charged, and starts rendering right away. - No
script,script_review: "auto"(the default): a script is written from your sources and approved as soon as it is written, which charges it (withinmax_price_cents). - No
script,script_review: "manual": the video stops inscript_review. Read the script (orscenes,slides,interview) withGET /v1/videos/{id}and its price inprice_cents, then approve it withPOST /v1/videos/{id}/approve, sending{}or your edits.
201 with the video. Poll GET /v1/videos/{id}:
A video takes a few minutes; long ones and AI-generated scenes can take longer.
Downloading
video_url and thumbnail_url are signed links to the finished files. They need no API key and don’t
expire, so you can download the MP4 or hand the link to another service; treat them like a share link.
Posting
List the accounts connected in Dashboard → Connections, then post:caption defaults to the video’s caption and hashtags. Omit scheduled_for to post now. A slideshow
can go out as its slides with "media_type": "carousel" (TikTok and Instagram). Each account gets its
own post; follow them with GET /v1/videos/{id}/posts, and cancel one that is still scheduled with
DELETE /v1/posts/{id}. Posting is free.