Blood pressure category calculator
Put an adult blood pressure reading into its ACC/AHA 2017 category: 118/76 mmHg is normal, while 125/82 is already stage 1 because the diastolic number reached 80. Whichever number is more severe decides the label. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Systolic
- 118
- Diastolic
- 76
- Reading
- 118/76 mmHg
- Category
- normal
- Category label
- Normal
- Guideline
- ACC/AHA 2017
Adult blood pressure is reported as two numbers in millimetres of mercury: systolic pressure when the heart contracts and diastolic pressure when it relaxes. The American College of Cardiology and American Heart Association publish a widely taught adult threshold table that maps those two numbers into five ordered categories—normal, elevated, hypertension stage one, hypertension stage two, and hypertensive crisis—so patients, students, and product teams can label a reading the same way every time.
The five categories and where each one starts
The 2017 ACC/AHA adult table sorts every reading into five ordered groups. Normal means a systolic number below 120 and a diastolic below 80. Elevated means systolic from 120 to 129 while diastolic stays below 80. Stage 1 hypertension starts when systolic is 130 to 139 or diastolic is 80 to 89. Stage 2 applies from 140 systolic or 90 diastolic. A hypertensive crisis is flagged when systolic goes above 180 or diastolic above 120, and that label takes priority over stage 2.
When the two numbers disagree
Systolic and diastolic often point to different groups, and the more severe one always wins. A reading of 125/82 is stage 1, not elevated, because the diastolic number crossed 80. A high systolic with a low diastolic still climbs the table by the systolic rule. A reading where diastolic is higher than systolic is rejected as impossible, as are values outside 40 to 300 systolic or 20 to 200 diastolic. The category is a consistent label for a reading, not a diagnosis on its own.
What ACC/AHA categories mean and which inputs you need
Blood pressure category is not a diagnosis by itself; it is a consistent label for a pair of millimetre-of-mercury readings under a published adult guideline. Under ACC/AHA two thousand seventeen, normal means systolic below one hundred twenty and diastolic below eighty. Elevated means systolic one hundred twenty through one hundred twenty-nine with diastolic still below eighty.
Hypertension stage one applies when systolic is one hundred thirty through one hundred thirty-nine or diastolic is eighty through eighty-nine. Hypertension stage two applies when systolic is at least one hundred forty or diastolic is at least ninety. Hypertensive crisis is flagged when systolic exceeds one hundred eighty or diastolic exceeds one hundred twenty, and that band takes priority over stage two when those extreme thresholds are crossed.
Practical bounds keep classroom and consumer inputs sane: systolic forty to three hundred, diastolic twenty to two hundred.
What you can do with it
Patient education and wellness apps
Apps show users whether a home cuff reading is normal, elevated, or a hypertension stage under ACC/AHA labels without re-coding threshold tables on each client.
FAQ
What blood pressure categories does this calculator use?
ACC/AHA 2017 adult categories: normal (SBP < 120 and DBP < 80), elevated (SBP 120–129 and DBP < 80), hypertension stage 1 (SBP 130–139 or DBP 80–89), hypertension stage 2 (SBP ≥ 140 or DBP ≥ 90), and hypertensive crisis (SBP > 180 and/or DBP > 120).
What happens if diastolic exceeds systolic?
Diastolic must not be greater than systolic; when it is, the calculator rejects the pair without charging and the error message mentions that diastolic exceeds systolic.
What if systolic and diastolic fall into different stages?
The higher (more severe) category is returned. For example, 125/82 is hypertension stage 1 because diastolic is 80–89, not elevated.
Is the blood pressure category calculator free?
The browser tool runs free on your device.
Is this a medical diagnosis?
No. It is an educational classification of a reading pair under ACC/AHA thresholds. It does not replace clinical assessment, ambulatory monitoring, or professional medical advice.
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/blood-pressure-category \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"systolic":118,"diastolic":76}'const res = await fetch("https://api.kit.forhosting.com/health/blood-pressure-category", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"systolic": 118,
"diastolic": 76
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/blood-pressure-category",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"systolic": 118,
"diastolic": 76
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/blood-pressure-category", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"systolic":118,"diastolic":76}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"systolic":118,"diastolic":76}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/blood-pressure-category", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"systolic": 118,
"diastolic": 76
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.blood_pressure_category",
"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
This capability applies that ACC/AHA table deterministically: it validates the pair, rejects impossible orderings where diastolic exceeds systolic, picks the more severe band when the two numbers disagree, and returns structured JSON with a machine-readable category key, a human label, the echoed reading string, and the guideline name. The path is pure comparison logic with no network, no model, and no wall clock, so homework checkers, coaching apps, and prepaid API clients pin identical outputs in tests.
What ACC/AHA categories mean and which inputs you need
Send required fields systolic and diastolic as finite numbers; aliases sbp, sys, systolic_bp, and systolic_mmhg work for the top number, while dbp, dia, diastolic_bp, and diastolic_mmhg work for the bottom number. Identical inputs always yield identical JSON because the algorithm never touches the network, a model, a clock, or a random generator. Missing fields, non-finite values, out-of-range readings, and any case where diastolic exceeds systolic all fail with invalid_input and are not charged.
Reading the response fields and how conflicting bands resolve
When systolic and diastolic fall into different bands, the higher severity wins: for example systolic one hundred twenty-five with diastolic eighty-two is stage one because diastolic crossed eighty, not elevated. Isolated high systolic with low diastolic still climbs the table by the systolic rule, matching how clinicians teach the more severe component. On success the response echoes systolic and diastolic, sets unit to mmHg, and builds reading as a compact SBP slash DBP string for display. The category field is a stable machine key among normal, elevated, hypertension_stage_1, hypertension_stage_2, and hypertensive_crisis, while category_label is the matching human phrase for UI chips and reports. Guideline is always ACC/AHA two thousand seventeen and method is always acc_aha_bp_category so downstream code can branch without sniffing shapes. Use category for filters and analytics, category_label for user-facing copy, and reading when you only need a single display line. Diastolic greater than systolic is rejected with a clear invalid_input message that mentions diastolic exceeds systolic, because that ordering is not a valid clinic pair for this product. Do not confuse this endpoint with mean arterial pressure calculators, pulse-pressure tools, pediatric percentile charts, or ESC/ESH European tables—those are different intents and different thresholds.
API usage, pricing, product workflows, and practical limits
Call the free in-browser blood pressure category calculator for classroom demos, patient education pages, and quick personal checks without reimplementing the ACC/AHA table in every spreadsheet. Prefer consistent units; if your UI only collects whole millimetres of mercury, send integers and the engine still accepts numeric strings. Keep expectations educational: this is a classification and learning tool, not a diagnostic medical device, and people with symptoms, known cardiovascular disease, pregnancy, or medication changes should follow professional medical advice rather than any single automated label alone. Send a JSON body with required systolic and diastolic blood-pressure values in millimetres of mercury. Use the prepaid API when a health SaaS, telehealth intake form, wellness app, electronic worksheet, or school LMS 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 measurement workflow—seated rest, correct cuff size, and multiple readings—then store category alongside the raw numbers for dashboards and export CSV columns for systolic, diastolic, category, and guideline. Authors shipping SDKs can map category and category_label into chips, colour bands, and alert thresholds—the same ordered labels students and coaches learn from ACC/AHA teaching materials.
Integration use cases
Nursing and health-science homework
Students submit systolic and diastolic pairs and pin expected category JSON in automated checkers with deterministic ACC/AHA outputs.
Intake forms and coaching SaaS backends
Server pipelines that already store BP readings call a prepaid endpoint for category keys instead of duplicating stage logic in every language.