---
title: "List Canvases"
method: GET
path: "/canvases"
tags: ["canvases"]
---

# List Canvases

`GET /canvases`

List canvases accessible to the API key's team (cursor pagination).

## Query parameters

- `cursor` string, nullable — Opaque pagination cursor. Pass the ``next_cursor`` from the previous response. Omit on the first request.
- `limit` integer — Max canvases per page. Defaults to 20, caps at 100.

## Headers

- `Moda-Version` '2026-04-12' | '2026-05-01'

## Response `200`

Successful Response

- ListCanvasesResponse — Cursor-paginated canvas list response (ENG-2377). Callers pass ``?cursor=`` on subsequent requests; ``next_cursor`` is ``null`` when there are no more rows. No ``total`` is returned — we stop running ``SELECT COUNT(*)`` on every list call. See ``/api/versioning`` for the legacy-to-cursor migration map.
  - `data` CanvasItem[], required — Canvases in this page, newest first.
    - `id` string, required — Unique canvas identifier (prefixed ``cvs_...``).
    - `name` string, required — Display name of the canvas.
    - `url` string, required — Full URL to open the canvas in the Moda editor.
    - `category` string, nullable — Canvas format category — one of ``slides``, ``social``, ``carousel``, ``pdf``, ``diagram``, ``ui``, ``animation``, ``prints``, ``web-ads``, ``other``, or ``null`` when unset. Use this to distinguish slide decks from social posts etc. in list UIs.
    - `visibility` string, nullable — Canvas visibility — ``team`` (visible to everyone on the team) or ``private`` (only the creator and explicit shares).
    - `created_at` string, nullable — ISO 8601 timestamp when the canvas was created.
    - `updated_at` string, nullable — ISO 8601 timestamp of the last modification.
    - `created_by` CreatorInfo — Minimal creator attribution for list/search responses.
      - `id` string, required — User ID of the creator.
      - `name` string, required — Display name of the creator.
      - `email` string, required — Email address of the creator.
  - `next_cursor` string, nullable — Opaque cursor to pass as ``?cursor=`` on the next request. ``null`` when no more canvases follow.

## Other responses

- `401` — Authentication required.
- `403` — Permission denied for this scope.
- `404` — Resource not found.
- `409` — Conflict (idempotency / resource state).
- `422` — Request validation failed.
- `429` — Rate limit exceeded.
- `500` — Internal error.

---

[API](https://skmtc.net/moda/apis/moda-public-api.md) · [All operations](https://skmtc.net/moda/apis/moda-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/moda/moda-public-api/versions/b34cb4cca59e/schema)
