---
title: "Create Pose Variant"
method: POST
path: "/api/tryon/pose-variants"
tags: ["tryon"]
---

# Create Pose Variant

`POST /api/tryon/pose-variants`

## 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/tryon/pose-variants`
- Auth: HTTP bearer

Create a user-scoped variant. Table-scope requires `project_id`
pointing to a project the user can access. Sketch is auto-
generated when a `source_photo_s3_key` is provided; otherwise
the caller must pass `sketch_url`. Empty sketch payloads are
rejected — there's no point creating a variant the picker can't
render.

## Request body

- TryonPoseVariantCreate: User creates a new pose variant. `scope` decides where it lives: - "global": owned by current_user, visible across all of their projects - "table": owned by current_user, attached to `project_id` Presets are seeded via migration only; the API rejects scope=preset posts.
  - `scope` string, required
  - `project_id` string, uuid, nullable
  - `slug` string, required
  - `label` string, required
  - `description` string, nullable
  - `source_photo_s3_key` string, nullable
  - `refinement_prompt` string, nullable
  - `sketch_s3_key` string, nullable
  - `sketch_url` string, nullable
  - `product_types` string[]
  - `model_categories` string[]

## Response `201`

Successful Response

- TryonPoseVariantResponse
  - `id` string, uuid, required
  - `scope` string, required
  - `owner_user_id` string, uuid, nullable, required
  - `owner_team_id` string, uuid, nullable, required
  - `project_id` string, uuid, nullable, required
  - `slug` string, required
  - `label` string, required
  - `description` string, nullable, required
  - `sketch_s3_key` string, nullable, required
  - `sketch_url` string, nullable, required
  - `source_photo_s3_key` string, nullable, required
  - `refinement_prompt` string, nullable, required
  - `product_types` string[], required
  - `model_categories` string[], required
  - `sketch_status` string
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422`: Validation Error

---

[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)
