Child and teen BMI calculator
An 8-year-old boy weighing 32 kg at 132 cm lands in the overweight band, between the 85th and 95th percentile for his age. Enter weight, height, age and sex to place a child's BMI on the CDC growth charts. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Weight
- 32
- Height
- 132
- Age in completed years
- 8
- Sex
- Male
- Weight (kg)
- 32
- Height (cm)
- 132
- Height m
- 1.32
- Age (years)
- 8
Body mass index for children and teenagers cannot be read with adult cutoffs alone. The same BMI number means different things at age six and age sixteen, and charts differ by sex. This capability takes weight in kilograms, height in centimeters, age in years, and sex, computes BMI as weight over height in meters squared, then places that BMI on the CDC 2000 BMI-for-age growth charts using the LMS method. You receive the z-score, an approximate percentile, and a clear weight-status band: underweight, healthy weight, overweight, or obesity. Ages outside two through twenty years are rejected with invalid input so the product never pretends adult or infant charts apply.
What child BMI measures and which inputs you need
Body mass index is a screening number, not a diagnosis. For adults, fixed thresholds such as twenty-five and thirty are common, but for children and teens those fixed lines misclassify growth stages. Pediatric practice therefore compares BMI to age-and-sex reference charts.
This calculator implements the CDC two thousand BMI-for-age approach for ages two through twenty inclusive. The engine divides weight by height in meters squared to obtain BMI, looks up or interpolates L, M, and S at the child’s age in months, converts BMI into a z-score with the standard LMS formula, and maps that z-score through a normal cumulative distribution to an approximate percentile. Missing fields, non-finite numbers, impossible heights or weights, and unrecognized sex values also fail validation.
Reading BMI, percentile, bands, and common pitfalls
The lms object exposes the interpolated L, M, S parameters and the age in months used, which is useful when auditors want to reproduce the z-score by hand. Use percentile and band when a parent-facing summary needs a category; use z-score when a research notebook or longitudinal tracker needs a continuous growth metric. Remember that BMI does not measure body fat directly, does not account for athletic muscle mass, and does not replace clinical judgment for short stature, delayed puberty, or medical conditions.
Extremely large or tiny weights and heights outside isolate safety bounds are rejected. Do not feed ages outside two to twenty expecting a soft clamp: the product errors clearly so callers fix the age or choose an adult BMI tool instead.
What you can do with it
School and sports physicals
Nurses and coaches enter measured weight, height, age, and sex to get BMI percentile and a clear underweight-to-obesity band for screening workflows.
FAQ
What happens if age is under 2 or over 20?
CDC BMI-for-age charts in this product cover ages 2 through 20 only; out-of-range ages are rejected and not charged.
How are underweight, healthy weight, overweight, and obesity decided?
Bands follow CDC percentile cutoffs: underweight below the 5th, healthy weight from the 5th to below the 85th, overweight from the 85th to below the 95th, and obesity at or above the 95th.
Is the child and teen BMI calculator free?
The browser tool runs free on your device.
Why not use adult BMI categories like 25 and 30?
The same BMI value has different meaning by age and sex during growth. This calculator uses CDC LMS z-scores and percentiles, which is the standard pediatric screening approach for ages 2–20.
Does a child's BMI measure body fat?
Not directly. BMI is a screening number: it does not account for athletic muscle mass and does not replace a clinician's judgment for short stature, delayed puberty or medical conditions.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/health/child-bmi \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"weight":32,"height":132,"age":8,"sex":"male"}'const res = await fetch("https://api.kit.forhosting.com/health/child-bmi", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"weight": 32,
"height": 132,
"age": 8,
"sex": "male"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/child-bmi",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"weight": 32,
"height": 132,
"age": 8,
"sex": "male"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/child-bmi", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"weight":32,"height":132,"age":8,"sex":"male"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"weight":32,"height":132,"age":8,"sex":"male"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/child-bmi", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"weight": 32,
"height": 132,
"age": 8,
"sex": "male"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.child_bmi",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The path is pure arithmetic and table lookup with no network and no random seed, so coaching apps, school health tools, and prepaid API clients get identical JSON every time.
What child BMI measures and which inputs you need
Send weight as a positive finite number in kilograms; aliases weight_kg, body_weight, and mass_kg are accepted. Send height as centimeters; aliases height_cm, stature_cm, and length_cm are accepted, or send height_m in meters if that is how your form stores stature. Send age in years as a finite number in the closed interval from two to twenty; aliases age_years, years, and age_y are accepted. Send sex as male or female so the correct LMS series is selected; short aliases such as m and f, boy and girl, and numeric codes one and two are accepted. If age is below two or above twenty the request fails with invalid_input and is not charged, because these charts do not cover infants under two or adults past twenty. Identical inputs always yield identical JSON because the algorithm never touches the network, a model, a clock, or a random generator.
Reading BMI, percentile, bands, and common pitfalls
On success the response echoes weight_kg, height_cm, height_m, age_years, and sex, then reports bmi in kilograms per meter squared, bmi_z_score, and bmi_percentile on a zero-to-one-hundred scale. The band field is one of underweight, healthy_weight, overweight, or obesity, following CDC percentile cutoffs: below the fifth percentile, from the fifth up to but not including the eighty-fifth, from the eighty-fifth up to but not including the ninety-fifth, and at or above the ninety-fifth. The band_label field restates that rule in plain language for UI copy. Method is always cdc_bmi_for_age_lms and reference names the CDC two thousand charts so downstream code can branch without sniffing shapes.
API usage, pricing, school and clinic workflows, and practical limits
Call the free in-browser child and teen BMI calculator for quick checks, classroom demos, and caregiver education without installing a growth-chart spreadsheet. Prefer metric inputs that match the published CDC LMS units; if your UI collects pounds and inches, convert before calling. Keep expectations clinical: this is an educational and screening estimate aligned with CDC chart math, not a certified medical device, and families should follow professional advice when a band or growth trajectory raises concern. For infants under two years or adults over twenty, use age-appropriate tools rather than forcing this child-and-teen contract. Send a JSON body with required weight, height, age, and sex (or their documented aliases). Use the prepaid API when a pediatric intake form, school nurse workstation, sports physical app, telehealth triage flow, or research pipeline needs a stable contract under KIT balance at $0.002 per successful item; validation failures never consume balance after the engine rejects the request. Pair this endpoint with your own consent and privacy layer before storing measurements about minors, and keep raw inputs under the same retention rules as other KIT parse items. Authors shipping SDKs can map band and bmi_percentile into dashboards, PDF visit summaries, and CSV exports labeled percentile and weight status—the same categories growth charts teach in pediatrics courses.
Integration use cases
Pediatric and telehealth intake
Clinics and virtual care apps call a stable prepaid endpoint for CDC-style child BMI instead of reimplementing LMS tables in every client language.
Education and research demos
Courses and labs teach BMI-for-age interpretation, compare z-scores across ages, and pin expected JSON in automated tests with deterministic outputs.
Technical questions
How do I calculate child or teen BMI with this tool?
Send JSON with weight in kg, height in cm, age in years (2–20), and sex (male or female). The response includes bmi, bmi_percentile, and band.