One of the first decisions when integrating DimensionsPot is which bundle to request. The API returns dimensions grouped into five anatomical bundles: FULL_BODY, TORSO, HEAD_FACE, HAND_ARM, and LEGS_FEET. Requesting the wrong one means either missing dimensions you need, or fetching data you’ll never use — both cost you.
This guide gives you a clear decision framework, a use case matrix, and the code to switch bundles correctly.
Why bundles matter
Each bundle returns a specific subset of the 130 available dimensions. FULL_BODY returns all of them. The others return only the dimensions relevant to that anatomical region. Since you’re charged per API call (not per dimension returned), the cost per call is the same regardless of bundle. The difference is response payload size and what you can do with the result.
Requesting TORSO when you only need chest and waist keeps your response compact and your parsing logic simple. Requesting FULL_BODY for a helmet sizing widget gives you 130 dimensions when you need three — manageable, but wasteful in code and harder to debug.
Bundle breakdown
TORSO
Key dimensions: chest_circumference, waist_circumference, hip_circumference, shoulder_width, back_length, bust_circumference (female), underbust_circumference (female), neck_circumference, torso_depth.
Use when: t-shirts, shirts, jackets, coats, dresses (upper-body fit), swimwear tops, bras, waistbands. Any product where the torso is the primary fit surface.
LEGS_FEET
Key dimensions: inseam_length, thigh_circumference, knee_circumference, calf_circumference, ankle_circumference, hip_circumference, outside_leg_length, foot_length, foot_breadth.
Use when: trousers, jeans, shorts, skirts, socks, shoes, boots. Note that hip_circumference appears here too — for trouser waistband sizing, LEGS_FEET has everything you need.
HEAD_FACE
Key dimensions: head_circumference, head_length, head_breadth, face_length, face_breadth, neck_circumference, interpupillary_distance.
Use when: helmets (cycling, motorcycle, ski, construction), hats, caps, VR headsets, glasses frames, hearing protection, headbands.
HAND_ARM
Key dimensions: hand_length, hand_breadth, wrist_circumference, forearm_length, forearm_circumference, upper_arm_length, upper_arm_circumference, arm_length.
Use when: gloves, mittens, compression sleeves, wristbands, watches (strap sizing), prosthetics, exoskeletons, athletic arm guards.
FULL_BODY
All 130 dimensions across all anatomical regions.
Use when: complete digital human avatars, ergonomic workplace design (reach envelopes, eye height, seat height), full-body garment fitting rooms, research applications, prototyping when you’re not yet sure which dimensions you’ll need.
Decision matrix
| Product type | Bundle | Primary fit dimensions |
|---|---|---|
| T-shirts, shirts, jackets | TORSO | chest, shoulder width, back length |
| Trousers, jeans, shorts | LEGS_FEET | inseam, waist, thigh |
| Full dresses, jumpsuits | TORSO + LEGS_FEET | chest, waist, hip, inseam |
| Shoes, boots | LEGS_FEET | foot length, foot breadth |
| Helmets, hats | HEAD_FACE | head circumference |
| VR headsets, glasses | HEAD_FACE | head breadth, interpupillary distance |
| Gloves | HAND_ARM | hand length, hand breadth |
| Watches, wristbands | HAND_ARM | wrist circumference |
| Game avatars | FULL_BODY | all proportions |
| Ergonomic design | FULL_BODY | reach distances, eye height, shoulder height |
| Swimwear (full body) | FULL_BODY | chest, waist, hip, inseam, torso depth |
Requesting a specific bundle
The bundle is set in output_settings.requested_dimensions:
const RAPIDAPI_KEY = process.env.RAPIDAPI_KEY;
const API_URL = 'https://dimensionspot-bodysize-engine.p.rapidapi.com/v1/predict';
async function getDimensions({ gender, heightCm, weightKg, bundle = 'TORSO' }) {
const response = await fetch(API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-rapidapi-key': RAPIDAPI_KEY,
'x-rapidapi-host': 'dimensionspot-bodysize-engine.p.rapidapi.com',
},
body: JSON.stringify({
input_data: {
input_unit_system: 'metric',
subject: {
gender: gender.toLowerCase(),
input_origin_region: 'GLOBAL',
},
anchors: {
body_height: Math.round(heightCm * 10), // cm → mm
body_mass: weightKg,
},
},
output_settings: {
calculation: {
calculation_model: 'AUTO',
target_region: 'GLOBAL',
body_build_type: 'CIVILIAN',
},
requested_dimensions: {
bundle: bundle, // 'FULL_BODY' | 'TORSO' | 'HEAD_FACE' | 'HAND_ARM' | 'LEGS_FEET'
},
output_format: {
unit_system: 'metric',
confidence_score_threshold: 0,
include_range_95: true,
include_iso_codes: false,
},
},
}),
});
if (!response.ok) throw new Error(`API error: ${response.status}`);
const data = await response.json();
// body_dimensions is already a keyed object — return it directly
return data.body_dimensions;
}
Usage:
// Jacket sizing — only TORSO needed
const dims = await getDimensions({ gender: 'male', heightCm: 180, weightKg: 78, bundle: 'TORSO' });
const chest = dims.chest_circumference?.value;
const shoulder = dims.biacromial_breadth?.value;
// Helmet sizing — only HEAD_FACE needed
const headDims = await getDimensions({ gender: 'female', heightCm: 165, weightKg: 60, bundle: 'HEAD_FACE' });
const headCirc = headDims.head_circumference?.value;
When you need two bundles
If your product requires dimensions from two different bundles — a full outfit sizing widget (TORSO + LEGS_FEET), for example — you have two options:
Option A: Two sequential calls. Simple to implement. Useful when you only need the second bundle’s dimensions conditionally.
const torsoDims = await getDimensions({ gender, heightCm, weightKg, bundle: 'TORSO' });
const legsDims = await getDimensions({ gender, heightCm, weightKg, bundle: 'LEGS_FEET' });
const allDims = { ...torsoDims, ...legsDims };
Option B: FULL_BODY. One call, full coverage. The right choice when you need three or more bundles’ worth of dimensions, or when you genuinely don’t yet know which dimensions your size chart logic will reference.
The break-even is roughly at three bundles. Below three, separate calls are cheaper on code complexity. At or above three, FULL_BODY is simpler.
Common mistakes
Defaulting to FULL_BODY everywhere. It works, but you’ll spend time filtering 130 dimensions down to the 4 you use. TORSO for a t-shirt widget means your response handling is 10 lines, not 50.
Using TORSO for trouser waistband. TORSO does include waist_circumference, so it’ll work — but if you also need inseam_length or thigh_circumference, you’ll need a second call. Use LEGS_FEET and get everything in one.
Forgetting the unit conversion. body_height is in millimetres, not centimetres. 175 cm = 1750 in the request. The response dimensions are also in millimetres by default. Easy to miss when both look like plausible numbers.
The Data Dictionary lists every dimension_id returned by each bundle. Use it when building size chart comparison logic to ensure you’re referencing the exact dimension name the API returns.