BHYT Cost Sharing (VN) API
How much Vietnamese health insurance pays for a visit or stay: card level, right route or self-referral by facility level, 5-year and small-bill rules.
Give the covered cost and the card code (the benefit level is read from it, as in bhyt-check) or level 1–5, plus the visit (outpatient / inpatient), the facility level under the 2023 medical examination law (primary cấp ban đầu, basic cấp cơ bản, specialized cấp chuyên sâu, with former_level district / provincial / central) and the route (right, self for self-referral, emergency). The API applies Luật BHYT Điều 22 as amended by Luật 51/2024/QH15 and NĐ 188/2025/NĐ-CP: card rate 100 / 95 / 80 %; self-referral 100 % at primary and former district facilities, inpatient 100 % at former provincial facilities, outpatient 50 % there from 1/7/2026 (0 % before), 40 % inpatient at other specialised hospitals, 100 % for diseases on the Ministry of Health lists (listed_disease) and for remote-area cases (remote_area); emergencies count as right route.
It also applies 100 % when one visit costs less than 15 % of the base salary (379,500 VND from 1/7/2026), at primary facilities, and after 5 consecutive years once co-payments in the year exceed 6 months of base salary (15,180,000 VND; pass five_years and copay_paid, and copay_h1 for the 2026 mid-year change). The response lists fund_pays, patient_pays and every rule applied. Drug and service caps and out-of-list items are not modelled.
Parameters
| Name | In | Type | Required | Default | |
|---|---|---|---|---|---|
cost | query | number | yes | Covered cost (VND). | |
card | query | string | no | 15-character card code (benefit level read from it). | |
level | query | number | no | 4 | Benefit level 1–5 when no card is given. |
visit | query | string | no | outpatient | outpatient or inpatient. |
facility | query | string | no | basic | primary, basic or specialized. |
former_level | query | string | no | district, provincial, central, low_score or mid_score. | |
route | query | string | no | right | right, self or emergency. |
listed_disease | query | boolean | no | Disease on the TT 01/2025/TT-BYT lists. | |
remote_area | query | boolean | no | Ethnic minority / poor household in an extremely difficult area, or island resident. | |
five_years | query | boolean | no | 5 consecutive years of cover. | |
copay_paid | query | number | no | Co-payments already paid this year. | |
out_of_scope_cost | query | number | no | Costs outside the BHYT scope. | |
date | query | string | no | Date of care (default today). |
Example
curl "https://apibox.io.vn/v1/vn-bhyt-cost?card=DN4797931234567&cost=1000000&facility=basic&former_level=provincial&route=self&date=2026-11-11" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/vn-bhyt-cost?card=DN4797931234567&cost=1000000&facility=basic&former_level=provincial&route=self&date=2026-11-11', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/vn-bhyt-cost?card=DN4797931234567&cost=1000000&facility=basic&former_level=provincial&route=self&date=2026-11-11",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-bhyt-cost?card=DN4797931234567&cost=1000000&facility=basic&former_level=provincial&route=self&date=2026-11-11');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Response
{
"date": "2026-11-11",
"cost": 1000000,
"out_of_scope_cost": 0,
"card": {
"normalized": "DN4797931234567",
"group": "DN",
"group_vi": "Người lao động làm việc theo hợp đồng lao động, người quản lý trong doanh nghiệp nhà nước",
"benefit_level": 4,
"valid": true,
"errors": [],
"warnings": []
},
"benefit_level": 4,
"visit": "outpatient",
"facility": "basic",
"former_level": "provincial",
"route": "self_referral",
"fund_pays": 400000,
"patient_pays": 600000,
"fund_share": 0.4,
"rate_applied": 0.4,
"route_factor": 0.5,
"card_rate": 0.8,
"thresholds": {
"base_salary": 2530000,
"base_salary_ref": "Nghị định 161/2026/NĐ-CP",
"small_visit": 379500,
"five_year_cap": 15180000
},
"rules_applied": [
"Card benefit level 4: 80% of covered costs (Luật BHYT Điều 22 k.1)",
"Self-referral, outpatient at these facilities from 01/07/2026: 50% of the card rate (NĐ 188/2025 Điều 19)"
],
"legal": [
{
"ref": "Luật BHYT 2008 sửa đổi bởi Luật 51/2024/QH15, Điều 22 (VBHN 40/VBHN-VPQH 16/03/2026)",
"effective_from": "2025-07-01"
},
{
"ref": "NĐ 188/2025/NĐ-CP Điều 17–19",
"effective_from": "2025-08-15"
}
],
"note": "Covered costs only (drugs and services on the BHYT lists, at the BHYT price). Payment caps on some drugs, supplies and services are not applied.",
"reviewed": "2026-11-11",
"disclaimer": "Reference calculation, not legal advice; check the official text."
}
Use cases
- Show patients the expected co-payment in a hospital app
- Estimate the top-up paid by private health insurance
- Explain self-referral rules at a specialised hospital
- Track the 5-year co-payment ceiling for a chronic patient
FAQ
What does “former_level” mean?
Since 2025 facilities are graded primary / basic / specialised; the self-referral rate still depends on the facility’s old district, provincial or central level (or its score).
Does it read the card from the government portal?
No: the benefit level is decoded from the card code structure. Validity dates and the registered clinic are not checked.
Are drug caps included?
No: pass only the cost within the BHYT scope at the BHYT price; out_of_scope_cost is paid by the patient except with level 5 cards.
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.