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
| Request | Input |
|---|---|
POST /v1/exports | A complete editorState and stateSchemaVersion: "v1". |
POST /v1/projects/{projectId}/exports | The 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:
| Field | Use |
|---|---|
status | The task's current state. |
progress | Overall export progress. |
exportPhase | When present, rendering, saving, or finishing while processing. |
outputUrl, filename | Download information for a completed export. |
error | The failure or cancellation message, when present. |
projectId | The 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