v1

latestOpenAPI 3.1.02026-07-223261135.0 KB
canvases

Export Canvas

Export a canvas as PNG, JPEG, PDF, or PPTX. Returns a signed URL or a polling handle.

Exports run the headless browser against the authenticated canvas URL, so they require DB-level team access regardless of share-link status. Share-link-only callers can read the canvas via GET /canvases/{id} with a share_token query param but cannot export.

Large multi-page exports may exceed the synchronous wait budget; in that case the response carries status='in_progress' with a task_id — call GET /canvases/{id}/export-status?task_id=... to retrieve the signed URL once the background export finishes.

post/canvases/{canvas_id}/export

Path parameters

canvas_idstring required

Prefixed cvs_ wire ID (Crockford base32 body) — the canonical, recommended form. For back-compat, a bare UUID string is also accepted in both path parameters and JSON request bodies (older integrations that stored raw UUIDs keep working). Both are permanent, supported inputs.

Example:cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV

Query parameters

formatstring

Export format: png, jpeg, pdf, or pptx

Export format: png, jpeg, pdf, or pptx

page_numberinteger nullable

1-indexed page number to export. Omit to export all pages — PDF/PPTX bundle every page natively, while multi-page PNG/JPEG are returned as a .zip of per-page files (page-1.png, page-2.png, …) since a single image container can't hold multiple pages. format in the response reflects what was actually delivered (zip in the bundled case).

1-indexed page number to export. Omit to export all pages — PDF/PPTX bundle every page natively, while multi-page PNG/JPEG are returned as a .zip of per-page files (page-1.png, page-2.png, …) since a single image container can't hold multiple pages. format in the response reflects what was actually delivered (zip in the bundled case).

pixel_ratiointeger nullable

Render scale multiplier (1-4). Higher values produce sharper exports at larger file sizes. Supported for PNG, JPEG, and PDF exports. PPTX ignores this parameter.

Render scale multiplier (1-4). Higher values produce sharper exports at larger file sizes. Supported for PNG, JPEG, and PDF exports. PPTX ignores this parameter.

flattenboolean

PDF only: produce a raster-only PDF with no searchable text, vector elements, or hyperlinks.

PDF only: produce a raster-only PDF with no searchable text, vector elements, or hyperlinks.

waitboolean

When True (default), block up to ~20s for the export to finish before returning an in-progress handle. When False, return status='in_progress' with a task_id immediately — poll /canvases/{id}/export-status until terminal.

When True (default), block up to ~20s for the export to finish before returning an in-progress handle. When False, return status='in_progress' with a task_id immediately — poll /canvases/{id}/export-status until terminal.

force_refreshboolean

When False (default), reuse a cached export if the canvas is unchanged since it was rendered — fast, no browser render. Set True to force a fresh render.

When False (default), reuse a cached export if the canvas is unchanged since it was rendered — fast, no browser render. Set True to force a fresh render.

Headers

Moda-Version'2026-04-12' | '2026-05-01'
Example:2026-05-01

Calendar-dated API version pin. New integrations should pin 2026-05-01 to opt into the newest response shapes. For back-compat the server also accepts requests with no header and resolves them to the current default (today: 2026-04-12); that default advances on each sunset date. Any unsupported value returns 400 unsupported_version.

Response

Successful Response

statusstring

completed when url is set, or in_progress when polling is required.

canvas_idstring required

Prefixed canvas identifier for the canvas that was exported.

canvas_urlstring required

Full URL to open the source canvas in the Moda editor.

urlstring nullable

Signed download URL for the exported file (set when status='completed'). Expires in 7 days.

formatstring required

Delivered format — png, jpeg, pdf, pptx, or zip. A multi-page PNG/JPEG export (page_number omitted, canvas has >1 page) is bundled into a .zip of per-page files, so format is zip even though the request asked for an image format.

task_idstring nullable

Export task ID set when status='in_progress'; poll the export-status endpoint with it.

retry_after_secondsinteger nullable

Suggested poll interval when status='in_progress'.

total_pagesinteger nullable

Total page count for the source canvas (echoed for client convenience).

sourcestring nullable

How the export was served: cache (existing artifact reused), slice (page extracted from a cached document, no render), or render (freshly rendered). null while status='in_progress'.

Example response

{
  "canvas_id": "cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
}