qSOFA calculator
24 breaths a minute, a systolic pressure of 95 mmHg and new confusion give a qSOFA of 3 out of 3. Each finding adds one point, and 2 or more is a prompt to look harder for sepsis. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Respiratory rate
- 24
- Systolic
- 95
- Rr points
- 1
- Sbp points
- 1
- Mentation points
- 1
- Score
- 3
The quick Sequential Organ Failure Assessment score, known as qSOFA, is a three-criterion bedside screen published with the Sepsis-3 definitions. It is used in teaching and research to identify people with suspected infection who may have a higher risk of prolonged intensive care or death. One point is awarded when the respiratory rate is twenty-two breaths per minute or greater, one point when systolic blood pressure is one hundred millimetres of mercury or less, and one point when mentation is altered relative to the person's baseline. The integer total therefore occupies the closed range from zero to three. A negative respiratory rate is rejected with invalid input rather than being folded into an absolute value.
How the qSOFA score is defined
qSOFA is the abbreviated Sequential Organ Failure Assessment used at the bedside when infection is suspected and a full laboratory SOFA panel is not yet available. The published rule is deliberately small: three binary findings, each worth one point, with no weighting, no age term, and no lactate. Respiratory rate of twenty-two breaths per minute or greater contributes one point because tachypnea is an early, cheaply observed marker of organ stress.
Systolic blood pressure of one hundred millimetres of mercury or less contributes one point because hypotension in that range is the circulatory criterion the Sepsis-3 authors selected for a quick screen. Altered mentation contributes one point when the person is not at their usual Glasgow Coma Scale of fifteen, or when new confusion, disorientation, or reduced alertness is present; this calculator does not ingest a Glasgow score and re-derive that flag, because the caller already decided whether mentation is altered.
Adding the three bits produces an integer from zero through three. A total of two or three is commonly taught as a prompt to look more closely for sepsis in someone with suspected infection, not as a diagnosis and not as a replacement for full SOFA, NEWS2, or a clinician. This capability implements those three inclusive thresholds exactly.
It does not convert breaths to another unit, does not estimate mean arterial pressure from systolic and diastolic pairs, and does not apply SIRS heart-rate or white-cell criteria. Inputs must be finite. A negative respiratory rate cannot represent breaths per minute and fails with invalid input rather than being silently inverted.
Always frame outputs as educational scores from the published qSOFA rule, not as a clinical diagnosis or a substitute for professional judgment, continuous monitoring, or local treatment protocols.
Where qSOFA calculators show up in real work
Sepsis education, nursing orientation, and physician-assistant courses constantly assign qSOFA drills from textbook vital-sign triples, so a single trusted oracle that returns the integer beside each component speeds grading and demo setup. Simulation centres and electronic worksheet products want a documented respiratory-rate, systolic, and mentation path that clients can audit by hand rather than a black-box risk model that mixes lactate, white cells, and urine output without disclosure.
Research assistants preparing synthetic triage datasets need stable qSOFA labels from known vitals without network calls or model drift, and they need a hard reject when a respiratory rate arrives negative so dirty extracts cannot masquerade as scores. If you later need full SOFA organ-subscores, NEWS2, SIRS, mean arterial pressure, or a Glasgow Coma Scale total, treat those as separate search intents and landings rather than overloading this qSOFA calculator page.
Always present results as educational estimates from the published three-point rule; clinical decisions require qualified professionals, a suspected-infection context this tool does not collect, and protocols that may escalate care when the score is two or three. Keep requests small, pin the integer score and the three component bits in tests, and you get reproducible qSOFA figures for homework, LMS plugins, and edge workers without standing up a clinical information system of your own.
What you can do with it
Classroom qSOFA answer keys
Generate the 0–3 score and component points from textbook respiratory rate, systolic pressure, and mentation flags so instructors and auto-graders share one transparent ground truth.
Sepsis-education bedside drills
Show the three Sepsis-3 qSOFA criteria in teaching labs without mixing full SOFA, NEWS2, or SIRS on the same landing.
FAQ
What is the qSOFA score?
qSOFA is the quick Sequential Organ Failure Assessment, a three-point bedside screen that awards one point each for respiratory rate of 22 or greater, systolic blood pressure of 100 mmHg or less, and altered mentation. The total runs from 0 to 3.
What formula do you use?
qSOFA = (respiratory rate ≥ 22) + (systolic ≤ 100 mmHg) + (altered mentation). Each true criterion is one point.
What happens if the respiratory rate is negative?
A negative breaths-per-minute value is rejected rather than being converted to an absolute value or a silent NaN.
What does it cost?
The browser tool is free and runs locally.
Does a breathing rate of exactly 22 count?
Yes. Both limits are inclusive: 22 breaths a minute earns the breathing point and a systolic pressure of exactly 100 mmHg earns the pressure point. Those two with normal mental status already make a score of 2.
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/q-sofa \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"respiratory_rate":24,"systolic":95,"altered_mentation":true}'const res = await fetch("https://api.kit.forhosting.com/health/q-sofa", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"respiratory_rate": 24,
"systolic": 95,
"altered_mentation": true
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/q-sofa",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"respiratory_rate": 24,
"systolic": 95,
"altered_mentation": true
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/q-sofa", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"respiratory_rate":24,"systolic":95,"altered_mentation":true}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"respiratory_rate":24,"systolic":95,"altered_mentation":true}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/q-sofa", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"respiratory_rate": 24,
"systolic": 95,
"altered_mentation": true
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.q_sofa",
"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 implements that published rule as a pure function: you send a finite respiratory rate, a finite systolic pressure, and a boolean for altered mentation, and you receive each component together with the summed score. Successful API calls use the published $0.002 per item; invalid input is not billed.
How the qSOFA score is defined
The computation is pure comparison and addition with no network calls, no random seeds, no wall-clock timestamps, and no model drift, so identical vital-sign triples always yield identical JSON.
What you send and what you get back
Send three required fields. Inclusive thresholds matter at the edges: a rate of twenty-two scores the respiratory point, and a systolic of one hundred scores the pressure point. A classic high-risk triple is twenty-four breaths per minute, ninety-five millimetres of mercury, and altered mentation, which yields three points. A boundary pair of twenty-two and one hundred with mentation intact yields two points. The field respiratory_rate is the breathing rate in breaths per minute and must be a finite number; a negative value fails with invalid_input naming that field. Aliases rr, resp_rate, respiratory, and breaths_per_min are accepted. The field systolic is systolic blood pressure in millimetres of mercury and must be a finite non-negative number; aliases sbp, sys, systolic_bp, and systolic_mmhg are accepted. The field altered_mentation is a boolean that is true when mentation is altered relative to baseline; aliases ams, altered_mental_status, mentation, and gcs_altered are accepted, and the strings yes, no, one, and zero parse as booleans. Missing required fields, empty strings, non-numeric text, NaN, and Infinity fail with invalid_input and are not charged. On success the response echoes the cleaned respiratory_rate, systolic, and altered_mentation, reports rr_points, sbp_points, and mentation_points as zero or one, reports score as their integer sum from zero to three, sets high_risk true when the score is two or three, and includes unit_respiratory_rate as breaths per minute, unit_systolic as mmHg, plus formula and method strings for display and for pinning in tests. Pricing for successful API calls is the published $0.002 per item; validation failures do not consume prepaid balance. If your upstream form collects a Glasgow Coma Scale rather than a boolean, convert GCS below fifteen to true before sending the flag here.
Where qSOFA calculators show up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Deterministic triage fixtures
Bulk-produce stable qSOFA labels for synthetic vital-sign datasets and regression tests, with hard invalid_input on a negative respiratory rate.
Technical questions
How do I format the input?
Send respiratory_rate and systolic as finite numbers (for example 24 and 95) and altered_mentation as a boolean. Aliases rr, sbp, and ams are also accepted. Mentation may be true/false, yes/no, or 1/0.