Wearables

Wearables — Band, Ring & Ankle Fit

Predict wrist, hand, and finger dimensions for smartwatch bands, smart rings, and ankle trackers — with PIP joint width for precise ring sizing.

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.


ParameterValueReason
anchorsbody_height + body_massPRIMARY_BOTH tier — FLESH dims ~78, BONE dims ~85
bundleHAND_ARMReturns all 32 hand and arm dimensions
body_build_typeCIVILIANGeneral consumer population
confidence_score_threshold70Captures all wrist and hand FLESH dims (~78) while filtering uncertain outputs
target_regionCustomer’s regionRegional calibration has measurable effect on wrist and hand norms

Single-anchor note: If only height is available, use anchors: {"body_height": <value>}. The engine imputes body_mass (PRIMARY_ONE tier). wrist_circumference confidence 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 KeyLabelTypeUse
wrist_circumferenceWrist CircumferenceFLESHSmartwatch / fitness tracker band sizing
wrist_breadthWrist BreadthBONEWatch lug-to-lug fit; band clasp width
forearm_circumferenceForearm CircumferenceFLESHForearm band and sleeve sizing

Hand & fingers:

API KeyLabelTypeUse
hand_circumferenceHand CircumferenceFLESHSmart ring broad sizing proxy
hand_breadthHand BreadthBONEGlove width; haptic device sizing
hand_lengthHand LengthBONEGlove total length
hand_digit_4_width_pipRing Finger Width (PIP)BONESmart ring precise sizing — PIP is the joint the ring must pass over
hand_digit_4_lengthRing Finger LengthBONERing band width / coverage zone

Ankle:

API KeyLabelTypeUse
ankle_circumferenceAnkle CircumferenceFLESHAnkle tracker and GPS tag sizing

ankle_circumference is in the LEGS_FEET bundle. To retrieve it alongside hand and wrist dimensions in one call, add "ankle_circumference" to specific_dimensions while keeping bundle: "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 sizinghand_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_circumference for initial size routing. Use hand_digit_4_width_pip for 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_circumference drops 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 — using GLOBAL as default will produce systematically wrong size recommendations for Asian customers.
  • For ankle tracking devices, add "ankle_circumference" to specific_dimensions rather than switching to FULL_BODY.