Workwear & PPE

Workwear at Scale

Workforce sizing from HR data — batch processing pattern, inventory planning aggregation, and garment category dimension mapping.

Business Context

The Problem: A uniform rollout isn’t a design problem — it’s a data collection problem with a predictable failure pattern. Sizing forms go out, half don’t come back, the ones that do contain guesses, and procurement places an order based on a mix of assumptions and buffer stock. Two months later you’re re-ordering Mediums while a pallet of XLs sits in the warehouse. Physical sizing sessions work better and cost you weeks per site.

The Solution: Your HRIS already stores height and weight (safety records, medical surveillance, site access). DimensionsPot converts those two fields into a complete, 130-point anthropometric profile in under 10ms. You get the exact chest, waist, inseam, and foot length measurements required to define your order specifications before the first employee walks through the door. A workforce of 1,000 runs in under 10 seconds at moderate concurrency.

The Procurement Edge: Turn HR data into a precise demand forecast. By processing your workforce list through the API, logistics knows exactly how many units of each size to stock. You secure bulk discounts with confidence, accelerate the purchasing cycle, and eliminate the emergency re-order cycle that eats your margin every rollout.


ParameterValueReason
anchorsbody_height + body_massStandard HR data fields; PRIMARY_BOTH tier
body_build_typeATHLETICPhysical and manual labour workforces trend toward higher lean mass than the general NHANES civilian population
bundleFULL_BODYWorkwear sizing draws from torso, arms, legs, hands, and feet simultaneously
confidence_score_threshold75Retains all workwear-relevant FLESH dimensions (PRIMARY_BOTH FLESH ~78)
target_regionWorkforce deployment regionAccounts for regional body proportion differences — critical for multinational workforces

For predominantly desk-based or office workforces, use body_build_type: "CIVILIAN" instead. ATHLETIC applies the NHANES lean-mass adjustment; CIVILIAN uses the general population baseline.

Garment category → dimension mapping:

GarmentKey DimensionsBundle
Work jacket / shirtchest_circumference, shoulder_breadth, arm_length_total, neck_circumferenceTORSO + HAND_ARM
Coverall / work suitchest_circumference, waist_circumference_natural, hip_circumference, inseam_length, back_waist_length, arm_length_totalFULL_BODY
Work trouserswaist_circumference_natural, hip_circumference, inseam_length, thigh_circumferenceTORSO + LEGS_FEET
Work gloveshand_length, hand_breadth, hand_circumferenceHAND_ARM
Work boots / shoesfoot_length, foot_breadth, ankle_circumferenceLEGS_FEET
Cap / headwearhead_circumference, head_breadthHEAD_FACE
High-visibility vest / jacketchest_circumference, shoulder_breadth, back_waist_lengthTORSO

Sample Request

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": "male",
        "exact_age": 41.0,
        "age_category": "ADULT",
        "input_origin_region": "EUROPE"
      },
      "anchors": {
        "body_height": 1790.0,
        "body_mass": 95.0
      }
    },
    "output_settings": {
      "calculation": {
        "calculation_model": "AUTO",
        "target_region": "EUROPE",
        "body_build_type": "ATHLETIC"
      },
      "requested_dimensions": {
        "bundle": "FULL_BODY",
        "specific_dimensions": null
      },
      "output_format": {
        "unit_system": "metric",
        "confidence_score_threshold": 75,
        "include_range_95": true,
        "include_iso_codes": false
      }
    }
  }'

Batch Processing Pattern

Size an entire workforce from an HR export in a single script:

import requests

API_URL = "https://dimensionspot-bodysize-engine.p.rapidapi.com/v1/predict"
HEADERS = {
    "Content-Type": "application/json",
    "X-RapidAPI-Key": "YOUR_KEY",
    "X-RapidAPI-Host": "dimensionspot-bodysize-engine.p.rapidapi.com"
}

def size_employee(employee_id, gender, age, height_mm, weight_kg, region="GLOBAL"):
    payload = {
        "input_data": {
            "input_unit_system": "metric",
            "subject": {
                "gender": gender,
                "exact_age": float(age),
                "age_category": "ADULT",
                "input_origin_region": region
            },
            "anchors": {
                "body_height": float(height_mm),
                "body_mass": float(weight_kg)
            }
        },
        "output_settings": {
            "calculation": {
                "calculation_model": "AUTO",
                "target_region": region,
                "body_build_type": "ATHLETIC"
            },
            "requested_dimensions": {"bundle": "FULL_BODY"},
            "output_format": {
                "unit_system": "metric",
                "confidence_score_threshold": 75,
                "include_range_95": True,
                "include_iso_codes": False
            }
        }
    }
    response = requests.post(API_URL, headers=HEADERS, json=payload, timeout=10)
    response.raise_for_status()
    return employee_id, response.json()

# Example: size a list of employees from HR export
employees = [
    {"id": "EMP001", "gender": "male",   "age": 34, "height_mm": 1780, "weight_kg": 88,  "region": "EUROPE"},
    {"id": "EMP002", "gender": "female", "age": 29, "height_mm": 1650, "weight_kg": 62,  "region": "ASIA_PACIFIC"},
    {"id": "EMP003", "gender": "male",   "age": 47, "height_mm": 1720, "weight_kg": 105, "region": "LATAM"},
]

results = {}
for emp in employees:
    emp_id, profile = size_employee(
        emp["id"], emp["gender"], emp["age"],
        emp["height_mm"], emp["weight_kg"], emp["region"]
    )
    results[emp_id] = profile
    print(f"{emp_id}: {len(profile['body_dimensions'])} dimensions computed")

Inventory Planning Pattern

Aggregate predicted size distributions across a planned workforce to model stock requirements before procurement:

from collections import Counter

COVERALL_SIZES = [
    (0,    880, "XS"),  (880,  960, "S"),  (960,  1040, "M"),
    (1040, 1120, "L"), (1120, 1200, "XL"), (1200, 9999, "XXL"),
]

def lookup_coverall_size(chest_mm):
    for lo, hi, label in COVERALL_SIZES:
        if lo <= chest_mm < hi:
            return label
    return "Unknown"

coverall_counter = Counter()
for emp_id, profile in results.items():
    dims = profile["body_dimensions"]
    if "chest_circumference" in dims:
        chest = dims["chest_circumference"]["value"]
        coverall_counter[lookup_coverall_size(chest)] += 1

print("Coverall size distribution:")
for size_label, count in sorted(coverall_counter.items()):
    print(f"  {size_label}: {count}")

# Extend the same pattern for any garment type:
# trousers → waist_circumference_natural + inseam_length (dual lookup)
# gloves   → hand_circumference
# boots    → foot_length
# headwear → head_circumference

Response Handling Tips

  • Flag any employee with a dimension marked biological_limit_status: "OUT_OF_BOUNDS" for manual measurement — do not use out-of-bounds values for automated garment assignment.
  • For multinational workforces, always set input_origin_region per employee. Regional body proportion differences are significant for shoulder-to-hip ratios, torso length, and arm length.
  • Store input_origin_region and target_region alongside each employee’s dimensional profile. A chest_circumference calibrated for EUROPE is a different number than the same employee’s chest_circumference calibrated for ASIA_PACIFIC.
  • The AFRICA region uses male-centric calibration data with a −10% confidence penalty on FLESH dimensions for female employees. Treat FLESH dimension outputs as indicative for this subgroup.
  • P99 latency is 6–8 ms per call. A workforce of 1,000 employees can be fully profiled in under 10 seconds at moderate API concurrency. Process requests concurrently rather than sequentially.