Skip to main content
POST
/
canvases
/
{canvas_id}
/
export
Export Canvas
curl --request POST \
  --url https://api.moda.app/v1/canvases/{canvas_id}/export \
  --header 'Authorization: Bearer <token>'
{
  "canvas_id": "cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV",
  "canvas_url": "<string>",
  "format": "<string>",
  "status": "completed",
  "url": "<string>",
  "task_id": "<string>",
  "retry_after_seconds": 123,
  "total_pages": 123
}

Documentation Index

Fetch the complete documentation index at: https://docs.moda.app/llms.txt

Use this file to discover all available pages before exploring further.

Authorizations

Authorization
string
header
required

API key from Settings > Developer > REST API

Headers

Moda-Version
enum<string>
default: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.

Available options:
2026-04-12,
2026-05-01
Example:

"2026-05-01"

Path Parameters

canvas_id
string
required

Prefixed cvs_ wire ID (Crockford base32 body). Path parameters additionally accept a bare UUID string for back-compat; JSON body fields require the prefixed form.

Pattern: ^cvs_[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$
Example:

"cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV"

Query Parameters

format
string
default:png

Export format: png, jpeg, pdf, or pptx

page_number
integer | null

1-indexed page number to export. Omit to export all pages.

Required range: x >= 1
pixel_ratio
integer | null

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.

Required range: 1 <= x <= 4
flatten
boolean
default:true

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

wait
boolean
default:true

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.

Response

Successful Response

Response for POST /canvases/{id}/export.

Carries one of two shapes depending on status:

  • completedurl is the signed download URL.
  • in_progresstask_id lets the caller poll GET /canvases/{id}/export-status?task_id=... until terminal.
canvas_id
string
required

Prefixed canvas identifier for the canvas that was exported.

Pattern: ^cvs_[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$
Example:

"cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV"

canvas_url
string
required

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

format
string
required

The format of the exported file (e.g. 'png', 'pdf').

status
string
default:completed

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

url
string | null

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

task_id
string | null

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

retry_after_seconds
integer | null

Suggested poll interval when status='in_progress'.

total_pages
integer | null

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