Engineering & product

Personalized video, shipped as a feature.

Store one template, POST per-user variables, and hand your product a hosted video or image URL. Rendered async on FFmpeg, signed back to your webhook, safe to retry.

For builders

Make video a shippable feature, not a project

Your product already has the data for a wrapped, a milestone recap, or an in-app share card. Zvid turns that data into media: store a template with up to 200 {{placeholders}} nested up to 8 levels, POST the variables for one user, and get back a 202 with a job id and reserved credits. Everything resolves server-side before validation, so a malformed payload fails fast instead of burning a render.

Rendering is asynchronous by design. Zvid runs FFmpeg — not a headless browser — so output is frame-accurate and reproducible, and the finished file is hosted and returned as an absolute cdn.zvid.io URL. Subscribe to render.completed and render.failed webhooks, verify the HMAC-SHA256 signature, and drop the URL straight into an email, a push, or an in-app share sheet.

What you get

What ships to production

Template plus variables

Store a project once and personalize per user with {{placeholder}} substitution — up to 200 type-preserving variables, nested up to 8 levels, all resolved server-side.

Async by webhook

POST returns a job id immediately; render.completed and render.failed fire an HMAC-SHA256 signed webhook so your product reacts to the hosted URL without polling.

Hosted output URL

Every render comes back as an absolute cdn.zvid.io URL you can embed in an email, share card, or app view — no storage or CDN of your own to wire up.

Safe retries

Idempotency keys make retries safe, and webhook delivery runs 5 retries with exponential backoff before an endpoint auto-disables after 20 consecutive failures.

Fan out in one call

Generate a whole cohort's recaps with bulk render — up to 500 items per call, best-effort per-item validation returning invalid rows in itemErrors by index under one batch id.

Images on the same API

Render in-app share cards and OG images from the same templates at 10 images per credit, resolution-independent, as PNG/JPG/WebP with transparency on PNG and WebP.

500

Renders per call

200

Template variables

FFmpeg

Frame-accurate engine

1,200 free

Credits to start

FAQ

Frequently asked questions

How do we authenticate this from our backend? +

Use an API key (zvid_...) for server-to-server calls; the dashboard and editor use JWT or cookie auth. Idempotency keys make retried requests safe.

How do we get the finished file into our product? +

Renders are async. Subscribe to the render.completed webhook — HMAC-SHA256 signed over timestamp and body — and read the hosted cdn.zvid.io URL from the payload. You can also set a per-request webhookUrl.

Can one endpoint handle both video and images? +

Yes. The same authenticated API renders video (mp4/mov/avi/webm, 1-60 fps) and images (PNG/JPG/WebP, 10 per credit) from the same templates, so share cards and recap videos share one integration.

Explore more: see every roles

Ready to ship video at scale?

Start free — your first render is only a JSON payload away.