Vietnam Water Bill API
Compute a domestic water bill in Vietnam: block tariffs by province, quotas per household or person, 5% VAT and the wastewater fee or drainage price.
Send the m³ used (or two meter readings) and a provider and get the bill: each tier with its m³ and price, the amount before VAT, VAT 5% (clean water, Luật Thuế GTGT 48/2024), the wastewater charge and the total. Covered (coverage): Hà Nội (QĐ 3541/QĐ-UBND), the former Ho Chi Minh City area served by SAWACO (QĐ 25/2019/QĐ-UBND, 4 m³ per registered person, drainage service price 30% + VAT), former Bình Dương (Biwase), Đà Nẵng urban and rural (QĐ 2967/QĐ-UBND, prices incl. VAT), former Quảng Nam, Hải Phòng urban and rural (QĐ 05/2024/QĐ-UBND) and rural Cần Thơ (QĐ 5260/QĐ-UBND, from 1/11/2026).
Tier sizes are per meter and multiplied by households on the meter; with persons only, every 4 registered persons count as one household (TT 145/2025/TT-BTC). customer selects household, poor household, administrative / public, production or business prices. The environmental protection fee on domestic wastewater is 10% of the price before VAT (NĐ 346/2025/NĐ-CP, from 1/1/2026); override it with wastewater_percent where the province sets another rate or a commune is exempt.
For other water companies send custom_tiers ([{"up_to":10,"price":8500},{"price":27000}]) with tier_basis and prices_include_vat. action=tariffs returns all tables with their decisions and sources. Figures from a single source are flagged in tariff.verified and notes.
Parameters
| Name | In | Type | Required | Default | |
|---|---|---|---|---|---|
provider | query|body | string | no | hanoi, hcm, binh_duong, da_nang, da_nang_rural, quang_nam, hai_phong, hai_phong_rural, can_tho_rural (or a province name). | |
m3 | query|body | number | no | m³ used (or start_reading + end_reading). | |
customer | query|body | string | no | household | household, poor, admin, production, business. |
persons | query|body | number | no | Registered persons (HCMC quota per person; elsewhere 4 persons = 1 household). | |
households | query|body | number | no | 1 | Households sharing the meter. |
wastewater_percent | query|body | number | no | Override the wastewater fee / drainage percent (0 = exempt). | |
vat_percent | query|body | number | no | 5 | Override the VAT rate on water. |
custom_tiers | body | array | no | Own tariff: [{"up_to":10,"price":8500},{"price":27000}] with tier_basis (household/person) and prices_include_vat. | |
action | query|body | string | no | tariffs: list all tables and sources. |
Example
curl "https://apibox.io.vn/v1/vn-water-bill?provider=hanoi&m3=25" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/vn-water-bill?provider=hanoi&m3=25', {
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-water-bill?provider=hanoi&m3=25",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-water-bill?provider=hanoi&m3=25');
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
{
"provider": "hanoi",
"name": "Hà Nội",
"name_vi": "Hà Nội",
"customer": "household",
"m3": 25,
"quota": {
"basis": "household",
"households": 1
},
"tiers": [
{
"tier": 1,
"m3": 10,
"price": 8500,
"amount": 85000,
"limit": 10
},
{
"tier": 2,
"m3": 10,
"price": 9900,
"amount": 99000,
"limit": 10
},
{
"tier": 3,
"m3": 5,
"price": 16000,
"amount": 80000,
"limit": 10
}
],
"water_amount": 264000,
"prices_include_vat": false,
"amount_before_vat": 264000,
"vat_percent": 5,
"vat": 13200,
"wastewater": {
"kind": "env_fee",
"kind_vi": "Phí bảo vệ môi trường đối với nước thải sinh hoạt",
"percent": 10,
"amount": 26400,
"vat_percent": 0,
"vat": 0,
"ref": "NĐ 346/2025/NĐ-CP (phí bảo vệ môi trường đối với nước thải sinh hoạt, 10%)"
},
"total": 303600,
"legal": [
{
"text": "QĐ 3541/QĐ-UBND (7/7/2023), stage 2",
"effective_from": "2024-01-01"
},
{
"text": "Luật Thuế GTGT 48/2024/QH15 (nước sạch 5%)",
"effective_from": "2025-07-01"
},
{
"text": "NĐ 346/2025/NĐ-CP (phí bảo vệ môi trường đối với nước thải)",
"effective_from": "2026-01-01"
}
],
"coverage": [
"hanoi",
"hcm",
"binh_duong",
"da_nang",
"da_nang_rural",
"quang_nam",
"hai_phong",
"hai_phong_rural",
"can_tho_rural"
],
"disclaimer": "Reference calculation, not legal advice; check the official text and your invoice.",
"reviewed": "2026-11-11"
}
Use cases
- Show the monthly water bill in a boarding-house or building management app
- Split utility costs between tenants
- Check a water invoice from SAWACO, Hanoi or Hải Phòng
- Estimate utility costs in a property listing
FAQ
Which provinces are covered?
Hà Nội, the former HCMC area (SAWACO), former Bình Dương (Biwase), Đà Nẵng and former Quảng Nam, Hải Phòng and rural Cần Thơ. Others: use custom_tiers with the prices of your water company.
Is the wastewater charge included?
Yes: a 10% environmental fee (NĐ 346/2025/NĐ-CP) on the price before VAT, or in HCMC the drainage and wastewater service price of 30% plus 8% VAT (10% from 2027) instead.
How do quotas work for several households or tenants?
Tiers are multiplied by households; for renters, every 4 registered persons count as one household. In HCMC the first tier is 4 m³ per registered person.
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.