apihow-todeveloper-guidebundles

How to Choose the Right Body Bundle for Your Use Case

· 4 min read · Martin Hejda

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 typeBundlePrimary fit dimensions
T-shirts, shirts, jacketsTORSOchest, shoulder width, back length
Trousers, jeans, shortsLEGS_FEETinseam, waist, thigh
Full dresses, jumpsuitsTORSO + LEGS_FEETchest, waist, hip, inseam
Shoes, bootsLEGS_FEETfoot length, foot breadth
Helmets, hatsHEAD_FACEhead circumference
VR headsets, glassesHEAD_FACEhead breadth, interpupillary distance
GlovesHAND_ARMhand length, hand breadth
Watches, wristbandsHAND_ARMwrist circumference
Game avatarsFULL_BODYall proportions
Ergonomic designFULL_BODYreach distances, eye height, shoulder height
Swimwear (full body)FULL_BODYchest, 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.

Try DimensionsPot

Free tier — 100 requests/month, no credit card required.

Get API on RapidAPI