Video Export

POST/v1/video-export/render202

Render a Remotion composition server-side. The consumer hosts the Remotion bundle at a URL (typically their own Vercel deploy) and passes the URL + composition id + input props. DomeTech renders the MP4, uploads it to managed storage, and sends a completion webhook. Use this when you want to centralize video rendering at DomeTech rather than running Remotion in your own consumer backend.

Request Body

ParameterTypeRequiredDescription
serve_urlstring (URI)YesPublic URL of the Remotion bundle's index.html (e.g. https://app.domeagent.com.au/remotion). The host must be in REMOTION_BUNDLE_URL_ALLOWLIST.
composition_idstringYesComposition id registered in the bundle's RemotionRoot (e.g. "VideoProject").
input_propsobjectYesProps passed to the composition. Shape is determined by the bundle — DomeTech treats this as opaque JSON.
options.codecstringNoOutput codec (default: h264)
options.widthintegerNoOverride composition width. Default: composition's own width.
options.heightintegerNoOverride composition height. Default: composition's own height.
options.fpsintegerNoOverride composition frame rate. Default: composition's own fps.
options.duration_in_framesintegerNoOverride the composition's total duration in frames. Set this for dynamic-length timelines — most bundles register a placeholder duration in Root.tsx and the real length lives in props. If omitted, the renderer falls back to `input_props.totalDurationInFrames` (the consumer convention for dynamic timelines) and finally to the composition's registered default.
options.crfinteger (0-51)NoH.264 quality (Constant Rate Factor). 0=lossless, 23=default, 51=worst. Lower = bigger files.
webhook_urlstring (URI)NoURL to receive progress and completion webhooks
callback_metadataobjectNoOpaque data returned in webhook payloads

Request Example

{
  "serve_url":  "https://example.com/image.jpg",
  "composition_id":  "example",
  "input_props":  {},
  "options":  {
    "codec":  "h264",
    "width":  1,
    "height":  1,
    "fps":  1,
    "duration_in_frames":  1,
    "crf":  0
  },
  "webhook_url":  "https://example.com/image.jpg"
}

Response

{
  "data":  {
    "job_id":  "550e8400-e29b-41d4-a716-446655440000",
    "status":  "queued"
  },
  "meta":  {
    "request_id":  "req_abc123",
    "timestamp":  "2026-03-12T10:00:00.000Z",
    "mode":  "live"
  }
}