Business Context
The Problem: Wearable returns share a single root cause: the device didn’t fit. S/M/L guidance on a product page doesn’t get read. A loose band corrupts the optical signal, and the user blames the sensor. A smart ring that’s off by one size ships back by day three. Bracket-ordering is still standard practice in the category.
The Solution: Replace the sizing kit with a short prompt at size selection. DimensionsPot takes the height and weight your customer will share when there’s a clear reason to, and returns wrist, hand, ankle, and finger dimensions — including the PIP joint width that actually determines ring size — in under 10ms.
The Boundary Safety Net: Every dimension ships with a 95% prediction interval. When a predicted value lands near a size threshold, both adjacent sizes surface automatically in the UI.
Recommended API Configuration
| Parameter | Value | Reason |
|---|---|---|
anchors | body_height + body_mass | PRIMARY_BOTH tier — FLESH dims ~78, BONE dims ~85 |
bundle | HAND_ARM | Returns all 32 hand and arm dimensions |
body_build_type | CIVILIAN | General consumer population |
confidence_score_threshold | 70 | Captures all wrist and hand FLESH dims (~78) while filtering uncertain outputs |
target_region | Customer’s region | Regional calibration has measurable effect on wrist and hand norms |
Single-anchor note: If only height is available, use
anchors: {"body_height": <value>}. The engine imputesbody_mass(PRIMARY_ONE tier).wrist_circumferenceconfidence drops to ~62 — sufficient for S/M/L band routing, but always surface both adjacent sizes near a threshold.
Key Dimensions for Wearables
Wrist & arm:
| API Key | Label | Type | Use |
|---|---|---|---|
wrist_circumference | Wrist Circumference | FLESH | Smartwatch / fitness tracker band sizing |
wrist_breadth | Wrist Breadth | BONE | Watch lug-to-lug fit; band clasp width |
forearm_circumference | Forearm Circumference | FLESH | Forearm band and sleeve sizing |
Hand & fingers:
| API Key | Label | Type | Use |
|---|---|---|---|
hand_circumference | Hand Circumference | FLESH | Smart ring broad sizing proxy |
hand_breadth | Hand Breadth | BONE | Glove width; haptic device sizing |
hand_length | Hand Length | BONE | Glove total length |
hand_digit_4_width_pip | Ring Finger Width (PIP) | BONE | Smart ring precise sizing — PIP is the joint the ring must pass over |
hand_digit_4_length | Ring Finger Length | BONE | Ring band width / coverage zone |
Ankle:
| API Key | Label | Type | Use |
|---|---|---|---|
ankle_circumference | Ankle Circumference | FLESH | Ankle tracker and GPS tag sizing |
ankle_circumferenceis in theLEGS_FEETbundle. To retrieve it alongside hand and wrist dimensions in one call, add"ankle_circumference"tospecific_dimensionswhile keepingbundle: "HAND_ARM".
Sample Request — Full Hand & Wrist Profile
curl -X POST "https://dimensionspot-bodysize-engine.p.rapidapi.com/v1/predict" \
-H "Content-Type: application/json" \
-H "X-RapidAPI-Key: YOUR_KEY" \
-H "X-RapidAPI-Host: dimensionspot-bodysize-engine.p.rapidapi.com" \
-d '{
"input_data": {
"input_unit_system": "metric",
"subject": {
"gender": "female",
"exact_age": 34.0,
"age_category": "ADULT",
"input_origin_region": "EUROPE"
},
"anchors": {
"body_height": 1680.0,
"body_mass": 65.0
}
},
"output_settings": {
"calculation": {
"calculation_model": "AUTO",
"target_region": "EUROPE",
"body_build_type": "CIVILIAN"
},
"requested_dimensions": {
"bundle": "HAND_ARM",
"specific_dimensions": null
},
"output_format": {
"unit_system": "metric",
"confidence_score_threshold": 70,
"include_range_95": true,
"include_iso_codes": false
}
}
}'
Band Size Mapping
BAND_SIZES = [
(0, 150, "XS"), (150, 165, "S"), (165, 185, "M"),
(185, 205, "L"), (205, 999, "XL"),
]
def lookup_band_size(wrist_mm):
for lo, hi, label in BAND_SIZES:
if lo <= wrist_mm < hi:
return label
return "Unknown"
wrist_dim = response["body_dimensions"]["wrist_circumference"]
wrist = wrist_dim["value"]
lower_95 = wrist_dim["range_95"][0]
upper_95 = wrist_dim["range_95"][1]
size = lookup_band_size(wrist)
size_lower = lookup_band_size(lower_95)
size_upper = lookup_band_size(upper_95)
if size_lower != size_upper:
print(f"Between sizes: try {size_lower} or {size} — choose based on fit preference")
else:
print(f"Recommended band size: {size}")
Smart Ring Sizing Pattern
Broad sizing — use hand_circumference as the primary routing signal:
RING_SIZES_BY_HAND_CIRC = [
(0, 170, "XS"), (170, 185, "S"), (185, 200, "M"),
(200, 215, "L"), (215, 230, "XL"), (230, 999, "XXL"),
]
Precise sizing — hand_digit_4_width_pip is the anatomical width of the ring finger at the PIP joint — the widest point the ring must pass over:
import math
RING_SIZES_BY_PIP = [
(0, 15.6, "5", "49"), (15.6, 16.5, "6", "52"),
(16.5, 17.3, "7", "54"), (17.3, 18.1, "8", "57"),
(18.1, 19.0, "9", "60"), (19.0, 19.8, "10", "62"),
(19.8, 999, "11+", "65+"),
]
def lookup_ring_size_by_pip(pip_width_mm):
for lo, hi, us_size, iso_circ in RING_SIZES_BY_PIP:
if lo <= pip_width_mm < hi:
return us_size, iso_circ
return "Unknown", None
dims = response["body_dimensions"]
pip_width = dims["hand_digit_4_width_pip"]["value"]
us_size, iso_circ = lookup_ring_size_by_pip(pip_width)
est_circ_mm = round(pip_width * math.pi, 1)
Two-signal approach: Use
hand_circumferencefor initial size routing. Usehand_digit_4_width_pipfor confirmation. When both signals point to the same size, confidence is high. When they diverge by one step, surface both and let the customer choose.
Response Handling Tips
- Height + weight (PRIMARY_BOTH):
wrist_circumference~78 confidence — sufficient for confident single-size routing. - Height only (PRIMARY_ONE):
wrist_circumferencedrops to ~62 confidence — adequate for S/M/L triage, but always surface both adjacent sizes when the predicted value sits within 5 mm of a threshold. wrist_breadth(BONE, ~85 confidence) is the bony wrist width — use it for watch lug-to-lug clearance, not for circumference-based band sizing.- Regional calibration has a measurable effect on wrist and hand norms. For
ASIA_PACIFIC, wrist circumference norms differ from the ANSUR II baseline by up to 8–12 mm — usingGLOBALas default will produce systematically wrong size recommendations for Asian customers. - For ankle tracking devices, add
"ankle_circumference"tospecific_dimensionsrather than switching toFULL_BODY.