QTc Framingham Calculator
A QT of 400 ms at 75 beats per minute becomes a Framingham QTc of 430.8 ms, with an RR interval of 0.8 seconds. The linear correction adds 154 ms times one minus RR to the measured QT. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Qt ms
- 400
- Heart rate bpm
- 75
- Rr seconds
- 0.8
- Qtc framingham ms
- 430.8
The QTc Framingham calculator corrects a measured QT interval for heart rate with the Framingham linear formula. Enter QT in milliseconds and heart rate in beats per minute to receive the RR interval and corrected QT in milliseconds. The calculation is fully offline, deterministic, and suitable for repeatable software workflows. It is an arithmetic aid, not a diagnosis, and clinical interpretation should account for the tracing, measurement method, patient context, and professional guidance.
Enter the measurement and heart rate carefully
Provide the measured QT interval in milliseconds and the heart rate in beats per minute. Both values must be finite and greater than zero; missing, textual, infinite, zero, or negative inputs are rejected instead of being silently converted. The QT value should come from a properly measured electrocardiogram interval, while the heart rate should correspond to the rhythm used for that measurement.
Consistent units matter because the formula operates on QT in milliseconds but derives the RR interval in seconds. A value recorded in seconds must therefore be converted to milliseconds before submission. The calculator reports the accepted inputs so an automated workflow can retain a clear audit trail.
It does not inspect an ECG image, choose a representative beat, resolve uncertain T-wave endings, or determine whether a tracing is technically adequate. Those measurement decisions remain upstream. When rhythm or beat-to-beat timing varies, a single heart-rate value may not fully represent the intervals in the tracing, so the returned number should be reviewed in its actual clinical context rather than treated as an independent finding.
Understand the Framingham calculation
The calculator first derives RR in seconds as 60 divided by heart rate in beats per minute. It then applies the linear Framingham correction: QTc equals QT plus 154 multiplied by one minus RR. Expressed directly from the submitted fields, the computation is QTc in milliseconds = QT in milliseconds + 154 × (1 − 60 / heart rate).
At 60 beats per minute, RR is exactly one second, so the correction term is zero and QTc equals the measured QT. At faster rates the correction increases the reported interval; at slower rates it decreases it. There are no lookup tables, remote services, random choices, date-dependent branches, or patient-specific hidden adjustments.
Identical valid inputs therefore produce identical results. This capability implements only the named Framingham equation and does not combine or average it with Bazett, Fridericia, Hodges, or other correction methods.
Interpret the result within a clinical workflow
Use the returned QTc as a reproducible calculation that supports, rather than replaces, professional interpretation. QT assessment can be affected by measurement technique, lead selection, rhythm regularity, QRS duration, medications, electrolyte status, demographic factors, and the purpose of the evaluation. In software, preserve the original QT and heart-rate values alongside the corrected result, identify that Framingham was the selected method, and avoid mixing outputs from different formulas without a visible method label.
Validate the source and units before calculating, and route unexpected or clinically important findings to an appropriately qualified professional. For urgent symptoms or a suspected emergency, use established emergency services rather than relying on a calculator.
What you can do with it
Clinical calculation support
Compute a clearly labeled Framingham QTc from already measured QT and heart rate values for professional review.
Research data processing
Apply one deterministic correction method consistently across a validated dataset while retaining the original inputs.
Quality assurance
Check another implementation against stable Framingham outputs without network calls or changing external dependencies.
FAQ
What formula does this calculator use?
It uses QTc = QT + 154 × (1 − RR), where QT and QTc are in milliseconds and RR is 60 divided by heart rate in seconds.
Which units should I enter?
Enter QT in milliseconds and heart rate in beats per minute. The returned QTc is in milliseconds.
Does the result diagnose a prolonged QT interval?
No. The result is an arithmetic correction only. Interpretation requires the ECG and relevant clinical context.
What is the Framingham QTc for a QT of 400 ms at 75 beats per minute?
It is 430.8 ms. At 75 beats per minute the RR interval is 0.8 seconds, so the formula adds 154 times one minus 0.8 to the measured 400 ms.
What happens to the QTc at a slow heart rate?
Below 60 beats per minute the RR interval is longer than one second, so the correction term turns negative and the QTc comes out lower than the measured QT. At exactly 60 the two are equal.
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/qtc-framingham \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"qt_ms":400,"heart_rate_bpm":75}'const res = await fetch("https://api.kit.forhosting.com/health/qtc-framingham", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"qt_ms": 400,
"heart_rate_bpm": 75
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/qtc-framingham",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"qt_ms": 400,
"heart_rate_bpm": 75
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/qtc-framingham", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"qt_ms":400,"heart_rate_bpm":75}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"qt_ms":400,"heart_rate_bpm":75}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/qtc-framingham", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"qt_ms": 400,
"heart_rate_bpm": 75
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.qtc_framingham",
"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
Interpret the result within a clinical workflow
This endpoint deliberately avoids assigning labels such as normal, prolonged, dangerous, or treatment-required because a universal threshold would discard important context and could imply a diagnosis from two numbers alone. It also does not recommend medication changes, emergency action, or monitoring intervals. The API price is $0.002 per request, while the same deterministic core can run locally in the browser without sending the values to a remote calculation service.
Technical questions
What happens with invalid or non-positive values?
Missing, non-numeric, non-finite, zero, and negative inputs return an invalid_input error instead of a result.
What does the API request cost?
Each API request costs $0.002. The calculation is also available locally in the browser.