SizeCharts

Application API for fetching size chart data and size recommendations for storefront display.

Default Country Comparison Config

Storefront read for the per-application size-to-size mapping table used to render cross-country size comparisons.

Operations
GET
/service/application/size-chart/v1.0/default-country-comparison-config
# Get default country comparison config
GET

Get default country comparison config

FDK Method Name: getDefaultCountryComparisonConfig
Fetch the singleton default country-comparison table used to render cross-country size mappings on the storefront. Note: the handler also returns 404 with `status: not_found` when no config has been created yet — clients should render an empty state. That path is not contract-tested because the endpoint has no input to discriminate "found" from "missing".
Parameters
No Parameters
Response
200
Config found and returned.
DefaultCountryComparisonConfigResult
status
string
data
object (DefaultCountryComparisonConfigData)
Nullable
DefaultCountryComparisonConfigData
sizes
array of object (DefaultCountryComparisonSizeRow)
Array of DefaultCountryComparisonSizeRow
priority
integer
| value >= 1
Row sort key.
uni
string
Nullable
uk
string
Nullable
us
string
Nullable
eu
string
Nullable
aus
string
Nullable
ca
string
Nullable
br
string
Nullable
additionalProperties
Allows you to attach properties in addition to the ones mentioned above. Any additional properties are allowed.
additionalProperties
Allows you to attach properties in addition to the ones mentioned above. Any additional properties are allowed.
Examples
Parameters
Parameters are not required.
GET
/service/application/size-chart/v1.0/default-country-comparison-config
Loading...
Response
Loading...

Size Chart Lookup

Fetch size chart data for products on storefront pages (PDP/PLP). Supports a 3-level fallback: product-specific → fit-type → brand/category generic.

Operations
GET
/service/application/size-chart/v1.0/size-chart
# Get size chart by query
GET

Get size chart by query

FDK Method Name: getSizeChartByQuery
Fetch size chart data for a product using a 3-level fallback lookup: (1) product-level by item_code + gender, (2) fit-level by brand UID + category UID + fit_type + gender, (3) basic-level by brand UID + category UID. Either (item_code + gender) or (brand + category + gender) must be provided. Returns status "not_found" with data null when no chart exists at any level.
Parameters
item_code
string
Product item code. Required when using product-level lookup (must be paired with gender).
gender
string
Product gender. Required for product-level lookup (paired with item_code). Also used as an additional filter at fit-level lookup when combined with brand + category + fit_type.
brand
integer
Brand UID (numeric). Required when using brand/category-level lookup (must be paired with category).
category
integer
Category UID (numeric). Required when using brand/category-level lookup (must be paired with brand).
vendor_code
string
Optional vendor code to narrow down results within a brand+category lookup.
fit_type
string
Optional fit type (e.g. slim, regular). Enables fit-level lookup when combined with brand + category.
measurement_type
string
Optional measurement type filter (e.g. body_measurement, garment_measurement).
Response
200
400
Size chart lookup completed. Check the `status` field: "success" — chart found and returned; "not_found" — no chart exists at any fallback level.
SizeChartResult
status
string
data
object (SizeChartResultData)
Nullable
SizeChartResultData
size_chart_data
object (SizeChartDataRow)
SizeChartDataRow
item_code
string
Nullable
brand_uid
integer
Numeric brand UID.
brand_slug
string
Nullable
category_uid
integer
Numeric category UID.
category_l3
string
Nullable
gender
string
Nullable
vendor_code
string
Nullable
measurement_type
string
fit_type
string
sizes
array of object (SizeEntry)
Array of SizeEntry
size_name
string
Display name of the size (e.g. S, M, L, XL).
priority
integer
| value >= 1
Sort order priority for this size entry.
brand_size_attribute
string
Brand size value (e.g. "10", "M"). The actual size label as the brand declares it.
brand_size_format
string
Format/system the brand_size_attribute is expressed in (e.g. "UK"). Renamed from brand_size_format_attribute in the post-migration schema; the value already names the format so the _attribute suffix was redundant.
universal_size_attribute
string
Universal, brand-agnostic size value for this entry.
universal_size_format
string
Format the universal_size_attribute is expressed in (e.g. "S-M-L-XL"). Follows the same convention as brand_size_format - the value already names the format, so no _attribute suffix.
additionalProperties
Allows you to attach properties in addition to the ones mentioned above. Any additional properties are allowed.
additionalProperties
Allows you to attach properties in addition to the ones mentioned above. Any additional properties are allowed.
template_configs
array of object (TemplateConfig)
Array of TemplateConfig
measurement_type
string
The measurement type this config applies to.
size_display
string
Which size system to display (e.g. UK, US, EU).
attribute_sequences
array of string
Ordered list of measurement attributes to display as table columns.
country_sequences
array of string
Ordered list of country/region codes (e.g. in, uk, eu) used to render the international size-comparison row on the storefront.
brand_sequences
array of string
Ordered list of brand slugs used to render cross-brand size comparison on the storefront.
other_attributes
array of string
Catch-all list of unmapped attribute names that do not belong to any standard sequence.
Examples
Parameters
item_code:
"ITEM001"
gender:
"men"
brand:
42
category:
7
vendor_code:
"VND001"
fit_type:
"regular"
measurement_type:
"body_measurement"
GET
/service/application/size-chart/v1.0/size-chart
Loading...
Response
Loading...

Size Guide

Past-purchase size guide for authenticated users on product pages. Shows up to three previous orders alongside the equivalent size on the current product, accumulated across the brand, category and cluster tiers.

Operations
GET
/service/application/size-chart/v1.0/size-guide
# Get past-purchase size guide
GET

Get past-purchase size guide

FDK Method Name: getSizeGuide
Returns up to three of the logged-in user's past purchases in this category, each paired with the equivalent size on the product currently being viewed, so the storefront can show "you bought M in brand X, which is L here". Unlike `/size-recommendation`, which stops at the first tier that produces an answer, this endpoint accumulates: each tier tops the list up towards three entries and the next tier runs only if room remains. - Tier 1, brand level: past orders of the same category and brand. On the garment measurement lane the order's fit must match `fit_type`; on the body measurement lane there is no fit check. These orders are their own recommendation, so `recommended_size` equals `size_name`. Matched orders are then excluded from the later tiers. - Tier 2, category level: remaining same-category orders, fit-agnostic on both lanes, matched to the current product's chart by pivot measurement. Orders that do not match are skipped and the loop continues. - Tier 3, cluster: orders from sibling categories, with an ease-factor adjustment on the garment lane. Orders with an unresolvable ease factor are skipped, and any failure drops this tier entirely. `recommended_size` at the top level is simply the first entry's recommended size, taken positionally rather than by any score, so `purchased_orders` is ordered most-relevant-first. As with `/size-recommendation`, having nothing to show is a normal outcome: HTTP 200 with `status` "success", `data` null and a machine-readable `reason`. Clients must branch on `data` being null rather than on `status`. Missing or malformed query params are reported the same way, so this endpoint never returns 400. Requires an authenticated caller, resolved from the `x-user-data` header injected by the API gateway, falling back to the `f.session` or `UserId` cookies. 401 is the only error status this endpoint returns.
Parameters
category
integer
Required
Category UID (numeric) of the product being viewed.
brand
integer
Required
Brand UID (numeric) of the product being viewed.
gender
string
Required
Gender/segment of the product being viewed. Normalised the same way as on `/size-recommendation`: matched case-insensitively against a set of known aliases and resolved to one of Men, Women, Boys, Girls, Infants, Kids, Unisex, Home & Kitchen, Tech, Toys & Baby Care or Beauty. Deliberately not an enum, because the raw aliases are accepted too. An unrecognised value yields a 200 with reason "invalid_gender".
fit_type
string
Fit type of the product being viewed. Only read on the garment measurement lane, where a tier 1 order must share this fit to qualify, and where it drives the tier 3 ease-factor adjustment. Unrecognised values are treated as absent.
item_code
string
Item code of the product being viewed. Not used to select past orders; it is forwarded to the embedded size chart lookup, where it enables the product-level match when paired with gender.
vendor_code
string
Vendor code of the product being viewed. Forwarded to the embedded size chart lookup to narrow the match; it does not affect past-order selection.
sub_category
string
Sub-category of the product being viewed. Accepted and carried on the request for traceability; it does not currently affect either the guide or the embedded size chart.
season_code
string
Season code of the product being viewed. Accepted and carried on the request for traceability; it does not currently affect either the guide or the embedded size chart.
style_type
string
Style type of the product being viewed. Accepted and carried on the request for traceability; it does not currently affect either the guide or the embedded size chart.
Response
200
401
Size guide lookup completed. `status` is always "success" for both outcomes, so branch on `data`: an object when at least one past purchase could be mapped, null when none could (see `reason`).
SizeGuideResult
status
string
Always "success", for both a populated and an empty guide - an empty guide is not an error. Branch on `data` instead.
data
object (SizeGuideData)
Nullable
Null when no past purchase could be mapped; `reason` says why.
SizeGuideData
recommended_size
string
Recommended size for the current product. Taken positionally from the first entry of `purchased_orders` rather than by any score.
purchased_orders
array of object (SizeGuidePurchasedOrder)
Past purchases mapped onto the current product, most relevant first. Capped at three entries.
Maximum Items : 3
Array of SizeGuidePurchasedOrder
size_name
string
The size the user actually ordered, as labelled by that past product's brand.
recommended_size
string
The equivalent size on the product currently being viewed. Equal to `size_name` for tier 1 entries, where the past order is its own recommendation.
tips
string
Nullable
Free-text fit tip, taken from the matched size chart entry and falling back to the past order's own tip.
image_url
string
Nullable
Product image from the past order, for rendering the guide row.
ordered_at
string
| date-time
When the past order was placed.
brand_name
string
Nullable
Brand of the past order.
category_name
string
Nullable
Category of the past order.
size_chart_attributes
object
Measurements of the size the user ordered, keyed by attribute name (e.g. chest, waist). Only the attributes configured as active for that order's category and gender are included, so the key set varies by category and may be empty.
recommended_size_chart_attributes
object
Measurements of the recommended size on the current product, keyed by attribute name. Limited to the attributes configured for the current product's category and gender, so it may carry a different key set from `size_chart_attributes`.
size_chart
object (SizeChartResultData)
Nullable
Size chart for the product being viewed, in the same shape as the `data` of the size-chart endpoint. Null when no chart could be resolved.
SizeChartResultData
size_chart_data
object (SizeChartDataRow)
SizeChartDataRow
item_code
string
Nullable
brand_uid
integer
Numeric brand UID.
brand_slug
string
Nullable
category_uid
integer
Numeric category UID.
category_l3
string
Nullable
gender
string
Nullable
vendor_code
string
Nullable
measurement_type
string
fit_type
string
sizes
array of object (SizeEntry)
Array of SizeEntry
size_name
string
Display name of the size (e.g. S, M, L, XL).
priority
integer
| value >= 1
Sort order priority for this size entry.
brand_size_attribute
string
Brand size value (e.g. "10", "M"). The actual size label as the brand declares it.
brand_size_format
string
Format/system the brand_size_attribute is expressed in (e.g. "UK"). Renamed from brand_size_format_attribute in the post-migration schema; the value already names the format so the _attribute suffix was redundant.
universal_size_attribute
string
Universal, brand-agnostic size value for this entry.
universal_size_format
string
Format the universal_size_attribute is expressed in (e.g. "S-M-L-XL"). Follows the same convention as brand_size_format - the value already names the format, so no _attribute suffix.
additionalProperties
Allows you to attach properties in addition to the ones mentioned above. Any additional properties are allowed.
additionalProperties
Allows you to attach properties in addition to the ones mentioned above. Any additional properties are allowed.
template_configs
array of object (TemplateConfig)
Array of TemplateConfig
measurement_type
string
The measurement type this config applies to.
size_display
string
Which size system to display (e.g. UK, US, EU).
attribute_sequences
array of string
Ordered list of measurement attributes to display as table columns.
country_sequences
array of string
Ordered list of country/region codes (e.g. in, uk, eu) used to render the international size-comparison row on the storefront.
brand_sequences
array of string
Ordered list of brand slugs used to render cross-brand size comparison on the storefront.
other_attributes
array of string
Catch-all list of unmapped attribute names that do not belong to any standard sequence.
message
string
Human-readable outcome. Present only when `data` is null, where it is always "No recommendation".
reason
string
Machine-readable code explaining why the guide is empty. Present only when `data` is null. This endpoint emits a narrower set than `/size-recommendation`: the per-order tier failures are skipped silently rather than reported, so an exhausted lookup surfaces as `no_order_history`. - `missing_params` - category or brand was absent or not numeric. - `invalid_gender` - gender was absent or not a recognised value. - `config_disabled` - the platform recommendation config withheld this product: either the master switch is off, or this (category, brand) pair is not on the allowlist. An empty allowlist is unrestricted. Gating never depends on the caller's identity. - `no_measurement_type` - no measurement type is configured for this category + brand + gender, so neither lane could be selected. - `no_order_history` - all three tiers ran but produced no usable past purchase.
Enum
Examples
Parameters
category:
7
brand:
42
gender:
"Men"
fit_type:
"regular"
item_code:
"ITEM001"
vendor_code:
"VND001"
sub_category:
"tshirts"
season_code:
"SS24"
style_type:
"casual"
GET
/service/application/size-chart/v1.0/size-guide
Loading...
Response
Loading...

Size Recommendation

Personalised size recommendations for authenticated users on product pages, derived from the user's own recent orders. Resolved by measurement lane: same-category and same-brand order, then same-category pivot measurement match, then sibling-category cluster.

Operations
GET
/service/application/size-chart/v1.0/size-recommendation
# Get personalised size recommendation
GET

Get personalised size recommendation

FDK Method Name: getSizeRecommendation
Returns a single recommended size for the logged-in user for the product being viewed, derived from that user's own recent order history. The engine first resolves the measurement type configured for the category + brand + gender triple, which selects one of two lanes: - Body measurement lane: `fit_type` is never read. A past order of the same category and the same brand wins outright. Otherwise the pivot measurement of the most recent same-category order is matched against the current product's size chart. Once any same-category history exists this lane never falls back to the sibling-category cluster. - Garment measurement lane: a past same-category, same-brand order whose fit matches the requested `fit_type` wins. Otherwise the engine falls back to the same-category pivot match (fit-agnostic), and then to the sibling-category cluster with an ease-factor adjustment. Having no recommendation is a normal outcome, not an error. The response is still HTTP 200 with `status` "success", `data` null, and a machine-readable `reason`. Clients must branch on `data` being null rather than on `status`, and simply render no size hint in that case. This covers missing or malformed query params too (reasons `missing_params` and `invalid_gender`): the endpoint deliberately never returns 400, so a bad request cannot break the product page. Requires an authenticated caller. The user is resolved from the `x-user-data` header injected by the API gateway, falling back to the `f.session` or `UserId` cookies. 401 is the only error status this endpoint returns.
Parameters
category
integer
Required
Category UID (numeric) of the product being viewed.
brand
integer
Required
Brand UID (numeric) of the product being viewed.
gender
string
Required
Gender/segment of the product being viewed. Matched case-insensitively against a set of known aliases and normalised to a canonical value, so both "men" and "Men" resolve to Men, and both "juniorb" and "junior boys" resolve to Boys. Canonical values are Men, Women, Boys, Girls, Infants, Kids, Unisex, Home & Kitchen, Tech, Toys & Baby Care and Beauty. Deliberately not modelled as an enum because the endpoint also accepts the raw aliases. An unrecognised value yields a 200 with reason "invalid_gender".
fit_type
string
Fit type of the product being viewed (e.g. regular, slim_fit, oversized). Only read on the garment measurement lane, where a past order must share this fit to win outright. Values are slugified before matching, so "Slim-Fit" and "slim fit" both resolve to slim_fit. Unrecognised values are treated as absent.
item_code
string
Item code of the product being viewed. Carried through the request for traceability and logging; it does not narrow the recommendation lookup.
Response
200
401
Recommendation lookup completed. `status` is always "success" for both outcomes, so branch on `data`: an object when a size was recommended, null when none could be derived (see `reason`).
SizeRecommendationResult
status
string
Always "success", for both a found and a missing recommendation - a missing recommendation is not an error. Branch on `data` instead.
data
object (SizeRecommendationData)
Nullable
Null when no recommendation could be derived; `reason` says why.
SizeRecommendationData
size_name
string
Recommended size label, as it appears on the current product's size chart (e.g. S, M, L, 38).
image_url
string
Nullable
Image of the past order this recommendation was derived from, when one is available.
brand_size_attribute
string
Nullable
Brand size value for the recommended size (e.g. "38", "M"), as the brand declares it.
brand_size_format
string
Nullable
Format the brand_size_attribute is expressed in (e.g. "UK").
universal_size_attribute
string
Nullable
Universal, brand-agnostic size value for the recommended size.
universal_size_format
string
Nullable
Format the universal_size_attribute is expressed in (e.g. "S-M-L-XL").
message
string
Human-readable outcome. Present only when `data` is null, where it is always "No recommendation".
reason
string
Machine-readable code explaining why no recommendation was produced. Present only when `data` is null. - `missing_params` - category or brand was absent or not numeric. - `invalid_gender` - gender was absent or not a recognised value. - `config_disabled` - the platform recommendation config withheld this product: either the master switch is off, or this (category, brand) pair is not on the allowlist. An empty allowlist is unrestricted. Gating never depends on the caller's identity. - `no_measurement_type` - no measurement type is configured for this category + brand + gender, so neither lane could be selected. - `no_size_in_tolerance` - usable order history existed, but no size on the current product's chart fell within tolerance of the user's pivot measurement. - `no_cluster` - the cluster fallback found no sibling categories for this category + gender. - `advance_gate_failed` - a size was matched but it lacked the brand and universal size attributes the advance gate requires.
Enum
Examples
Parameters
category:
7
brand:
42
gender:
"Men"
fit_type:
"regular"
item_code:
"ITEM001"
GET
/service/application/size-chart/v1.0/size-recommendation
Loading...
Response
Loading...