Pediatric BMI z-score calculator
Place a child's BMI on the growth-chart scale: a BMI of 17.2 with reference values L -2, M 16.5 and S 0.08 for that age and sex gives a z-score of almost one half, just above the median. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Value
- 17.2
- L
- -2
- M
- 16.5
- S
- 0.08
- Z score
- 0.4983690508
Pediatric body mass index cannot be judged with adult cut-offs of twenty-five and thirty. Growth charts describe how a child's BMI sits relative to peers of the same sex and age, and the standard continuous metric is the LMS z-score used by WHO and CDC references. This pediatric BMI z-score calculator accepts a measured value X (usually BMI in kilograms per square meter) together with the Box–Cox power L, the median M, and the coefficient of variation S for that sex and age, then returns a deterministic z-score from the Cole LMS transform. When L is zero the log form is used; otherwise the power form applies.
What the LMS pediatric BMI z-score measures
Growth references do not store a simple mean and standard deviation for BMI because the distribution is skewed and changes with age. The LMS method of Cole and colleagues models the age-and-sex-specific distribution with three curves: L, the Box–Cox power that removes skewness; M, the median of the measurement; and S, the coefficient of variation. Given a measured value X for a child, the standardized residual on that transformed scale is the z-score.
When L is not zero the formula is z equals open parenthesis open parenthesis X over M close parenthesis to the power L minus one close parenthesis divided by open parenthesis L times S close parenthesis. When L is exactly zero the transform reduces to the natural logarithm: z equals the natural log of X over M, all divided by S. A z-score of zero means the measurement equals the reference median; positive values lie above the median and negative values below it.
Unlike a hard percentile band alone, the continuous z-score supports longitudinal tracking, research models, and fine-grained screening cut-offs such as minus two or plus two standard deviations. This capability does not embed a particular national table: you look up L, M, and S for the child's sex and age from WHO, CDC, or a local LMS publication and pass those four numbers in. That design keeps the engine tiny, transparent, and usable with any published LMS row while still matching the clinical definition of a pediatric BMI z-score.
What you can do with it
EHR and growth dashboards
Resolve L, M, S from a local reference cache and compute BMI z-scores for child growth views without embedding full chart tables in the browser.
Teaching the Cole LMS transform
Let students supply L, M, S and a measured BMI to verify hand calculations of the power and log branches of the pediatric z-score formula.
FAQ
How do I compute a pediatric BMI z-score with LMS parameters?
Send positive value (measured BMI), finite l (Box–Cox L), positive m (median M), and positive s (coefficient of variation S).
Where do L, M, and S come from?
From a published growth reference for the child's sex and age (for example WHO or CDC BMI-for-age LMS tables). This tool does not embed those tables; you look up the row and pass L, M, S.
What happens if value, m, or s is zero or negative?
LMS z-scores require a positive measured value, a positive median M, and a positive S; non-positive inputs are rejected and not billed.
Is this the same as a standard (x − μ) / σ z-score?
No. Pediatric BMI uses the Cole LMS transform to handle skewness. Use this capability for LMS growth references; use a generic z-score tool when you truly have mean and standard deviation.
What does a positive or negative BMI z-score mean for a child?
Zero means the BMI equals the reference median for that age and sex. Positive values lie above it and negative values below it, and screening often uses cut-offs such as minus two or plus two.
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/bmi-z-pediatric \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"value":17.2,"l":-2,"m":16.5,"s":0.08}'const res = await fetch("https://api.kit.forhosting.com/health/bmi-z-pediatric", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"value": 17.2,
"l": -2,
"m": 16.5,
"s": 0.08
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/bmi-z-pediatric",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"value": 17.2,
"l": -2,
"m": 16.5,
"s": 0.08
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/bmi-z-pediatric", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"value":17.2,"l":-2,"m":16.5,"s":0.08}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"value":17.2,"l":-2,"m":16.5,"s":0.08}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/bmi-z-pediatric", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"value": 17.2,
"l": -2,
"m": 16.5,
"s": 0.08
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.bmi_z_pediatric",
"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
Missing or non-numeric inputs fail with invalid_input and are not billed.
Input contract, response shape, and validation rules
Example: value seventeen point two, L equal to negative two, M equal to sixteen point five, S equal to zero point zero eight yields a modest positive z-score because the measured BMI sits slightly above the median under a left-skew power transform. When L is zero the response formula field explicitly states the log form so auditors can reproduce the arithmetic by hand. Optional fields are omitted rather than null. POST a JSON body with four required finite numbers: value (aliases bmi, x, measured, measurement), the positive measured anthropometric quantity, typically BMI in kg per square meter; l (aliases L, lambda, box_cox), the Box–Cox power which may be zero or negative; m (aliases M, median, mu), the positive reference median in the same units as value; and s (aliases S, cv, coefficient_of_variation, sigma_lms), the positive coefficient of variation. Each field may arrive as a JSON number or as a numeric string. Missing fields, empty strings, non-finite values, and non-positive value, m, or s fail with invalid_input naming the problem; those failures do not consume prepaid balance. On success the body echoes cleaned value, l, m, and s, reports z_score rounded to twelve significant decimal places for stable goldens across runtimes, includes a formula string that states which LMS branch was used, and sets method to lms_z_score. The endpoint does not compute BMI from weight and height, does not interpolate age months against an embedded chart, and does not return clinical labels; pair it with your own LMS table lookup and any band rules your protocol requires.
Where a pediatric LMS z-score API earns its keep
Research pipelines that already store or download WHO and CDC LMS tables need a tiny, dependency-free function that turns four numbers into a z-score without pulling a full biostatistics stack. Teaching and exam tools use the same contract to check student work on the Cole transform without hiding the parameters inside a black-box chart. Failed validation does not consume balance. Electronic health record plugins can resolve L, M, and S from a local reference cache and call this endpoint to standardize BMI for growth dashboards that prefer z-scores over raw percentiles. Keep requests small, pin the rounded z_score in tests, and you get reproducible LMS standardization for notebooks, workers, and classroom demos without standing up a growth-chart database of your own.
Integration use cases
Research and survey pipelines
Standardize measured pediatric BMI against WHO or CDC LMS rows in batch jobs, pinning z_score for reproducible longitudinal and multi-site analyses.
Technical questions
What does the pediatric BMI z-score calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.