Endpoints
Compressed catalog of every2026-05-01 endpoint by router, with scope and a one-line purpose. Not a substitute for the OpenAPI spec — a scannable index.
Base URL: https://api.moda.app/v1
Tasks
Remix
Without a
prompt: completes synchronously, returns status: "succeeded" inline. With a prompt: queues a task, returns non-terminal envelope; poll.
Canvases
See
canvases-and-exports.md for the export semantics and the share-token read pattern.
Brand kits
See
brand-kits.md for update semantics.
Uploads
Deduplicates by content hash. Files are capped at
max_file_bytes on every path — that ceiling is per-workspace (250 MB is the deployment maximum, a free workspace is lower), so read it from GET /v1/uploads/limits rather than hard-coding a number; the multipart path is additionally capped at ~32 MiB by the gateway, so larger files must use /uploads/url + /uploads/register. See uploads.md.
Organizations
Role scoped: admins see all, members see their own.
Credits
Share links
Usage / events (observability)
Admins see everything; members see only their own keys’ events.
Webhook deliveries
Cross-cutting request headers
Cross-cutting response headers
Common wrong guesses
- Using the operation ID (
startTask) as the path. Operation IDs are for SDKs; the HTTP path is what matters. - Expecting
/tasks/{id}/cancelto be a DELETE. It’s a POST. - Confusing
POST /canvases/{id}/sharewith generating a share link on every call. It creates one if missing, returns the existing one otherwise. It also blocks on thumbnail generation by default. - Calling
GET /canvases/{id}withoutshare_token=on a share-only-visible canvas. You’ll get404— the call resolves through the key’s team access, not the share link. - Reading
urloff an export response without checkingstatus. A slow export returns{status: "in_progress", task_id}withurl: null— poll/canvases/{id}/export-status. It is still not a Task envelope, so don’t poll/tasks/{id}. - Treating
409 + Retry-After: 10on export as a failure. It’s the retry signal when a design task is running on the canvas.
Upstream
- Full OpenAPI spec:
docs.moda.app/openapi/moda-public-api.yaml - Per-endpoint docs:
docs.moda.app/api/*