Exports

Create video files, track export progress, cancel work, and download completed results.

An export renders a video as MP4 or WebM. Creation returns a taskId; use it to track progress, cancel the task, or retrieve the result.

Choose the input

RequestInput
POST /v1/exportsA complete editorState and stateSchemaVersion: "v1".
POST /v1/projects/{projectId}/exportsThe project's saved editor state. Save changes before exporting.

Both requests accept output settings: ratio, scale, fps, and format. Supported frame rates are 30 and 60 fps, subject to workspace entitlement. filename optionally sets the output filename. Use a filename that matches the selected format.

The Quick Start provides a complete example. The API reference documents stateless exports and project exports.

Track the task

GET /v1/exports/{taskId} returns a task snapshot:

FieldUse
statusThe task's current state.
progressOverall export progress.
exportPhaseWhen present, rendering, saving, or finishing while processing.
outputUrl, filenameDownload information for a completed export.
errorThe failure or cancellation message, when present.
projectIdThe source project, or null for a stateless export.

Terminal statuses are COMPLETED, FAILED, and CANCELED. PENDING, PROCESSING, and PAUSED are not terminal. Download only after COMPLETED and a usable outputUrl; a phase or progress percentage alone does not establish success.

JavaScript's client.exports.wait(taskId) and Python's client.exports.wait(task_id) poll for you. They return a completed task and raise an error for failure or cancellation. A polling timeout stops waiting; it does not cancel the task.

Use Webhooks for export start and result notifications. Cancellation has no dedicated webhook event; observe the cancel response or fetch the task.

Cancel an export

Send DELETE /v1/exports/{taskId}, or use client.exports.cancel(taskId) in JavaScript (client.exports.cancel(task_id) in Python).

Pending and processing tasks can be canceled. Canceling an already canceled task is idempotent. A task that cannot be canceled returns an error, including 409 for a state conflict. A canceled task does not publish a later render result.

Save the output

Download the file from outputUrl and store it where your application needs it. Keep your own copy of files you need to retain; the API does not specify a retention period.

For large files, stream the download to storage instead of loading the entire video into memory. The Quick Start's buffered download is intended for its small sample.

Avoid duplicate work

For a create request you might retry, provide Idempotency-Key (SDK idempotencyKey or idempotency_key) and keep both the key and payload unchanged. Reuse the same key only for retries of that request.

If the header is absent, clientTaskId provides task deduplication. Without either value, each submission creates another task. A new key or changed payload is not a retry of the original operation.

List exports with GET /v1/exports. Use pageSize, pageCursor, and the optional createdByApiKeyId filter; follow the returned meta.nextPageCursor for the next page.

Costs and limits

Exports use workspace credits and share the workspace's cloud-export concurrency limit. If OPEN_API_EXPORT_CONCURRENCY_LIMIT_EXCEEDED is returned, wait for active work to finish. Resolution, frame rate, usage limits, and credits can also prevent submission; see Billing and limits and Errors and retries.

Last updated on

On this page