Skip to main content
These endpoints drive the same video maker as Dashboard → Create Video: pick a template, give it your website or a description (and, if you like, the script), and LumisReach writes, renders and composites a social-ready MP4. When it is ready you can download it or post it to TikTok, Instagram, Facebook, X and LinkedIn. To keep videos coming on a cadence, see Video schedules.
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).
Retries are free, and so are quotes, reads and posting. The charge comes out of your plan’s included video credits first, then your prepaid balance. If the workspace cannot pay for a video, the release is refused with 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:
With your own 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 (within max_price_cents).
  • No script, script_review: "manual": the video stops in script_review. Read the script (or scenes, slides, interview) with GET /v1/videos/{id} and its price in price_cents, then approve it with POST /v1/videos/{id}/approve, sending {} or your edits.
Either way the response is 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.