APRI calculator
Estimate the likelihood of liver fibrosis from two routine lab values: AST of 80 U/L with 150 ×10⁹/L platelets and the usual upper limit of 40 gives an APRI of 1.33, an indeterminate result. Use your lab's own limit if it differs. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Ast
- 80
- Platelets
- 150
- Uln ast
- 40
- Ast uln ratio
- 2
- Apri
- 1.3333333333
- Unit ast
- U/L
The AST to platelet ratio index, commonly abbreviated APRI, is a simple non-invasive score used in hepatology education and clinical research to estimate the likelihood of significant hepatic fibrosis or cirrhosis from routine laboratory values. It combines serum aspartate aminotransferase activity with the circulating platelet count, both of which shift as chronic liver disease progresses. This calculator implements the published closed form APRI equals AST over the upper limit of normal for AST, divided by the platelet count, then multiplied by one hundred. You supply positive AST in units per litre, positive platelets in times ten to the ninth per litre, and optionally your laboratory upper limit of normal when it is not the default of forty. Invalid or non-positive inputs fail with a clear error instead of inventing numbers.
How the AST to platelet ratio index is defined
Aspartate aminotransferase is a hepatocellular enzyme measured on standard chemistry panels. As necroinflammatory activity and fibrosis advance, AST often rises relative to the laboratory reference range while thrombocytopenia becomes more common because of portal hypertension, splenic sequestration, and reduced thrombopoietin production. The AST to platelet ratio index captures that joint pattern without imaging or biopsy.
The classical formula multiplies the ratio of measured AST to the upper limit of normal by one hundred after dividing by the platelet count expressed in times ten to the ninth per litre. Algebraically that is APRI equals open parenthesis AST divided by ULN close parenthesis divided by platelets, times one hundred.
When your lab form lists the upper limit of normal as forty units per litre, omitting the optional ULN field here uses that default; when your reference interval is different, pass the exact ULN so the ratio of AST to normal stays faithful to the report that generated the enzyme value. This capability implements that closed form exactly. It does not apply FIB-4 age terms, ELF serum panels, transient elastography cutoffs, or machine-learning composites.
Inputs must be finite and strictly greater than zero. A zero or negative AST, platelet count, or ULN cannot represent a meaningful laboratory reading for this model and fails with invalid input rather than inventing absolute values. Always frame outputs as educational estimates from the published formula, not as a clinical diagnosis or a substitute for professional judgment, imaging, or local treatment protocols.
Where APRI calculators show up in real work
Hepatology and internal-medicine courses constantly assign APRI drills from textbook laboratory pairs, so a single trusted oracle that returns the index beside the AST-to-ULN ratio speeds grading and demo setup. Nursing and physician-assistant programs introduce non-invasive fibrosis scores before biopsy pathways, and instructors need deterministic answer keys that match hand arithmetic with an explicit ULN. Product teams building educational clinical calculators want a documented AST-and-platelets path that clients can audit by hand rather than a black-box risk score that mixes multiple biomarkers without disclosure.
Research assistants preparing synthetic liver-panel datasets need stable APRI labels from known enzyme and platelet pairs without network calls or model drift. If you later need FIB-4, Child-Pugh scoring, eGFR, mean arterial pressure, or unit conversion among enzyme activity units, treat those as separate search intents and landings rather than overloading this APRI calculator page. Always present results as educational estimates from the classical AST to platelet ratio formula; clinical decisions require qualified professionals, full laboratory context, imaging when indicated, and protocols this tool does not collect.
What you can do with it
Classroom APRI answer keys
Generate APRI and AST/ULN ratios from textbook enzyme and platelet pairs so instructors and auto-graders share one transparent ground truth.
Hepatology training demos
Show the classical non-invasive fibrosis index in teaching labs without mixing FIB-4 or elastography models on the same landing.
FAQ
What is the APRI score?
APRI is the AST to platelet ratio index, a non-invasive laboratory score used to estimate the likelihood of significant hepatic fibrosis or cirrhosis from routine blood tests.
What formula do you use?
APRI = (AST / ULN_AST) / platelets × 100, with AST and ULN in U/L and platelets in ×10⁹/L. The default ULN_AST is 40 when you omit that field.
What happens if AST or platelets is zero or negative?
Non-positive enzyme or platelet values are rejected rather than inventing absolute values or silent NaNs.
How do I format the input?
Send ast and platelets as finite positive numbers (e.g. 80 and 150).
What does it 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/apri \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"ast":80,"platelets":150}'const res = await fetch("https://api.kit.forhosting.com/health/apri", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"ast": 80,
"platelets": 150
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/apri",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"ast": 80,
"platelets": 150
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/apri", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"ast":80,"platelets":150}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"ast":80,"platelets":150}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/apri", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"ast": 80,
"platelets": 150
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.apri",
"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
How the AST to platelet ratio index is defined
The computation is pure floating-point arithmetic with no network calls, no random seeds, no wall-clock timestamps, and no model drift, so identical enzyme and platelet pairs always yield identical JSON.
What you send and what you get back
Send two required fields and one optional field. Classic smoke checks include AST eighty with platelets one hundred fifty and default ULN forty, which yields an APRI of roughly one point three three, and AST forty five with platelets two hundred fifty, which yields roughly zero point four five. If your upstream form collects platelets in a different scale, convert to times ten to the ninth per litre first and pass the positive number here. The field ast is serum aspartate aminotransferase in units per litre and must be a finite number strictly greater than zero; aliases ast_ul, got, and aspartate are accepted. The field platelets is the platelet count in times ten to the ninth per litre, numerically the same scale as times ten to the third per microlitre on many complete blood count reports, and must also be finite and strictly positive; aliases platelet, plt, and platelet_count are accepted. The optional field uln_ast is the laboratory upper limit of normal for AST in the same unit; when omitted it defaults to forty, and when provided it must be finite and strictly positive; aliases ast_uln, uln, and upper_limit_ast are accepted. Missing required fields, non-numeric strings, NaN, Infinity, zero, and negative values fail with invalid_input and are not charged. On success the response returns cleaned ast, platelets, and uln_ast, a boolean uln_ast_defaulted indicating whether the default ULN was applied, ast_uln_ratio as AST divided by ULN, the apri index itself, unit_ast set to U/L, unit_platelets set to ten to the ninth per litre, an educational fibrosis_hint based on common literature cutoffs near zero point five, one point five, and two point zero, the formula string, and method apri. Pricing for successful API calls is the published base of $0.002 per item; validation failures do not consume prepaid balance.
Where APRI 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 liver-panel fixtures
Bulk-produce stable APRI labels for synthetic datasets and regression tests with hard invalid_input on non-positive lab values.