TIMI UA/NSTEMI calculator
Six of the seven yes-or-no criteria give a score of 6, which is high risk, with a 14-day event rate of 40.9%: death, a new heart attack or severe ischemia needing urgent revascularization. For unstable angina and NSTEMI, for teaching. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
The TIMI risk score for unstable angina and non-ST-elevation myocardial infarction is a seven-item bedside rule derived from the TIMI 11B and ESSENCE trials. Each published criterion is a yes-or-no finding worth one point: age of sixty-five years or more, at least three coronary-artery-disease risk factors, known coronary stenosis of fifty percent or more, aspirin use in the past seven days, two or more anginal episodes in twenty-four hours, ST-segment deviation of at least half a millimetre, and elevated cardiac markers such as troponin or CK-MB. Adding the seven bits produces an integer from zero through seven. Teaching bands map zero through two to low risk, three and four to intermediate risk, and five through seven to high risk of a fourteen-day composite of death, new or recurrent myocardial infarction, or severe recurrent ischemia requiring urgent revascularization. This capability implements that published UA/NSTEMI rule as a pure function: you send seven booleans and receive the score together with the risk category. Missing answers are rejected with invalid input rather than being treated as no.
How the TIMI UA/NSTEMI score is defined
The TIMI risk score for unstable angina and NSTEMI is the seven-item prediction rule published by Antman and colleagues from the TIMI 11B and ESSENCE datasets. The published rule is deliberately small: seven binary findings, each worth one point, with no weighting and no GRACE or HEART items mixed in. Age contributes one point when the person is sixty-five years or older.
Coronary-artery-disease risk factors contribute one point when at least three of the classic factors are present: family history of coronary disease, hypertension, hypercholesterolemia, diabetes, and current smoking. Known coronary disease contributes one point when stenosis of fifty percent or more has already been documented. Aspirin contributes one point when the person used aspirin in the past seven days.
Severe angina contributes one point when two or more anginal episodes occurred in the past twenty-four hours. ST-segment deviation contributes one point when the tracing shows deviation of at least half a millimetre. Elevated cardiac markers contribute one point when troponin or CK-MB is above the local cutoff.
Adding the seven bits produces an integer from zero through seven. Teaching maps zero through two to low risk, three and four to intermediate risk, and five through seven to high risk of the fourteen-day composite of all-cause death, new or recurrent myocardial infarction, or severe recurrent ischemia requiring urgent revascularization.
Published event rates from the derivation work are about four point seven percent at scores zero and one, eight point three percent at two, thirteen point two percent at three, nineteen point nine percent at four, twenty-six point two percent at five, and forty point nine percent at six or seven. This capability implements those seven flags and those three bands exactly.
It does not compute age from a birth date, does not count risk factors from a longer history form, and does not ingest a GRACE, HEART, or STEMI TIMI score. Inputs must be present. A missing answer cannot be assumed as no and fails with invalid input rather than silently under-scoring.
Always frame outputs as educational scores from the published UA/NSTEMI TIMI rule, not as a clinical diagnosis or a substitute for a clinician, angiography, or local chest-pain protocols.
Where TIMI UA/NSTEMI calculators show up in real work
Cardiology education, emergency-medicine orientation, and physician-assistant courses constantly assign TIMI UA/NSTEMI drills from textbook yes-no vignettes, so a single trusted oracle that returns the integer beside the risk band speeds grading and demo setup. Chest-pain pathway worksheets want a documented seven-flag path that clients can audit by hand rather than a black-box ACS model that mixes GRACE, HEART, and STEMI TIMI without disclosure.
Research assistants preparing synthetic emergency-department datasets need stable TIMI labels from known answers without network calls or model drift, and they need a hard reject when any of the seven answers is missing so dirty extracts cannot masquerade as scores. If you later need the TIMI STEMI score, a GRACE ACS score, a HEART score, or numeric age and marker values rather than decided flags, treat those as separate search intents and landings rather than overloading this UA/NSTEMI TIMI calculator page.
Always present results as educational estimates from the published seven-point rule; clinical decisions require qualified professionals, a full history this tool does not collect, and protocols that may refer for an early invasive strategy when the score is intermediate or high. Keep requests small, pin the integer score and the risk band in tests, and you get reproducible TIMI UA/NSTEMI figures for homework, LMS plugins, and edge workers without standing up a clinical information system of your own.
What you can do with it
Chest-pain pathway worksheets
Show the seven published TIMI UA/NSTEMI criteria in teaching labs and emergency-medicine forms without mixing GRACE, HEART, or TIMI STEMI on the same landing.
FAQ
What is the TIMI risk score for UA/NSTEMI?
It is a seven-item rule for unstable angina and NSTEMI. One point each for age 65 or older, three or more CAD risk factors, known CAD with stenosis of 50% or more, aspirin in the past 7 days, two or more anginal episodes in 24 hours, ST deviation of 0.5 mm or more, and elevated cardiac markers. The total runs from 0 to 7.
How do you turn the seven answers into a risk category?
Each yes is one point. Scores 0–2 map to low risk, 3–4 to intermediate risk, and 5–7 to high risk of the 14-day composite of death, new or recurrent MI, or severe recurrent ischemia requiring urgent revascularization. The response reports the integer score, the risk band, and the matching published event rate.
What happens if one of the seven answers is missing?
A blank is not treated as no, because that would silently under-score the TIMI UA/NSTEMI questionnaire.
Do I send age, ST millimetres, or marker values as numbers?
Numeric age, millimetres of ST shift, or lab concentrations belong on other calculators; this landing scores the seven yes/no criteria.
What does the TIMI UA/NSTEMI calculator cost?
The browser tool is free and runs locally.
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/timi-ua-nstemi \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"age_ge_65":true,"cad_risk_factors_ge_3":true,"known_cad":true,"aspirin_7d":true,"severe_angina":true,"st_deviation":true,"elevated_markers":true}'const res = await fetch("https://api.kit.forhosting.com/health/timi-ua-nstemi", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"age_ge_65": true,
"cad_risk_factors_ge_3": true,
"known_cad": true,
"aspirin_7d": true,
"severe_angina": true,
"st_deviation": true,
"elevated_markers": true
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/timi-ua-nstemi",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"age_ge_65": true,
"cad_risk_factors_ge_3": true,
"known_cad": true,
"aspirin_7d": true,
"severe_angina": true,
"st_deviation": true,
"elevated_markers": true
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/timi-ua-nstemi", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"age_ge_65":true,"cad_risk_factors_ge_3":true,"known_cad":true,"aspirin_7d":true,"severe_angina":true,"st_deviation":true,"elevated_markers":true}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"age_ge_65":true,"cad_risk_factors_ge_3":true,"known_cad":true,"aspirin_7d":true,"severe_angina":true,"st_deviation":true,"elevated_markers":true}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/timi-ua-nstemi", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"age_ge_65": true,
"cad_risk_factors_ge_3": true,
"known_cad": true,
"aspirin_7d": true,
"severe_angina": true,
"st_deviation": true,
"elevated_markers": true
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.timi_ua_nstemi",
"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
Successful API calls use the published $0.002 per item; invalid input is not billed.
How the TIMI UA/NSTEMI 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 answer sets always yield identical JSON.
What you send and what you get back
Each flag accepts true or false, yes or no, and one or zero. A classic high-risk pattern is five or more yes answers. An all-no pattern yields score zero and low risk. An isolated three-yes pattern yields intermediate risk. If your upstream form collects numeric age, a list of risk factors, or raw millimetres of ST shift, convert those measurements to the matching yes-or-no flags before sending them here. Send seven required boolean fields that already encode the questionnaire thresholds. The field age_ge_65 is true when age is sixty-five years or more; aliases age_65, age_over_65, and age_65_or_over are accepted. The field cad_risk_factors_ge_3 is true when at least three coronary-disease risk factors are present; aliases three_risk_factors, cad_risks_ge_3, and risk_factors_3 are accepted. The field known_cad is true when coronary stenosis of fifty percent or more is already known; aliases prior_stenosis, known_cad_50, and stenosis_50 are accepted. The field aspirin_7d is true when aspirin was used in the past seven days; aliases asa_7_days, aspirin_last_7_days, and recent_aspirin are accepted. The field severe_angina is true when two or more anginal episodes occurred in twenty-four hours; aliases angina_24h, recent_severe_angina, and two_anginal_events are accepted. The field st_deviation is true when ST-segment deviation of at least half a millimetre is present; aliases st_changes, st_deviation_05, and st_segment are accepted. The field elevated_markers is true when cardiac markers are elevated; aliases cardiac_markers, elevated_troponin, and positive_markers are accepted. Missing required fields, empty strings, and values that are not booleans fail with invalid_input naming the field and are not charged. On success the response echoes the seven cleaned booleans, reports score as their integer sum from zero to seven, reports risk as low, intermediate, or high using the published bands, reports the matching fourteen-day event rate from the derivation table, and includes 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.
Where TIMI UA/NSTEMI 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
Classroom TIMI UA/NSTEMI answer keys
Generate the 0–7 score and low/intermediate/high risk band from textbook yes/no vignettes so instructors and auto-graders share one transparent ground truth.
Deterministic ACS-screen fixtures
Bulk-produce stable TIMI UA/NSTEMI labels for synthetic emergency datasets and regression tests, with hard invalid_input when any of the seven answers is missing.