โ† Documentation home

Video Render API

Generate branded video programmatically on the Series-X VPS. Remotion-backed, queue-backed, async.

Base URL: https://video-api.series-x.ai (planned) or http://127.0.0.1:8800 (VPS-local) Auth: X-API-Key header. Key distribution: ask Colin/Alex. Service: video-api.service on server1.series-x.ai

Quick start

# Submit a render (returns immediately)
curl -X POST https://video-api.series-x.ai/render \
  -H "X-API-Key: $VIDEO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"composition":"SeriesXIntro","props":{"title":"Welcome to AdvisorPro","subtitle":"AI systems, documented and verified"},"codec":"h264"}'
# => {"jobId":"job_x7k2m9a1p3","state":"queued"}

# Poll progress
curl -H "X-API-Key: $VIDEO_API_KEY" https://video-api.series-x.ai/status/job_x7k2m9a1p3
# => {"id":"job_x7k2m9a1p3","state":"rendering","progress":57}

# Download when state=done (200) - mp4, H.264 yuv420p
curl -o out.mp4 -H "X-API-Key: $VIDEO_API_KEY" https://video-api.series-x.ai/download/job_x7k2m9a1p3

Endpoints

POST /render

Field Type Required Notes
composition string yes Composition id from the Root registry (see below)
props object no Props passed to the composition (titles, colours, data)
codec string no h264 (default), vp8, vp9, prores

Returns {jobId, state}. Renders run 3-at-a-time; extra jobs queue FIFO.

GET /status/:jobId

Returns {id, state, progress, composition, error}. state is one of queued, rendering, done, error. On error, error carries a short message.

GET /download/:jobId

Streams the mp4. Only valid once state=done. 404 otherwise.

GET /health

No auth. {ok, activeJobs, queued, maxConcurrent}.

Available compositions

Id Duration Purpose Key props
SeriesXIntro 4s Branded intro card (navy, serif title, teal-gold bar) title, subtitle
SetuPatientVideo 66s Setu Dental patient explainer (8 scenes) read-only demo
SetuBumper 6s Setu Dental ad bumper read-only demo

New compositions: add to /opt/motion-graphics/src/Root.tsx in the git repo (series-a-uk/series-x-crm), then systemctl restart video-api.

Throughput and limits

Voiceover and music

VO (edge-tts) and music beds are generated per-project, not yet part of the API surface. For API-scale VO, cache by script hash or supply an ElevenLabs key. Music is synthesised in-house (licence-free).

Errors

Status Meaning
400 Missing composition or malformed JSON
401 Missing/wrong X-API-Key
404 Unknown job, or download before done
500/502 Render failed; check error in /status