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

# List templates

`GET /v1/templates`

Lists public email templates under `{ data, pagination }`. Each row is FULL — it carries the rendered `html` + `previewImage` plus the display metadata (`title`, `category`, `brand`, `updatedAt`), so you never need a follow-up get-one round-trip. Supports exact `?brand=` and `?category=` filters and a lightweight `?semantic=` text filter. Templates are organization-wide references (use one as `referenceEmailId` on `POST /v1/emails`).

## Query parameters

- `brand` string
- `category` string
- `semantic` string
- `limit` union
  - number
  - string
- `cursor` string

## Response `200`

A page of templates matching the filters.

- TemplatesListResponse
  - `data` object[], required
    - `emailId` string, required
    - `title` string, required
    - `category` string
    - `brand` string
    - `html` string, required
    - `previewImage` string, uri, required
    - `updatedAt` string, required
  - `pagination` object, required
    - `limit` integer, required
    - `cursor` string, nullable, required
    - `hasMore` boolean, required

## Other responses

- `400` — The request body or query string was invalid (unknown key, wrong type, or missing required field). Strict schemas reject unknown keys — including `brandId`, which is always resolved from the API key.
- `401` — The API key was missing, invalid, or revoked.
- `403` — The caller does not have the required `emails` permission.
- `429` — The request hit the rolling rate limit window.
- `500` — Unexpected internal error.

---

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