Skip to main content

1. Get your API key

Humans: sign up at console.framelane.io and copy your API key from Settings → API Keys. Agents (no human, no browser): provision a key over the API. POST /v1/signup returns a key immediately and emails a 6-digit code; read it from the inbox you signed up with, then confirm it with POST /v1/signup/verify to activate the key. Until you verify, the key returns 403 email_not_verified on every call. See Self-provisioning for agents.

2. Upload your input file

If your video is already hosted at a public HTTPS URL you control, skip to step 3 and use that URL as source_url. To pull in a file from a remote URL you don’t control (another CDN, a cloud share link), set ingest_external: true on the render and pass the URL as the element source_url — Framelane copies it into your workspace first. For a local file, request an upload slot and PUT the bytes to GCS:
You will use source_url from the upload response in the render request. See Uploading media for supported MIME types and error codes.

3. Submit a render

Send a POST /v1/renders request with your composition. Replace source_url with your upload URL or any public HTTPS URL:
The API returns 202 Accepted immediately with a job object:
Save the id — you need it to poll status or download the result.

4. Wait for completion

Option A — Poll job status (simplest for scripts)

Call GET /v1/renders/{id} until status is terminal (completed, failed, or cancelled):
Prefer long-polling to a poll loop. GET /v1/renders/{id}?wait=25 holds the request open until the render is terminal (completed / failed / cancelled) or ~25 seconds elapse (capped server-side), then returns the current state — one call instead of a whole loop. If it comes back still in flight, Retry-After: 0 is set: call again immediately. The same ?wait= works on GET /v1/tasks/{id} and on preview renders.
While processing, status is queued or processing and progress_percent updates over time. When status is completed, the response includes output.url:
output.url is the field to use — download the finished video from it. The width, height, duration, and size_bytes fields are reserved and currently return null; the output dimensions and duration match your render request, and the byte size is available from the download response’s Content-Length.
Or use the SDK helper, which does this for you:
The same polling pattern applies to tasks via GET /v1/tasks/{id}. Register a webhook endpoint and Framelane calls it when the render completes:
When complete, you’ll receive:

5. Download the artifact

The output.url in the job response or webhook is a signed CDN URL. You can also request a fresh download redirect:

Next steps

Uploading media

Local files via signed GCS upload, or remote URLs with ingest_external.

Run an AI task

Transcribe audio or video to text with word-level timestamps.

Verify webhook signatures

Validate HMAC signatures to ensure payloads come from Framelane.

API Reference

Browse all endpoints generated from the OpenAPI spec.