Vietnam VAT calculator API
Add or split Vietnamese VAT per invoice line, check whether goods get the 8% rate until 31/12/2026 (NĐ 174/2025), and compute direct-method VAT.
Send one amount or a list of invoice lines and the API adds VAT to prices before tax (mode=exclusive) or splits VAT out of prices that include it (mode=inclusive). Rates are 0%, 5%, 10%, 8% or exempt (KCT); with rate=auto (default) the line gets 8% when the invoice date falls in a reduction period and the goods are not excluded, else 10%. VAT is rounded to whole đồng per line (or once per rate group with rounding=total), and the totals are grouped by rate like on an e-invoice.
The 8% reduction (Nghị quyết 204/2025/QH15, Nghị định 174/2025/NĐ-CP, 1/7/2025 – 31/12/2026) excludes telecom, finance, banking, securities, insurance, real-estate business, metals and fabricated metal products, mining products except coal (Phụ lục I), goods and services subject to excise tax except gasoline (Phụ lục II) and IT goods (Phụ lục III). Give a category (e.g. telecom, metals, goods) or an hs_code and each line says whether it qualifies and why. HS matching is indicative: the appendices use product codes, so borderline goods are flagged “check”. Earlier periods since 2022 are known too.
method=direct computes VAT for businesses on the direct method: 1% distribution, 5% services, 3% production / transport, 2% other (Luật Thuế GTGT 48/2024), minus 20% during the reduction, with the note to print on the invoice.
Parameters
| Name | In | Type | Required | Default | |
|---|---|---|---|---|---|
amount | query|body | number | no | One amount (VND): price before VAT, or with VAT when mode=inclusive; revenue for method=direct. | |
lines | body | array | no | Invoice lines: [{"name":"…","amount":2000000,"rate":"auto","category":"goods","hs_code":"9403"}] (or quantity + unit_price + discount). | |
mode | query|body | string | no | exclusive | exclusive (add VAT) or inclusive (split VAT out). |
rate | query|body | string | no | auto | auto, 0, 5, 8, 10 or exempt. |
category | query|body | string | no | Goods group: telecom, finance, banking, securities, insurance, real_estate, metals, metal_products, mining, excise_goods, excise_services, it, coal, gasoline, chemicals, goods, services. | |
hs_code | query|body | string | no | HS code (2–10 digits) for an indicative exclusion check. | |
date | query|body | string | no | Invoice date (default today, Vietnam time). | |
rounding | query|body | string | no | line | line or total. |
method | query|body | string | no | credit | credit (khấu trừ) or direct (trực tiếp, with sector: distribution, services, production, other). |
Example
curl -X POST "https://apibox.io.vn/v1/vn-vat" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"lines":[{"name":"Bàn làm việc","amount":2000000,"category":"goods"},{"name":"Cước internet","amount":500000,"category":"telecom"}],"date":"2026-11-11"}'const res = await fetch('https://apibox.io.vn/v1/vn-vat', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"lines": [
{
"name": "Bàn làm việc",
"amount": 2000000,
"category": "goods"
},
{
"name": "Cước internet",
"amount": 500000,
"category": "telecom"
}
],
"date": "2026-11-11"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-vat",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"lines": [{"name": "Bàn làm việc", "amount": 2000000, "category": "goods"}, {"name": "Cước internet", "amount": 500000, "category": "telecom"}], "date": "2026-11-11"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-vat');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"lines":[{"name":"Bàn làm việc","amount":2000000,"category":"goods"},{"name":"Cước internet","amount":500000,"category":"telecom"}],"date":"2026-11-11"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Response
{
"method": "credit",
"mode": "exclusive",
"date": "2026-11-11",
"rounding": "line",
"lines": [
{
"no": 1,
"name": "Bàn làm việc",
"rate_percent": 8,
"rate_label": "8%",
"reduction": {
"applied": true,
"eligible": true,
"reason": "Other goods at 10% is reduced when it is taxed at 10%",
"basis": "category"
},
"amount_before_vat": 2000000,
"vat": 160000,
"total": 2160000
},
{
"no": 2,
"name": "Cước internet",
"rate_percent": 10,
"rate_label": "10%",
"reduction": {
"applied": false,
"eligible": false,
"reason": "Telecommunications is not reduced (NĐ 174/2025/NĐ-CP, Phụ lục I)",
"basis": "category",
"group": "Phụ lục I"
},
"amount_before_vat": 500000,
"vat": 50000,
"total": 550000
}
],
"vat_groups": [
{
"rate_label": "8%",
"amount_before_vat": 2000000,
"vat": 160000,
"total": 2160000
},
{
"rate_label": "10%",
"amount_before_vat": 500000,
"vat": 50000,
"total": 550000
}
],
"totals": {
"amount_before_vat": 2500000,
"vat": 210000,
"total": 2710000
},
"reduction_period": {
"from": "2025-07-01",
"to": "2026-12-31",
"ref": "Nghị quyết 204/2025/QH15; Nghị định 174/2025/NĐ-CP"
},
"legal": [
"Luật Thuế giá trị gia tăng 48/2024/QH15 (Điều 9 thuế suất, Điều 12 phương pháp trực tiếp)",
"Nghị quyết 204/2025/QH15; Nghị định 174/2025/NĐ-CP"
],
"reviewed": "2026-11-11"
}
Use cases
- Show 8% or 10% VAT in POS and sales software
- Split VAT from VAT-inclusive prices for bookkeeping
- Check supplier invoices that used 8% on excluded goods
- Compute direct-method VAT for household businesses
FAQ
Does 8% still apply in 2027?
The reduction ends on 31/12/2026. As of November 2026 no extension is in force; invoices dated 2027 get 10% and a note.
How do I know if my goods are excluded?
Send a category or hs_code. Exclusions follow Phụ lục I–III of NĐ 174/2025; HS matching is a pointer, so confirm borderline goods in the appendix.
Why does per-line rounding differ from the total?
Each line’s VAT is rounded to whole đồng and then summed. Use rounding=total to round once per rate group.
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.