University Admission Score (VN) API
Compute a Vietnamese university admission score under the 2026 rules: subject block total, KV / UT priority with the 22.5 reduction, bonus caps, IELTS.
The admission score API applies the 2026 admission regulation (Thông tư 06/2026/TT-BGDĐT). Send the subject block (A00, A01, B00, C00, D01… or your own subjects) with scores, or a ready total, plus the priority area (area=KV1, KV2-NT, KV2, KV3) and beneficiary group (group=UT1, UT2, or the object code 01–06). Area priority is 0.75 / 0.50 / 0.25 / 0, groups 2.00 / 1.00, and for totals of 22.5 or more the priority shrinks: [(30 − total) / 7.5] × level, rounded to 0.01. Area priority only counts in the graduation year and the next one (graduation_year).
Bonus points (bonus: thuong up to 3, xet_thuong and khuyen_khich up to 1.5) are capped at 10% of the scale and the final score at 30. method=hoc_ba takes yearly averages of grades 10–12 per subject; weights (e.g. {"toan": 2}) handles weighted combinations on a 40-point scale, with priority converted proportionally. ielts converts a band into the English score with an EXAMPLE table, or your school's ielts_table; gpa10 alone converts a 10-point GPA to the 4-point scale and letter; list=blocks lists the combinations.
Every answer names the regulation and articles used. Each university publishes its own conversion tables and bonus rules: pass them as parameters; cut-off scores are not included.
Parameters
| Name | In | Type | Required | Default | |
|---|---|---|---|---|---|
block | body|query | string | no | Subject combination code (A00, D01…); list=blocks lists them. | |
subjects | body|query | array | no | Custom subjects instead of a block (["toan","van","tin"]). | |
scores | body|query | object | no | Scores on 10: object {"toan": 8.5} or array in block order; hoc_ba: arrays of yearly averages. | |
total | body|query | number | no | Ready 3-subject total on 30 (instead of scores). | |
area | body|query | string | no | Priority area KV1, KV2-NT, KV2, KV3. | |
group | body|query | string | no | Beneficiary group UT1, UT2 or object 01–06. | |
graduation_year | body|query | number | no | THPT graduation year (area priority lasts 2 years). | |
method | body|query | string | no | exam | exam (THPT exam) or hoc_ba (transcript). |
bonus | body|query | object | no | Bonus points {"thuong": 1, "khuyen_khich": 0.5} or a number. | |
weights | body|query | object | no | Subject coefficients, e.g. {"toan": 2}. | |
ielts | body|query | number | no | IELTS band to replace English (or ielts_use=bonus with ielts_bonus). | |
ielts_table | body|query | array | no | School table [[band, score], …]; default is an example. | |
priority_basis | body|query | string | no | subjects | subjects or with_bonus for the 22.5 threshold. |
gpa10 | body|query | number | no | Alone: convert a 10-point GPA to 4-point and letter. |
Example
curl -X POST "https://apibox.io.vn/v1/vn-admission-score" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"block":"A00","scores":{"toan":9,"ly":8.75,"hoa":9.25},"area":"KV1","group":"UT2"}'const res = await fetch('https://apibox.io.vn/v1/vn-admission-score', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"block": "A00",
"scores": {
"toan": 9,
"ly": 8.75,
"hoa": 9.25
},
"area": "KV1",
"group": "UT2"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-admission-score",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"block": "A00", "scores": {"toan": 9, "ly": 8.75, "hoa": 9.25}, "area": "KV1", "group": "UT2"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-admission-score');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"block":"A00","scores":{"toan":9,"ly":8.75,"hoa":9.25},"area":"KV1","group":"UT2"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Response
{
"method": "exam",
"block": "A00",
"subjects": [
{
"subject": "toan",
"name_vi": "Toán",
"score": 9,
"weight": 1
},
{
"subject": "ly",
"name_vi": "Vật lí",
"score": 8.75,
"weight": 1
},
{
"subject": "hoa",
"name_vi": "Hoá học",
"score": 9.25,
"weight": 1
}
],
"subject_total": 27,
"scale": 30,
"subject_total_30": 27,
"priority": {
"area": "KV1",
"area_points": 0.75,
"group": "UT2",
"group_points": 1,
"level_30": 1.75,
"reduced": true,
"basis": "subjects",
"points_30": 0.7,
"points": 0.7,
"formula": "total ≥ 22.5: [(30 − total)/7.5] × level, rounded to 0.01"
},
"bonus": {
"parts": {},
"points_30": 0,
"points": 0,
"cap_30": 3
},
"admission_score_30": 27.7,
"admission_score": 27.7,
"meets_minimum_15": true,
"warnings": [],
"regulation": "06/2026/TT-BGDĐT",
"issued": "2026-02-15",
"effective_from": "2026-02-15",
"articles": "Điều 2 (k.20), Điều 6 (k.2, 3, 5), Điều 7, Phụ lục I–II",
"reviewed": "2026-11-11"
}
Use cases
- Admission calculators on education and career sites
- Pre-fill priority points in school or tutoring apps
- Check admission scores during the June–August season
- Convert IELTS and GPA with a school's own table
FAQ
How are priority points reduced for high scores?
From a 22.5 total (30 scale): priority = [(30 − total)/7.5] × the KV + UT level, rounded to 0.01. A KV1 candidate with 27 gets 0.30 instead of 0.75.
Is the IELTS table official?
No, each school publishes its own (at least 5 steps). The default table is an example; pass ielts_table with your school's values.
Is the bonus included in the 22.5 threshold?
By default the threshold uses the subject total; priority_basis=with_bonus follows schools that include bonus points.
Related APIs
JSON Validator
Check JSON syntax with exact line and column of errors, and validate data against a JSON Schema (draft 4, 7, 2019-09 or 2020-12).
{ }JSON Formatter
Pretty print JSON with 0-8 spaces or tabs, minify it, or sort object keys recursively. Syntax errors are reported with line and column.
CSVCSV to JSON
Convert CSV into an array of JSON objects using the header row, with delimiter auto-detection, number and boolean typing, and row-level errors.