Fixed-asset depreciation API
Depreciation schedules under Vietnam’s TT 45/2013: straight line, declining balance (1.5/2/2.5), units of production, useful-life frames, CIT checks.
Send the asset cost, the method (straight_line, declining_balance, units_of_production) and the useful_life_years, or an asset_group code from the useful-life frame of Thông tư 45/2013/TT-BTC Phụ lục I (A1 power generators … D1 road vehicles … G1 permanent buildings, K other intangibles: 56 rows with min / max years). Without cost, the endpoint lists the frame (q filters by code or name).
Declining balance uses the coefficient 1.5 (≤ 4 years), 2.0 (> 4 – 6 years) or 2.5 (> 6 years) and switches to straight line when the declining charge falls to the remaining value divided by the remaining years, exactly as the circular’s worked example. Units of production takes total_units and the output of each period. With a start_date, calendar-year amounts are prorated by days, as depreciation starts on the day the asset is put into use.
Tax checks: life outside the frame, the yearly amount that is not deductible for CIT when the life is shorter than the minimum (Nghị định 320/2025/NĐ-CP Điều 10.6), assets below 30 million (tools, not fixed assets) and the 1.6-billion cap for cars of up to 9 seats (car_9_seats=true). TT 45/2013 is still in force in November 2026; a replacement draft targets 1/1/2027.
Parameters
| Name | In | Type | Required | Default | |
|---|---|---|---|---|---|
cost | query|body | number | no | Cost (nguyên giá). Omit to list the useful-life frame. | |
method | query|body | string | no | straight_line | straight_line, declining_balance or units_of_production. |
useful_life_years | query|body | number | no | Useful life in years (or useful_life_months; default the frame maximum of asset_group). | |
asset_group | query|body | string | no | Frame code such as A1, B12, D1, G1, K. | |
start_date | query|body | string | no | Date put into use, for calendar-year amounts. | |
total_units | query|body | number | no | Design output (units of production). | |
units | body | array | no | Output per period, e.g. [300,300,400]. | |
acceleration | query|body | number | no | Straight-line acceleration factor 1–2. | |
car_9_seats | query|body | boolean | no | Passenger car of up to 9 seats (1.6-billion CIT cap). | |
q | query | string | no | Filter the frame list (without cost). |
Example
curl "https://apibox.io.vn/v1/vn-depreciation?cost=50000000&method=declining_balance&useful_life_years=5&asset_group=B12" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/vn-depreciation?cost=50000000&method=declining_balance&useful_life_years=5&asset_group=B12', {
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-depreciation?cost=50000000&method=declining_balance&useful_life_years=5&asset_group=B12",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-depreciation?cost=50000000&method=declining_balance&useful_life_years=5&asset_group=B12');
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
{
"cost": 50000000,
"method": "declining_balance",
"useful_life_years": 5,
"start_date": null,
"monthly_first_year": 1666667,
"schedule": [
{
"year": 1,
"opening": 50000000,
"depreciation": 20000000,
"accumulated": 20000000,
"closing": 30000000,
"rate_percent": 40,
"method": "declining_balance"
},
{
"year": 2,
"opening": 30000000,
"depreciation": 12000000,
"accumulated": 32000000,
"closing": 18000000,
"rate_percent": 40,
"method": "declining_balance"
},
{
"year": 3,
"opening": 18000000,
"depreciation": 7200000,
"accumulated": 39200000,
"closing": 10800000,
"rate_percent": 40,
"method": "declining_balance"
},
{
"year": 4,
"opening": 10800000,
"depreciation": 5400000,
"accumulated": 44600000,
"closing": 5400000,
"rate_percent": 50,
"method": "straight_line"
},
{
"year": 5,
"opening": 5400000,
"depreciation": 5400000,
"accumulated": 50000000,
"closing": 0,
"rate_percent": 100,
"method": "straight_line"
}
],
"frame_check": {
"asset_group": "B12",
"name_vi": "Máy móc, thiết bị dùng trong ngành may mặc",
"name_en": "Garment machinery",
"min_years": 5,
"max_years": 10,
"useful_life_years": 5,
"within_frame": true
},
"legal": [
"Thông tư 45/2013/TT-BTC (sửa đổi bởi TT 147/2016, TT 28/2017, TT 30/2025)",
"TT 45/2013/TT-BTC Phụ lục 2 mục II (số dư giảm dần có điều chỉnh)",
"Nghị định 320/2025/NĐ-CP Điều 10 khoản 6 (khấu hao không được trừ khi tính thuế TNDN)"
],
"reviewed": "2026-11-11"
}
Use cases
- Generate depreciation schedules in accounting software
- Pick a useful life inside the legal frame
- Find depreciation that is not deductible for CIT
- Plan the tax impact of buying a company car
FAQ
Is TT 45/2013 still valid?
Yes, as amended by TT 147/2016, TT 28/2017 and TT 30/2025. The Ministry of Finance consulted on a replacement in October 2026; it has not been issued.
When does declining balance switch to straight line?
In the year the declining charge is no higher than remaining value ÷ remaining years; from then on the remaining value is spread evenly.
Which assets can use declining balance?
New machinery, equipment and measuring / lab instruments of businesses in fast-changing technology sectors (TT 45/2013 Điều 13).
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.