Vietnam Payroll Calculator Online
Payroll for a whole company: gross or net per employee, allowances, dependents, insurance caps, PIT, employer cost, totals, XLSX sheet and PDF payslips.
Result
Press “Run” to see the result.
Send the staff list as JSON (employees) or upload a CSV / XLSX file with a header row (Vietnamese headers such as "Họ tên", "Lương", "Số NPT", "Vùng", "Lương đóng BH" are recognised). Each row is computed with the same rules as vn-salary: employee social, health and unemployment insurance (8 / 1.5 / 1 %) on the insurance salary capped at 20 × the base salary (2,530,000 VND from 1/7/2026) and 20 × the regional minimum wage, family deductions of 15.5 million + 6.2 million per dependent and the 5-bracket PIT table from 2026, and the employer share (17 % + 0.5 % + 3 % + 1 %, optional 2 % union fund).
Rows can be gross (salary / gross) or net (net: the gross is solved), prorated by work_days / standard_days, with bonus, overtime (tax-free part), advances and other deductions. Allowances come as allowances (array of { name, amount, taxable, insurance }) or as columns prefixed pc_ (taxable), pckct_ (tax-free) or pcbh_ (in the insurance salary); allowance_rules reclassifies them by name. Tax-free caps are not applied automatically: you decide what is exempt.
format=json returns every row and column totals; format=xlsx a ready-to-print payroll sheet ("Bảng thanh toán tiền lương", Times New Roman, totals and signature lines); format=payslips a ZIP with one A5 PDF payslip per employee in Vietnamese or English (Be Vietnam Pro font). Limits: 2,000 rows, 200 payslips per request. Files are processed in memory and not stored.
Use this in your code
curl -X POST "https://apibox.io.vn/v1/vn-payroll-batch" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"period":"2026-11","employees":[{"employee_id":"NV01","name":"Nguyễn Văn An","department":"Kế toán","salary":30000000},{"employee_id":"NV02","name":"Trần Thị Bình","salary":20000000,"dependents":1,"insurance_salary":15000000,"allowances":[{"name":"Ăn trưa","amount":730000,"taxable":false},{"name":"Điện thoại","amount":500000}]}]}'const res = await fetch('https://apibox.io.vn/v1/vn-payroll-batch', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"period": "2026-11",
"employees": [
{
"employee_id": "NV01",
"name": "Nguyễn Văn An",
"department": "Kế toán",
"salary": 30000000
},
{
"employee_id": "NV02",
"name": "Trần Thị Bình",
"salary": 20000000,
"dependents": 1,
"insurance_salary": 15000000,
"allowances": [
{
"name": "Ăn trưa",
"amount": 730000,
"taxable": false
},
{
"name": "Điện thoại",
"amount": 500000
}
]
}
]
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-payroll-batch",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"period": "2026-11", "employees": [{"employee_id": "NV01", "name": "Nguyễn Văn An", "department": "Kế toán", "salary": 30000000}, {"employee_id": "NV02", "name": "Trần Thị Bình", "salary": 20000000, "dependents": 1, "insurance_salary": 15000000, "allowances": [{"name": "Ăn trưa", "amount": 730000, "taxable": False}, {"name": "Điện thoại", "amount": 500000}]}]},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-payroll-batch');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"period":"2026-11","employees":[{"employee_id":"NV01","name":"Nguyễn Văn An","department":"Kế toán","salary":30000000},{"employee_id":"NV02","name":"Trần Thị Bình","salary":20000000,"dependents":1,"insurance_salary":15000000,"allowances":[{"name":"Ăn trưa","amount":730000,"taxable":false},{"name":"Điện thoại","amount":500000}]}]}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));API documentation → Get a free API key
FAQ
Which rules are used?
The rules in force in the payroll month: PIT under Luật 109/2025/QH15 and NQ 110/2025/UBTVQH15 from 2026, insurance under Luật BHXH 2024, base salary 2,530,000 VND from 1/7/2026, regional minimum wages of NĐ 293/2025/NĐ-CP.
Are meal or phone allowances tax-free?
Only if you mark them (taxable: false or a pckct_ column). The legal caps depend on your policies and invoices, so the API does not guess.
Can I protect payslips with a password?
Not yet: PDF encryption is not available in the Workers runtime. Send the ZIP over a private channel.