Parse Vietnamese Bank SMS & Balance Notifications Online

Parse balance-change SMS and app notifications of Vietnamese banks: amount +/−, balance, time, masked account, transfer content and your order code.

Free tool: 20 requests per minute.

Result

Press “Run” to see the result.

Send the text of a "biến động số dư" SMS, push or e-mail notification from a Vietnamese bank (Vietcombank, VietinBank, BIDV, Agribank, Techcombank, MB, ACB, VPBank, TPBank, Sacombank…) and get the bank, direction (in / out), amount, balance after the transaction, time (ISO, Vietnam time), the account masked to its last 4 digits, the transfer content (nội dung chuyển khoản) as written and normalised (upper case, no accents, like banks send it) and the bank reference (FT…, Ref). The parser works on keywords and number formats rather than one fixed template per bank, so unknown or changed templates still give partial results with a confidence and warnings.

Extract your order code from the content with prefix (e.g. DH finds DH1234, "DH 1234", "DH-1234") or a pattern (regular expression, up to 100 characters). Send orders ([{"code": "DH1234", "amount": 500000}]) to match the payment: by code first, then by a unique amount, with status matched / underpaid / overpaid and the difference. Batch up to 100 messages with messages; the unmatched orders are listed.

This is the core of a self-hosted "auto-confirm bank transfer" flow (SMS forwarded from an Android phone, a mail hook, a bank notification webhook). Nothing is stored or logged; the account number is masked in the answer.

Use this in your code

curl -X POST "https://apibox.io.vn/v1/vn-bank-notify" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"MBBank: TK 07xxx123|GD: +350,000VND 10/11/26 09:15 |SD: 2,350,000VND|ND: DH777 chuyen khoan","prefix":"DH"}'

API documentation → Get a free API key

FAQ

Which banks are supported?

The parser reads the common keywords (TK, GD, PS, SD, ND, Ref…) used by all major Vietnamese banks, and recognises the bank from its name in the text or from the bank parameter. Templates that change still parse partially, with warnings.

Is my data stored?

No. Messages are parsed in memory for the request only, and the account number is returned masked (last 4 digits).

How are orders matched?

By the order code found in the content (separators and accents ignored), otherwise by a unique expected amount. The status tells whether the amount is exact, too low or too high.