Calculate body mass index
Someone weighing 70 kg at 175 cm has a BMI of 22.86, in the normal range. Enter kilograms and centimeters, or pounds and inches, and get the value rounded to two decimals with its adult category. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Weight
- 70 metric
- Height
- 175
- Bmi
- 22.86 metric
- Category
- normal
This body mass index calculator turns a weight and height into a BMI value and a standard adult category. Choose metric when weight is in kilograms and height is in centimeters, or imperial when weight is in pounds and height is in inches. The result is calculated deterministically, rounded to two decimal places, and labeled underweight, normal, overweight, or obese. It is useful for consistent screening calculations, but BMI is a general indicator rather than an individual medical diagnosis.
Choose one unit system and enter both measurements
Start by selecting the unit system that matches both numbers. In metric mode, provide weight in kilograms and height in centimeters. A person weighing 70 kilograms and standing 175 centimeters tall should therefore be entered as weight 70 and height 175.
In imperial mode, provide weight in pounds and height in inches, such as weight 180 and height 70. Do not mix kilograms with inches or pounds with centimeters, because a mathematically valid result would still describe the wrong measurements. Metric is the default when the unit field is omitted.
Weight and height must each be finite numbers greater than zero. Zero, negative values, missing values, numeric strings, and non-finite values are rejected with an invalid input error instead of producing a misleading result. Keeping the input contract strict makes the calculator predictable in forms, spreadsheets, scripts, and automated data pipelines.
Understand the formula, rounding, and category
For metric measurements, the calculator converts centimeters to meters and divides weight in kilograms by squared height in meters. For imperial measurements, it divides weight in pounds by squared height in inches and multiplies the result by 703. The raw value is rounded to two decimal places for a compact, stable response.
The displayed BMI is then assigned one of four standard adult categories: a value below 18.5 is underweight; 18.5 through values below 25 is normal; 25 through values below 30 is overweight; and 30 or above is obese. Boundary handling matters when you compare results across systems, so the response always includes the rounded BMI, its category, and the unit system used. The algorithm performs only deterministic arithmetic: it uses no network, random source, current date, locale, or external database.
Use BMI as a screening indicator, not a diagnosis
BMI offers a convenient ratio for broad adult screening, reporting, and population-level comparisons, but it does not directly measure body fat or health. Two people with the same BMI can have different muscle mass, bone structure, fat distribution, fitness, age-related considerations, and health risks. Athletes with substantial muscle may receive an overweight or obese category despite low body fat, while someone in the normal category may still have risk factors that BMI cannot detect.
Standard adult thresholds are also not the appropriate interpretation framework for children, pregnancy, or every clinical situation. Treat the returned category as descriptive context for the calculated ratio, not as a diagnosis, treatment recommendation, or judgment about an individual. If a result will influence healthcare decisions, discuss it with a qualified professional who can consider medical history and other measurements.
In software, preserve the original weight, height, and unit beside the response when auditability matters. That practice lets reviewers confirm the inputs, identify unit mistakes, and recalculate later if an organization adopts a different screening policy.
What you can do with it
Add BMI to an intake form
Calculate a consistent BMI and category after an adult supplies weight, height, and the matching unit system.
Standardize fitness records
Generate the same two-decimal BMI output for records collected in either metric or imperial measurements.
Check a spreadsheet calculation
Compare an existing formula with a deterministic response that clearly reports the category and units used.
FAQ
What measurements does metric mode expect?
Metric mode expects weight in kilograms and height in centimeters. It is the default unit system.
What measurements does imperial mode expect?
Imperial mode expects weight in pounds and height in inches and applies the standard factor of 703.
Which BMI categories are returned?
The category is underweight below 18.5, normal below 25, overweight below 30, and obese at 30 or above.
How is BMI calculated in pounds and inches?
Divide the weight in pounds by the height in inches squared, then multiply by 703. In metric, divide kilograms by the height in meters squared. Both give the same scale and categories.
Is BMI a medical diagnosis?
No. BMI is a general screening indicator for adults, useful for consistent comparisons, but it is not an individual medical diagnosis and does not describe a person's health on its own.
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/calc2/bmi-calculate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"weight":70,"height":175}'const res = await fetch("https://api.kit.forhosting.com/calc2/bmi-calculate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"weight": 70,
"height": 175
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/calc2/bmi-calculate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"weight": 70,
"height": 175
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/calc2/bmi-calculate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"weight":70,"height":175}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"weight":70,"height":175}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/calc2/bmi-calculate", 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": 70,
"height": 175
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "calc2.bmi_calculate",
"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
Choose one unit system and enter both measurements
Before sending a large batch, normalize every record into a single unit system or explicitly set the unit on each request so that the meaning of each value remains clear.
Understand the formula, rounding, and category
Identical JSON input therefore returns identical JSON output.
Technical questions
What happens when weight or height is zero or negative?
The request fails with an invalid_input error because both measurements must be positive finite numbers.
How much does an API calculation cost?
Each API request costs $0.002. The browser version can be used without an API charge.