# Fit preference and usual sizes

> Two optional inputs a shopper can add besides their body, how they like clothes to fit and the size they usually wear in other brands. Your store still receives sizes only.

Source: https://docs.tryyoursize.com/guides/fit-preferences/

Besides their body, a shopper can tell TryYourSize two optional things. Both are asked after the essential measurements, take one tap each and can be skipped. They live in the shopper's TryYourSize profile, follow them to every store, and can be changed at any time in the measuring window ("Refine your body") or in their account.

Your store never receives these inputs. As with the body, you get a size.

## Fit preference

"How do you like your clothes to fit?" with three answers:

| Value | The shopper says they like clothes |
|---|---|
| `tight` | close to the body |
| `regular` | regular |
| `loose` | with more room |

Not answered means `regular`. The shopper can also set a different answer for tops and for bottoms (for example tops `regular`, bottoms `loose`); a per-line answer overrides the overall one for that line.

The window shows the answer back as a fact the shopper stated ("You prefer a regular fit"), never as a judgement of a garment.

## Usual sizes

"Do you know your size in another brand?": rows such as "I usually wear M in Uniqlo tops". The shopper picks the brand from a curated list, the line (tops or bottoms, women's or men's) and one of that brand's sizes. Several rows are allowed, up to 20.

A row can also come from a purchase the shopper kept in a store that uses TryYourSize. Those rows are labelled "From a purchase you kept"; the shopper can delete them but not edit them.

## API shapes

You do not call these routes from a store integration: the measuring window and our SDKs do, with the shopper's session. They are listed for native apps that run the window's flow themselves, and so you can read your request logs.

| Route | Auth | What it does |
|---|---|---|
| `GET /v1/shopper/fit-profile` | Shopper session | The shopper's preference and usual sizes. An empty profile when nothing was saved. |
| `PUT /v1/shopper/fit-profile` | Shopper session | Replaces the profile. `usual_sizes` is the whole list. Unknown brand or size: `422`. |
| `GET /v1/usual-size-brands` | None | The curated brand list with each brand's sizes per line. The same for every shopper; cacheable for a day. |

The profile:

```json
{
  "preference": "regular",
  "preference_tops": null,
  "preference_bottoms": "loose",
  "usual_sizes": [
    { "id": "6f1c…", "brand": "uniqlo", "line": "tops", "sex": "female", "size": "M", "source": "declared", "created_at": "2026-10-27T10:00:00Z" }
  ],
  "updated_at": "2026-10-27T10:00:00Z"
}
```

- `preference`, `preference_tops`, `preference_bottoms`: `tight`, `regular`, `loose` or `null` (not answered).
- `usual_sizes[].brand`: a `key` from `GET /v1/usual-size-brands`. `line`: `tops` or `bottoms`. `sex`: the brand's women's (`female`) or men's (`male`) line, the shopper's own when omitted. `size`: one of that brand's sizes for the line.
- On `PUT`, rows without an `id` are saved as the shopper's own (`declared`). A `kept_purchase` row stays only when its `id` is in the list.

The brand list:

```json
{
  "data": [
    { "key": "uniqlo", "name": "Uniqlo", "lines": [
      { "line": "tops", "sex": "female", "sizes": ["XS", "S", "M", "L", "XL"] }
    ] }
  ]
}
```

## The `fit` field on size requests

`POST /v1/tryon` and `POST /v1/recommendation_handles` accept an optional `fit` object with the same fields as the profile (without `id`, `source`, `created_at` and `updated_at`):

```json
{
  "product": "CREW-TSHIRT",
  "basics": { "sex": "female", "age_years": 34, "height_mm": 1680, "weight_kg": 61 },
  "measurements": [],
  "body_state": [],
  "fit": { "preference": "regular", "usual_sizes": [{ "brand": "uniqlo", "line": "tops", "size": "M" }] }
}
```

Without `fit`, a signed-in shopper's saved profile is used, and a guest gets sizes for a `regular` preference. The measuring window sends it with every size request: a signed-in shopper's saved profile, or what a guest answered in this session.

In TypeScript, `@tryyoursize/sdk` and `@tryyoursize/react` export the types `FitProfile`, `FitInput`, `PreferredFit`, `UsualSize` and `UsualSizeBrand`.
