Skip to main content
Prefer to see it first? The Playground renders your composition in the browser with WebGPU — the same renderer as the API — so you can preview and copy the exact POST /v1/renders request before spending a render.

How renders work

  1. Provide your media (if needed) — pass a source_url you already host on a CDN, upload local files with POST /v1/uploads, or have Framelane copy a public URL or cloud share link into storage for you by setting ingest_external: true on the render. See Uploading media.
  2. Submit a POST /v1/renders request with your composition — dimensions, elements, transitions, and output settings.
  3. Job accepted — the API returns 202 Accepted with a render_* job ID and status: queued. When the render copies in external files (ingest_external), it starts as ingesting and transitions to queued automatically once every file is ready.
  4. GPU engine processes — the Framelane Renderer runs on dedicated GPU hardware.
  5. Wait for completion — poll GET /v1/renders/{id} until status is terminal, or receive a render.completed / render.failed webhook.
  6. Download — use output.url from the job response, or GET /v1/renders/{id}/download for a fresh signed redirect.

Job lifecycle

Idempotency

Every render submission should include an Idempotency-Key header to safely retry without double-submitting:
If you resubmit the same key within 24 hours:
  • Same body200 OK with the existing job (no new charge)
  • Different body409 Conflict

Endpoints

Minimal example

The correct field names are time (start on the output timeline), duration (how long the element is visible), and text_color (not color). Using wrong field names results in a 422 validation error.