---
title: "Create a canvas"
method: POST
path: "/v1/collections/{id}/canvases"
tags: ["Canvases"]
deprecated: true
---

# Create a canvas

`POST /v1/collections/{id}/canvases`

## Request

- Base URL: `https://api.masko.ai`
- URL: `https://api.masko.ai/v1/collections/{id}/canvases`
- Auth: HTTP bearer

> **Deprecated.**

Creates a canvas for the collection. If `template_id` is provided, items and images are generated for every node (image cost per node, 1 credit each). With no `template_id`, creates an empty canvas with zero cost. Returns 201.

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string

## Request body

- CreateCanvasBody
  - `name` string, required: Display name for the canvas.
  - `graph` object: Canvas graph JSON with nodes, edges, and inputs. Omit to create an empty canvas. Mutually exclusive with template_id.
  - `template_id` string: Optional template to apply at creation. Creates items, starts image generation for each node, and returns the populated graph plus job IDs. List templates via GET /v1/canvas-templates.
  - `node_overrides` object: Per-node overrides keyed by node key. Merged into template nodes before creation. Only used when template_id is provided.
  - `edge_overrides` object: Per-edge overrides keyed by "source->target" key. Merged into template edges before creation. Only used when template_id is provided.

## Response `201`

Created canvas (populated if template_id provided)

- CanvasResponse
  - `data` Canvas, required
    - `object` 'canvas': Resource type. Always "canvas".
    - `id` string, uuid, required
    - `name` string, required
    - `graph` object, required
    - `graph_content_hash` string, required: Revision token for the full authored graph. Send this as expected_graph_hash when replacing the graph.
    - `status` object
      - `nodes` object, required
        - `total` number, required
        - `completed` number, required
        - `pending` number, required: Incomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
        - `failed` number, required
      - `edges` object, required
        - `total` number, required
        - `completed` number, required
        - `pending` number, required
        - `failed` number, required
      - `ready` boolean, required
      - `generated_ready` boolean
      - `preview_ready` boolean
      - `media` object
        - `generation` object, required
          - `ready` boolean, required
          - `nodes` object, required
            - `total` number, required
            - `completed` number, required
            - `pending` number, required: Incomplete node count. Includes failed nodes for backward compatibility; inspect failed for the terminal subset.
            - `failed` number, required
          - `edges` object, required
            - `total` number, required
            - `completed` number, required
            - `pending` number, required
            - `failed` number, required
        - `preview` object, required
          - `ready` boolean, required
          - `repairable` boolean, required
          - `repairable_edges` number, required
          - `waiting_edges` number, required
          - `missing_edges` number, required
          - `missing_formats` string[], required
        - `variants` object, required
          - `sizes` string[], required
          - `missing` object[], required
            - `edge_id` string, required
            - `size` string, required
            - `formats` string[], required
      - `failed_nodes` object[], required
        - `node_id` string, required
        - `job_id` string, uuid, nullable, required
        - `error` string, required
      - `failed_edges` object[], required
        - `edge_id` string, required
        - `job_id` string, uuid, nullable, required
        - `error` string, required
      - `edge_media` object[]
        - `edge_id` string, required
        - `source` string, required
        - `target` string, required
        - `video_asset_id` string, uuid, nullable, required
        - `base` object, required
          - `video_ready` boolean, required
          - `webm_ready` boolean, required
          - `hevc_ready` boolean, required
          - `preview_ready` boolean, required
          - `derivatives_in_flight` boolean, required
          - `source_job_id` string, uuid
          - `source_job_status` string
          - `missing` string[], required
        - `variants` object, required
    - `created_at` string
    - `updated_at` string

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `409`: Conflict

---

[API](https://skmtc.dev/masko/apis/masko-api.md) · [All operations](https://skmtc.dev/masko/apis/masko-api/llms.txt) · [OpenAPI document](https://skmtc.dev/masko/apis/masko-api/revisions/91eb3006a92f?raw)
