Skip to content

Fit preference and usual sizes

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.

“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.

“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.

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:

{
"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:

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

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

{
"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.

Was this page helpful?