Vietnam financial statements (TT 99) API

Build the B01-DN statement of financial position and the B02-DN income statement (TT 99/2025/TT-BTC) from a trial balance, with checks and XLSX export.

POSThttps://apibox.io.vn/v1/vn-financial-report

Send the trial balance (bảng cân đối số phát sinh) as JSON rows, CSV or an XLSX file: account number, opening debit / credit, period debit / credit turnover and closing debit / credit (column names in English or Vietnamese such as "Nợ cuối kỳ" are recognised). The API maps each balance to the line codes of Mẫu B01-DN under Thông tư 99/2025/TT-BTC (in force for financial years from 1 January 2026, replacing TT 200/2014): debit balances to asset lines, credit balances to liabilities, contra accounts (provisions, depreciation, treasury shares) in brackets, signed equity balances, receivables and payables on both sides shown separately (131 credit → advances from customers 312, 331 debit → prepayments 132). Rows tagged term=long go to the long-term lines; the most specific account wins and parent rows are skipped when their sub-accounts are present.

B02-DN uses the closing turnovers to account 911 (revenue 511, deductions 521, cost of sales 632, financial income and expenses, selling and admin costs, other income and expenses, current and deferred CIT); lines that need detail ledgers (21, 24, 70, 71) come from overrides. Checks: the trial balance is balanced, total assets 280 = total liabilities and equity 440 (opening and closing), profit after tax = change in 4212. Unclosed income-statement balances are added to line 420b with a warning, and unmapped accounts are listed. format=xlsx returns a workbook with the B01, B02, mapping and checks sheets.

Parameters

NameInTypeRequiredDefault
rowsbodyarraynoTrial balance: [{"account":"111","opening_debit":0,"debit":0,"credit":0,"closing_debit":200000000,"closing_credit":0,"term":"short"}]. Or file (XLSX/CSV) / csv text.
filebodyfilenoXLSX or CSV trial balance (first sheet, header row).
overridesbodyobjectnoB02 lines from detail ledgers, e.g. {"24": 12000000, "21": 0}.
formatbody|querystringnojsonjson or xlsx.
companybodystringnoCompany name (echoed).
period_endbodystringnoReporting date (echoed).

Example

curl -X POST "https://apibox.io.vn/v1/vn-financial-report" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company":"Công ty TNHH Demo","period_end":"2026-12-31","rows":[{"account":"111","debit":200000000,"closing_debit":200000000},{"account":"131","debit":150000000,"credit":20000000,"closing_debit":150000000,"closing_credit":20000000},{"account":"156","debit":250000000,"closing_debit":250000000},{"account":"331","credit":180000000,"closing_credit":180000000},{"account":"4111","credit":325000000,"closing_credit":325000000},{"account":"4212","credit":75000000,"closing_credit":75000000},{"account":"511","debit":700000000,"credit":700000000},{"account":"632","debit":500000000,"credit":500000000},{"account":"642","debit":101000000,"credit":101000000},{"account":"8211","debit":24000000,"credit":24000000},{"account":"911","debit":700000000,"credit":700000000}]}'

Response

{
  "company": "Công ty TNHH Demo",
  "period_end": "2026-12-31",
  "currency": "VND",
  "standard": "Thông tư 99/2025/TT-BTC, Phụ lục IV (Mẫu B01-DN, B02-DN; doanh nghiệp đáp ứng giả định hoạt động liên tục)",
  "valid": true,
  "failed_checks": 0,
  "checks": [
    {
      "check": "closing debit = closing credit",
      "ok": true,
      "debit": 600000000,
      "credit": 600000000
    },
    {
      "check": "total assets (280) = total liabilities and equity (440), closing",
      "ok": true,
      "assets": 600000000,
      "liabilities_equity": 600000000
    },
    {
      "check": "profit after tax (B02 line 60) = change in account 4212 (if no distributions this period)",
      "ok": true,
      "b02_60": 75000000,
      "change_4212": 75000000,
      "informational": true
    }
  ],
  "warnings": [
    "131 has a credit balance: shown separately (line 312, advances from customers), not netted. The balances must be the sum per customer / supplier, not the net of the account."
  ],
  "b01": [
    {
      "code": "100",
      "name_vi": "A - TÀI SẢN NGẮN HẠN",
      "name_en": "A - Current assets",
      "closing": 600000000,
      "opening": 0,
      "formula": "110 + 120 + 130 + 140 + 150 + 160"
    },
    {
      "code": "111",
      "name_vi": "1. Tiền",
      "name_en": "Cash",
      "closing": 200000000,
      "opening": 0
    },
    {
      "code": "131",
      "name_vi": "1. Phải thu ngắn hạn của khách hàng",
      "name_en": "Trade receivables, short term",
      "closing": 150000000,
      "opening": 0
    },
    {
      "code": "141",
      "name_vi": "1. Hàng tồn kho",
      "name_en": "Inventories",
      "closing": 250000000,
      "opening": 0
    },
    {
      "code": "280",
      "name_vi": "TỔNG CỘNG TÀI SẢN (280 = 100 + 200)",
      "name_en": "TOTAL ASSETS",
      "closing": 600000000,
      "opening": 0,
      "formula": "100 + 200"
    },
    {
      "code": "311",
      "name_vi": "1. Phải trả người bán ngắn hạn",
      "name_en": "Trade payables, short term",
      "closing": 180000000,
      "opening": 0
    },
    {
      "code": "312",
      "name_vi": "2. Người mua trả tiền trước ngắn hạn",
      "name_en": "Advances from customers, short term",
      "closing": 20000000,
      "opening": 0
    },
    {
      "code": "411",
      "name_vi": "1. Vốn góp của chủ sở hữu",
      "name_en": "Owners' contributed capital",
      "closing": 325000000,
      "opening": 0
    },
    {
      "code": "420b",
      "name_vi": "- LNST chưa phân phối kỳ này",
      "name_en": "of this period",
      "closing": 75000000,
      "opening": 0
    },
    {
      "code": "440",
      "name_vi": "TỔNG CỘNG NGUỒN VỐN (440 = 300 + 400)",
      "name_en": "TOTAL LIABILITIES AND EQUITY",
      "closing": 600000000,
      "opening": 0,
      "formula": "300 + 400"
    }
  ],
  "b02": [
    {
      "code": "01",
      "name_vi": "1. Doanh thu bán hàng và cung cấp dịch vụ",
      "amount": 700000000,
      "source": "Phát sinh Có TK 511"
    },
    {
      "code": "11",
      "name_vi": "4. Giá vốn hàng bán",
      "amount": 500000000,
      "source": "Phát sinh Có TK 632 đối ứng Nợ TK 911"
    },
    {
      "code": "26",
      "name_vi": "10. Chi phí quản lý doanh nghiệp",
      "amount": 101000000,
      "source": "Phát sinh Có TK 642 đối ứng Nợ TK 911"
    },
    {
      "code": "50",
      "name_vi": "15. Tổng lợi nhuận kế toán trước thuế (50 = 30 + 40)",
      "amount": 99000000,
      "source": "50 = 30 + 40"
    },
    {
      "code": "51",
      "name_vi": "16. Chi phí thuế TNDN hiện hành",
      "amount": 24000000,
      "source": "Phát sinh Có TK 8211 đối ứng Nợ TK 911"
    },
    {
      "code": "60",
      "name_vi": "18. Lợi nhuận sau thuế thu nhập doanh nghiệp (60 = 50 - 51 - 52)",
      "amount": 75000000,
      "source": "60 = 50 - (51 + 52)"
    }
  ],
  "unmapped": [],
  "reviewed": "2026-11-11",
  "disclaimer": "Draft statements from the trial balance you sent; review by an accountant is required before filing."
}

Use cases

  • Draft year-end statements from any bookkeeping export
  • Switch a small accounting app from TT 200 to TT 99 forms
  • Check a client trial balance before audit
  • Produce monthly management balance sheets

FAQ

Does TT 99/2025 replace TT 200/2014?

Yes, for financial years starting on or after 1 January 2026. The B01-DN gained biological-asset lines (150, 230) and other current assets moved to code 160; the line codes here follow the TT 99 template.

Why are 131 and 331 not netted?

TT 99 requires the sum of debit balances per customer as receivables and the sum of credit balances as advances. Send both closing_debit and closing_credit of the account (summed per counterparty).

Are small-enterprise forms (TT 133) supported?

Not yet: only B01-DN and B02-DN of TT 99 for going-concern enterprises. The cash-flow statement and notes are not produced.

Related APIs

Start with 1,000 free requests every month. Get free API key →