v1

latestOpenAPI 3.1.02026-07-223261135.0 KB
tasks

Start Design Task

Start an AI design task. Returns immediately with a task ID for polling.

post/tasks

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.

Request body

promptstring required

Natural-language description of the design task for the AI agent.

conversation_idstring nullable

Prefixed conv_ 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.

canvas_idstring nullable

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.

template_canvas_idstring nullable

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.

canvas_namestring nullable

Name for the new canvas. Used when creating (canvas_id omitted) or when remixing via template_canvas_id (overrides the default Remix of <source>).

brand_kit_idstring nullable

Prefixed bk_ 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.

skip_brand_kitboolean

If true, no brand kit is applied — every brand-kit source is suppressed, including the canvas's own kit, the team default, and any explicit brand_kit_id override. Use only when the design must be unbranded; to merely leave the canvas's existing kit alone, omit brand_kit_id instead.

callback_urlstring nullable

HTTPS URL to receive a webhook POST when the job completes, fails, or is cancelled. See the Webhooks documentation for payload format and signature verification.

idempotency_keystring nullable

Client-generated unique key to prevent duplicate job creation. If a job with this key already exists, its status is returned instead of creating a new one.

model_tier'fable' | 'pro' | 'standard' | 'lite' | 'kimi-k2.5' | 'kimi-k2.6' | 'gpt-5.6' nullable

AI model tier: 'fable' (Expert — our most capable model), 'pro' (best for complex tasks), 'standard', 'lite', 'kimi-k2.5' (Fireworks-hosted Kimi K2.5), 'kimi-k2.6' (Fireworks-hosted Kimi K2.6), or 'gpt-5.6' (OpenAI GPT-5.6 at high reasoning). Defaults to automatic selection based on task complexity.

reference_canvas_idsstring[] nullable

List of prefixed cvs_ IDs to use as design inspiration. The agent can see these designs and reference their style, layout, or content.

number_of_slidesinteger nullable

Optional maximum number of slides for slide-generation jobs. When omitted for slides, Moda defaults to an 8-slide target and clamps to your plan limit.

Example request

{
  "conversation_id": "conv_01HT9WK8N3M2J4A5Z6P7Q8R9TV",
  "canvas_id": "cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV",
  "template_canvas_id": "cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV",
  "brand_kit_id": "bk_01HT9WK8N3M2J4A5Z6P7Q8R9TV",
  "attachments": [
    {
      "file_id": "file_01HT9WK8N3M2J4A5Z6P7Q8R9TV",
      "role": "source",
      "label": "Q2 strategy brief"
    }
  ],
  "reference_canvas_ids": [
    "cvs_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
  ]
}

Response

Successful Response

idstring required

Prefixed task_... identifier.

kind'design' | 'export' | 'remix' | 'brand_kit_extract' required

Discriminator for the kind-specific result payload.

status'queued' | 'running' | 'succeeded' | 'failed' | 'canceled' | 'expired' required

Frozen public status taxonomy. DB enum values are mapped at the API boundary -- never exposed directly.

created_atstring nullable

ISO 8601 timestamp.

started_atstring nullable

ISO 8601 timestamp.

completed_atstring nullable

ISO 8601 timestamp.

attemptinteger required

Current attempt number (1-based).

max_attemptsinteger required

Maximum attempts before dead-lettering.

inputobject nullable

Sanitized echo of the original request.

errorobject nullable

Error info for failed tasks: {message, retryable}.

retry_after_msinteger nullable

Suggested milliseconds to wait before the next poll. Null for terminal tasks.

Example response

{
  "id": "task_01HT9WK8N3M2J4A5Z6P7Q8R9TV"
}