---
title: "List Templates"
method: GET
path: "/api/hand-templates"
---

# List Templates

`GET /api/hand-templates`

## Request

- Base URL: `https://api.tintin-x.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tintin-x.com/api/hand-templates`
- Auth: HTTP bearer

Picker payload — admin catalog + caller's own templates.

## Response `200`

Successful Response

- HandTemplateListResponse: Picker payload — admin first, then user-saved newest-first. The route returns admin + user rows in one shot because the picker shows them side-by-side; the source badge differentiates them in the UI. No pagination in v1 — admin catalog is <50 rows and user rows are scoped per-user; we'll add cursors if/when a power user crosses a few hundred saved templates.
  - `items` HandTemplateResponse[], required
    - `id` string, uuid, required
    - `slug` string, required
    - `label` string, required
    - `pose` 'single_hand' | 'two_hands_layered' | 'fist_flat_dual' | 'holding_prop', required
    - `skin_tone` 'fair' | 'light' | 'medium' | 'tan' | 'deep', required
    - `aspect_ratio` '1:1' | '4:5' | '3:4' | '16:9', required
    - `background` 'white' | 'gradient' | 'extended', required
    - `prop_slug` string, nullable
    - `hand_url` string, required
    - `preview_url` string, nullable
    - `source` 'admin' | 'upload' | 'ai_gen', required
    - `is_active` boolean, required
    - `gen_prompt` string, nullable
    - `owner_user_id` string, uuid, nullable
    - `preprocess_ready` boolean
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

---

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