---
title: "List templates"
method: GET
path: "/v1/templates"
tags: ["templates"]
---

# List templates

`GET /v1/templates`

## Request

- Base URL: `https://api.framelane.io`
- URL: `https://api.framelane.io/v1/templates`
- Auth: HTTP bearer

The template gallery, newest first. No API key needed: without one the list is the public catalogue. With one, `scope` defaults to `all`, adding your own templates (`scope: workspace` on each card). Filter with `category`, `q` (name, title or description contains, case-insensitive), `aspect` and `family` (the size variants of one design). Public-only pages carry `Cache-Control: public, max-age=300` and an `ETag`; send `If-None-Match` for a 304.

## Query parameters

- `scope` 'public' | 'workspace' | 'all', nullable: Defaults to `all` with an API key, `public` without one.
- `category` string, nullable
- `q` string, nullable
- `aspect` 'landscape' | 'portrait' | 'square', nullable
- `family` string, nullable
- `limit` integer
- `cursor` string, nullable

## Response `200`

Successful Response

- CursorPageTemplateOut
  - `data` TemplateOut[], required
    - `id` string, required: The template's project id.
    - `scope` 'public' | 'workspace', required: `public` (in the gallery, from a listing) or `workspace` (one of your templates).
    - `name` string, required: The listing title for a public template, else the project name.
    - `description` string, nullable: Listing copy. Null for workspace templates.
    - `category` string, nullable: Listing category. Null for workspace templates.
    - `tags` string[]
    - `width` integer, required: Canvas width in pixels.
    - `height` integer, required: Canvas height in pixels.
    - `aspect` 'landscape' | 'portrait' | 'square', required: From width and height.
    - `duration` number, required: Composition length in seconds.
    - `element_count` integer, required
    - `thumbnail_url` string, nullable: Poster image; null until one is generated.
    - `version` integer, required: The head version the card describes.
    - `thumbnail_version` integer, nullable: The head version the thumbnail shows; stale while below `version`.
    - `preview_url` string, nullable: A finished render to play on hover. Public templates only for now.
    - `premium` boolean
    - `listing_id` string, nullable: The gallery listing, for public templates.
    - `slug` string, nullable: The listing's stable handle: GET /v1/templates/{slug}.
    - `priority` integer, nullable: Listing order, highest first.
    - `status` 'draft' | 'published', nullable: Listing status. `draft` reaches admin workspaces only.
    - `family` string, nullable: Links the size variants of one design.
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `next_cursor` string, nullable
  - `has_more` boolean

## Other responses

- `401`: Invalid API key, or scope=workspace|all without one.
- `422`: Validation Error

---

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