Duplicate a canvas and optionally apply edits with AI.
Always returns a Task(kind="remix") envelope — uniform across the
prompted and promptless paths. The promptless path completes
synchronously and returns status="succeeded" inline, so the returned
id is a synthetic (non-queryable) UUID and retry_after_ms is
None. The prompted path returns the in-flight task envelope; callers
poll GET /v1/tasks/{id} to observe completion.
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.
API key from Settings > Developer > REST API
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.
2026-04-12, 2026-05-01 "2026-05-01"
Prefixed cvs_ ID of the source canvas to duplicate. The source canvas may belong to a different team. The copy is created in the team specified by team_id.
^cvs_[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$"cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
Optional natural-language edit prompt to apply to the copy. If omitted, the canvas is duplicated without modifications.
Name for the new canvas. Defaults to the source canvas name.
255Prefixed bk_ wire ID (Crockford base32 body). Path parameters additionally accept a bare UUID string for back-compat; JSON body fields require the prefixed form.
^bk_[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$"bk_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
If true, no brand kit is applied — even if the team has a default. Overrides brand_kit_id when both are provided.
Successful Response
Canonical wire-format for every async design operation.
All consumers -- REST, webhooks, SSE, MCP -- serialize through
Task.from_db() so the shape is always consistent.
Prefixed task_... identifier.
^task_[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$"task_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
Discriminator for the kind-specific result payload.
design, export, remix, brand_kit_extract Current lifecycle status.
queued, running, succeeded, failed, canceled, expired Current attempt number (1-based).
Maximum attempts before dead-lettering.
HATEOAS links for this task.
ISO 8601 timestamp.
ISO 8601 timestamp.
ISO 8601 timestamp.
Live progress for running tasks. Null when not applicable.
Sanitized echo of the original request.
Kind-specific result payload. Present only for succeeded tasks.
Error info for failed tasks: {message, retryable}.
Credit usage. Present only for completed tasks when billing is enabled.
Suggested milliseconds to wait before the next poll. Null for terminal tasks.