Tinetti fall risk calculator
Balance points of 11 and gait points of 9 give a Tinetti total of 20 out of 28, which falls in the moderate fall-risk band. Enter the sixteen item scores from your observation sheet to get both subtotals. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
The Tinetti Performance-Oriented Mobility Assessment, often called POMA or the Tinetti fall risk score, is a bedside additive scale used in geriatrics, rehabilitation, and physiotherapy to grade sitting and standing balance together with gait. This calculator accepts the sixteen published item scores—nine balance items that total at most sixteen points and seven gait items that total at most twelve—and returns the subscale totals, the combined score from 0 through 28, and the conventional fall-risk category.
What the Tinetti POMA measures and how the sixteen items add up
The Tinetti Performance-Oriented Mobility Assessment was described by Mary Tinetti in 1986 as a practical way to watch an older adult sit, stand, turn, and walk, then convert those observations into two additive subscales instead of a single global impression of frailty. The balance subscale contains nine items. Sitting balance is scored 0 or 1 depending on whether the person leans or slides in the chair or remains steady and safe.
Arises, attempts to arise, immediate standing balance during the first five seconds, standing balance, the sternal nudge, turning through 360 degrees, and sitting down are each scored 0, 1, or 2 according to the published descriptors for inability, partial independence, and steady unassisted performance. Eyes closed in a narrow stance is scored 0 or 1. Those nine integers sum to at most sixteen points.
The gait subscale contains seven items. Initiation of gait, step symmetry, step continuity, and walking stance are each scored 0 or 1. Step length and height is the grouped item worth up to four points, awarding one point for each of right swing past the stance foot, right foot clearance, left swing past the stance foot, and left foot clearance.
Path and trunk are each scored 0, 1, or 2. Those seven integers sum to at most twelve points. The Tinetti total is the sum of the two subscales and therefore ranges from 0 through 28.
Conventional teaching bands then map that total onto fall risk: totals from 0 through 18 indicate high risk, 19 through 24 indicate moderate risk, and 25 through 28 indicate low risk.
How to read fall-risk categories, where the calculator belongs, and what it does not decide
A total of 25 through 28 is taught as low fall risk, 19 through 24 as moderate fall risk, and 0 through 18 as high fall risk. Those bands are the conventional classroom and clinic cutoffs used with the Tinetti POMA; they are not a personal probability of falling during the next year, and they do not replace a history of previous falls, orthostatic blood pressure, a medication review, vision, footwear, home hazards, or a licensed clinician's view of strength, cognition, and the walking environment.
A low-risk total does not certify that a person is safe to walk unattended on stairs, outdoors, or in an unfamiliar building. Use the calculator for education, exam keys, research coding of geriatric mobility rows, and product prototypes that need a deterministic Tinetti step before handing off to licensed clinical systems. Do not discharge a patient, prescribe or withhold a walking aid, complete a fall-prevention care plan, or make a legal capacity statement from this result alone.
Neighbouring instruments such as the Berg Balance Scale, the Timed Up and Go, or the Morse Fall Scale answer different search intents and should keep their own landings rather than being overloaded on this page.
What you can do with it
Teaching vignettes and exam keys
Score textbook Tinetti POMA worksheets so instructors and auto-graders share one ground truth for subscale totals, the 0–28 score, and the fall-risk category.
Prototype fall-risk scaffolds
Wire a transparent Tinetti POMA step into educational apps and clinic checklists that later hand off to licensed systems for real mobility decisions.
FAQ
What is the Tinetti POMA fall risk score?
It is Mary Tinetti’s 1986 Performance-Oriented Mobility Assessment. Nine balance items (max 16) plus seven gait items (max 12) yield a total from 0 through 28 and a conventional high, moderate, or low fall-risk category.
How is the Tinetti score calculated from the inputs?
Each item is an integer inside its published maximum. There are no hidden weights.
What happens if an item score exceeds its allowed maximum?
The same happens for a missing item, a non-integer, or a negative value, and those failures are not billed.
How should I interpret high, moderate, and low fall risk?
Totals of 0–18 are taught as high risk, 19–24 as moderate risk, and 25–28 as low risk. Those bands are classroom cutoffs, not a personal prognosis, and they do not replace a licensed mobility assessment.
Can I use this result to decide walking aids or discharge?
No. This is an educational arithmetic aid, not medical advice. Walking aids, supervision, and discharge planning need a licensed clinician and the rest of the clinical picture this calculator does not collect.
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/tinetti \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"sitting_balance":1,"arises":2,"attempts_to_arise":2,"immediate_standing":1,"standing_balance":1,"nudged":1,"eyes_closed":1,"turning_360":1,"sitting_down":1,"gait_initiation":1,"step_length_height":2,"step_symmetry":1,"step_continuity":1,"gait_path":1,"gait_trunk":2,"walking_stance":1}'const res = await fetch("https://api.kit.forhosting.com/health/tinetti", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"sitting_balance": 1,
"arises": 2,
"attempts_to_arise": 2,
"immediate_standing": 1,
"standing_balance": 1,
"nudged": 1,
"eyes_closed": 1,
"turning_360": 1,
"sitting_down": 1,
"gait_initiation": 1,
"step_length_height": 2,
"step_symmetry": 1,
"step_continuity": 1,
"gait_path": 1,
"gait_trunk": 2,
"walking_stance": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/tinetti",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"sitting_balance": 1,
"arises": 2,
"attempts_to_arise": 2,
"immediate_standing": 1,
"standing_balance": 1,
"nudged": 1,
"eyes_closed": 1,
"turning_360": 1,
"sitting_down": 1,
"gait_initiation": 1,
"step_length_height": 2,
"step_symmetry": 1,
"step_continuity": 1,
"gait_path": 1,
"gait_trunk": 2,
"walking_stance": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/tinetti", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"sitting_balance":1,"arises":2,"attempts_to_arise":2,"immediate_standing":1,"standing_balance":1,"nudged":1,"eyes_closed":1,"turning_360":1,"sitting_down":1,"gait_initiation":1,"step_length_height":2,"step_symmetry":1,"step_continuity":1,"gait_path":1,"gait_trunk":2,"walking_stance":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"sitting_balance":1,"arises":2,"attempts_to_arise":2,"immediate_standing":1,"standing_balance":1,"nudged":1,"eyes_closed":1,"turning_360":1,"sitting_down":1,"gait_initiation":1,"step_length_height":2,"step_symmetry":1,"step_continuity":1,"gait_path":1,"gait_trunk":2,"walking_stance":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/tinetti", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"sitting_balance": 1,
"arises": 2,
"attempts_to_arise": 2,
"immediate_standing": 1,
"standing_balance": 1,
"nudged": 1,
"eyes_closed": 1,
"turning_360": 1,
"sitting_down": 1,
"gait_initiation": 1,
"step_length_height": 2,
"step_symmetry": 1,
"step_continuity": 1,
"gait_path": 1,
"gait_trunk": 2,
"walking_stance": 1
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.tinetti",
"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
Every item must be an integer inside its published maximum; a missing field, a non-integer, a negative value, or any item that exceeds its allowed maximum fails with invalid_input and is not billed. Treat the JSON as a transparent arithmetic aid, not a diagnosis or a substitute for licensed clinical judgment about walking aids, supervision, or whether a person is safe to walk unattended.
What the Tinetti POMA measures and how the sixteen items add up
This capability implements that published table exactly, with no hidden weights, so a hand-scored worksheet and the JSON body can be compared item by item without a black-box model in between.
Input contract, per-item maxima, validation, and the shape of a successful response
Optional output keys are omitted rather than set to null. Send a JSON object with sixteen required integer fields, nine for balance and seven for gait. The canonical balance names are sitting_balance with a maximum of 1, arises with a maximum of 2, attempts_to_arise with a maximum of 2, immediate_standing with a maximum of 2, standing_balance with a maximum of 2, nudged with a maximum of 2, eyes_closed with a maximum of 1, turning_360 with a maximum of 2, and sitting_down with a maximum of 2. The canonical gait names are gait_initiation with a maximum of 1, step_length_height with a maximum of 4, step_symmetry with a maximum of 1, step_continuity with a maximum of 1, gait_path with a maximum of 2, gait_trunk with a maximum of 2, and walking_stance with a maximum of 1. Each value may arrive as a JSON integer or as a numeric string that parses to an integer; a missing field, an empty string, null, a boolean, a nested object, a non-integer such as 1.5, or a non-finite token fails with invalid_input naming the field and stating that an integer from 0 to that item's maximum was expected. If any item is negative or exceeds its allowed maximum—for example sitting_balance equal to 2 when that item only allows 1—the call fails with invalid_input and a message that the score exceeds its allowed maximum; those failures are not billed. Common aliases such as sit_balance, arise, sternal_nudge, initiation_of_gait, step_length, path, and trunk map onto the canonical names, but the arithmetic always uses the published maxima. On success the body returns balance_score from 0 through 16, gait_score from 0 through 12, total_score from 0 through 28, fall_risk as the tokens high, moderate, or low, a short fall_risk_label, and formula Tinetti POMA. Pair the free browser form with the same contract from scripts; successful API calls cost $0.002 per item and validation failures do not consume prepaid balance.
How to read fall-risk categories, where the calculator belongs, and what it does not decide
A high-risk total should prompt a conversation about closer supervision, walking aids, strength and balance training, and further assessment, not an automatic restriction generated from a JSON payload. The arithmetic is pure parse with no outbound network, so identical inputs always yield identical JSON, and the published API price remains $0.002 per successful request.
Integration use cases
Research coding of geriatric mobility cohorts
Attach a reproducible Tinetti total and high/moderate/low label to study rows when the sixteen item scores are already in the table.
Technical questions
What does the Tinetti calculator cost?
The browser widget runs free and locally. The same computation via the API is billed at $0.002 per successful request from prepaid KIT balance; invalid_input failures are not charged.