For a webhook to fire, two conditions must be met: your bank account is linked to SePay, and the bank supports the transaction type (money in, money out, or both). The sections below list what each bank can do and how to configure each type.
Two VA types
Official VA: the bank issues you a dedicated VA account number. Customers transfer directly into that number, and the bank and SePay both identify the transaction by that VA number.
Memo VA (TKP): there's no dedicated account number. Customers transfer into your main account with the TKP code in the transfer memo. SePay reconciles by reading the memo to figure out which TKP the transaction belongs to.
| Type | Dedicated VA number? | How transactions are identified |
|---|---|---|
| Official VA | Yes (each VA has its own number) | By the VA account number the customer transferred to |
| Memo VA (TKP) | No | By the transfer memo content |
Both types are configured under the bank account detail page on the Dashboard. TKP (short for "Tài khoản phụ", meaning sub-account) is a memo-based virtual account for banks that don't issue official VA numbers. It's useful when you need to allocate transactions per order or branch. The TKP code can appear anywhere in the transfer memo as long as it matches the configured TKP.
On the webhook side, both types appear in the payload's subAccount field. Your server handles them the same way.
Supported banks
What a bank can do also depends on the account type you pick when linking it: personal, business household or business.
| Bank | Account type | Receives on the main account | Official VA | Money in | Money out |
|---|---|---|---|---|---|
| ACB | Personal, business household, business | Yes | Yes | Yes | Yes |
| BIDV | Personal, business household | No, VA only | Yes | Yes | No |
| BIDV | Business | Yes | Yes | Yes | Yes |
| KienlongBank | Personal, business household, business | No, VA only | Yes | Yes | No |
| MBBank | Personal, business household, business | Yes | Yes | Yes | Yes |
| MSB | Personal, business household, business | No, VA only | Yes | Yes | No |
| OCB | Personal, business household, business | No, VA only | Yes | Yes | No |
| Sacombank | Personal, business household | Yes | Yes | Yes | Yes |
| Shinhan Bank | Business | Yes | Yes | Yes | Yes |
| TPBank | Personal, business household, business | Yes | No | Yes | Yes |
| Vietcombank | Business, business household | No, VA only | Yes | Yes | No |
| VietinBank | Personal, business household | Yes | No | Yes | Yes |
| VietinBank | Business using the MAP identified collection service | No, VA only | Yes | Yes | No |
| VietinBank | Business not using MAP | Yes | Yes | Yes | No |
| VPBank | Personal (VPBank NEO) | Depends on how you link it (see below the table) | Yes | Yes | No |
| VPBank | Business household (VPBank NEO) | Depends on how you link it (see below the table) | Yes | Yes | No |
| VPBank | Business household (VPBank NEOBiz) | Depends on how you link it (see below the table) | Yes | Yes | No |
| VPBank | Business (VPBank NEOBiz) | Yes | No | Yes | Yes |
Accounts marked "No, VA only" do not receive transfers sent straight to the main account number: create at least 1 official VA and have customers pay into the VA number. Accounts that receive on the main account but whose bank issues no official VA (TPBank, VietinBank personal and business household, VPBank business) can still allocate transactions with TKP.
When linking a VPBank personal or business household account, you select Công nghệ tài khoản ảo (VA) (virtual account technology) and can also select Đồng bộ tài khoản chính (chỉ tiền vào) (sync the main account, money in only). With VA only, the account receives money only through official VAs. Adding the main account also picks up transfers sent straight to the main account number, but VPBank will soon stop accepting new links this way.
If your bank isn't in the table, webhooks aren't supported yet. The latest list is at Dashboard → Bank accounts → Add account: once you pick the bank and account type, the screen lists exactly what that type supports.
Link an account to SePay
Each account must be linked before a webhook can use it. Go to Dashboard → Bank accounts → Add account.
Step 1: Pick the bank, choose the account type (personal, business household or business), enter the account number.
Step 2: Connect the API. Enter internet banking credentials or connect via OAuth (depends on the bank). SePay runs a check; once it passes, the account flips to Active.
Step 3: Create VA (if needed). Accounts marked "No, VA only" in the table above need at least 1 VA. Other accounts only need a VA if you want to allocate transactions.
Step 4: Verify. Account status must be Active (green dot). Transfer a small amount, then go to Transactions to confirm SePay received it.
A suspended or disconnected account produces no transactions. A webhook not firing here is not the webhook's fault. Check the account status first.
Select an account for the webhook
In the webhook wizard, pick one of two modes:
All accounts: the webhook receives every transaction from every linked account. New accounts linked later are picked up automatically.
Specific accounts: pick the accounts attached to the webhook. The interface has 2 columns: accounts not yet selected on the left, accounts already added on the right. Click to add, or click ✕ to remove. Expanding a selected account reveals VA configuration.

VA configuration per bank
When you expand a selected account, the interface displays:

Main account checkbox: if enabled, the webhook fires on every transaction in the account, including transfers that don't use a VA. If disabled, the webhook only fires when the transaction matches a VA ticked below.
VA list: tick each VA to track. The webhook fires only when the transaction's subAccount matches a selected VA.
For VA-only accounts (BIDV personal and business household, KienlongBank, MSB, OCB, Vietcombank): the Main account checkbox is auto-locked, and at least 1 VA must be selected. VietinBank business accounts using MAP are also VA-only, but their checkbox is not locked: turning on Main account brings no extra transactions, so just tick the VAs you want to follow.
Within one webhook, Bank A can receive everything while Bank B only listens to VAs. No need for two separate webhooks.
Note when choosing Money out only
Event types All and Money in only have no constraints. Money out only works only for accounts with Money out set to Yes in the supported banks table, and cannot filter by official VA: use TKP if you need to filter by VA.
The UI blocks and warns if you try to save an invalid configuration.
Example configuration
A company has 3 accounts: MBBank, a personal BIDV account, and TPBank. Requirements:
- MBBank: receive every transaction.
- BIDV: only receive VA
ORDER001. - TPBank: ignore entirely.
Steps:
- Selection mode: Specific accounts.
- Add MBBank and BIDV to the selected column. Don't add TPBank.
- Expand MBBank: enable Main account.
- Expand BIDV: Main account auto-locked (a personal BIDV account is VA-only), tick VA
ORDER001.
Result:
| Transaction | Webhook fires? |
|---|---|
| Money into MBBank without VA | Yes |
| Money into MBBank through any VA | Yes |
Money into BIDV through VA ORDER001 | Yes |
Money into BIDV through VA ORDER002 | No |
| Money into TPBank | No (not in the list) |
Next
- Create webhook: 4-step form, filters, test send
- Integrate webhook: payload and valid response
- Webhook not firing?: diagnostic checklist
Account configuration changes apply to the next transaction. Transactions already sent are unaffected.