List Templates
List the team’s template canvases with signed thumbnails (newest first).
The discovery half of the template flow: VIEW the thumbnails (download the
signed URLs and look at them — same discipline as brand logos), pick a
template whose look fits, then instantiate it with POST /v1/canvases +
template_canvas_id. total is the true team-wide template count;
when has_more is true, pass next_cursor for the rest.
Team-scoped only — templates from other teams never appear, and the ids here are ordinary canvas ids usable across the canvas endpoints.
Authorizations
API key from Settings > Developer > REST API
Headers
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"
Query Parameters
Opaque pagination cursor. Pass the next_cursor from the previous response. Omit on the first request.
Max templates per page. Defaults to 20, caps at 100.
1 <= x <= 100Response
Successful Response
Cursor-paginated team-template list (uniform #9317 envelope).
total is the true team-wide template count — the filter is an indexed
real column (template_type) over a small team-scoped set, so the COUNT
is cheap (the brand-kits lane's posture, not the JSONB-bound canvases
lane's). returned/has_more are derived server-side.
Templates in this page, newest first.
Opaque cursor to pass as ?cursor= on the next request. null means you've reached the end of the collection.
Number of items in this page (always len(data); derived server-side).
true when more items exist beyond this page — keep requesting with next_cursor until this is false. Never trust len(data) < limit alone.
The effective page-size limit this response was computed with.
True total number of items in the collection (after filters), when the endpoint can count cheaply. null on log/search lanes — use has_more there.