Acme HSBC Bank Vietnam Payments (H2H)

This describes validations / allowed data formats for Acme payments going through HSBC Bank Vietnam. These will be validated by Acme and further validated by the bank. These rules may be stricter than what the bank requires.

Channel: H2H

  • Batch payments, sent to HSBC as host-to-host (H2H) files. Create them with Create a Batch Payment.
  • Single payments are not supported.

Supported types: VN_NAPAS, VN_RTGS, VN_ACH, TT. Tax payments are sent as VN_RTGS.

Common Definitions

  • ASCII Character Set:

    • Printable ASCII characters, from space to tilde ~.
    • This includes A-Z, a-z, 0-9, space and the punctuation characters !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
    • Vietnamese characters with diacritics, such as ă, ê or ư, are not allowed. Write Nguyen Van An, not Nguyễn Văn An.
  • BIC:

    • 8 or 11 character Bank Identifier Code in uppercase, for example BFTVVNVXXXX.
    • Validated with [A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})? (as specified in ISO20022 BICFIIdentifier).

General notes

  • A batch holds up to 1,000 payments.
  • amount is in minor units. VND has no minor unit, so 5000000 is VND 5,000,000. See Minor units format.
  • The maximum amount per payment is 999,999,999 minor units. For VND, that is VND 999,999,999.
  • receiver.address.country must be an uppercase 2 letter ISO 3166 country code (e.g. VN for Vietnam).
  • The receiver address lines, city, state, postalCode and country must fit in 3 lines of 35 characters together.
  • instructionForSenderBank is not supported for HSBC Vietnam.
  • paymentSetCode is a batch level field. It is optional.
  • It is a 3 character code configured on HSBCnet to group payment instructions under an access or entitlement group.
  • The value must match a payment set code configured in HSBCnet. Please contact the bank for the code to use.

ISO 20022 address

  • HSBC Vietnam payments use the ISO 20022 structured address.
  • Acme sends address.line1 as the street name, and city, state, postalCode and country as their own fields.
  • For VN_NAPAS, VN_RTGS and VN_ACH, Acme always sends the receiver's country as VN.
  • For TT, receiver.address.country is mandatory.

Payment Customer Reference

  • Use payments[N].customerReference as the unique identifier of your payments.
  • If customerReference is not provided, Acme generates a 13 character unique alphanumeric reference.
  • For VN_RTGS and TT, HSBC uses the first 16 characters of customerReference as the end-to-end ID of the payment. Keep it to 16 characters so it stays unique.
  • For VN_ACH, purposeOfPayment is sent as the end-to-end ID of the payment.

VN_NAPAS

Important

  • Real time domestic transfer through NAPAS 247.
  • Currency must be VND only.
  • The maximum amount is VND 499,999,999 per payment.
  • Send the receiver bank's 6 digit NAPAS BIN in receiver.localRoutingIdentifier. Do not send receiver.bank.
  • paymentDetails is limited to 105 characters.
  • If bankChargeBearer is not provided, Acme sends no charge bearer and HSBC applies its default.
fieldpattern / charsetmax lengthmandatory/optional
paymentDateYYYY-MM-DDM
paymentSetCodeASCII
Example: E01
3O
payments[N].customerReferenceASCII35O
payments[N].paymentDetailsASCII105O
payments[N].bankChargeBearerSENDER or RECEIVER or SHAREDO
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
2048 per email (max 6 emails)O
payments[N].receiver.nameASCII140M
payments[N].receiver.bankAccountNumberAlphanumeric34M
payments[N].receiver.localRoutingIdentifier6 digits (NAPAS BIN)
Example: 970436
6M
payments[N].receiver.address.line1ASCII35O
payments[N].receiver.address.cityASCII35O
payments[N].receiver.address.stateASCII35O
payments[N].receiver.address.postalCodeASCII35O
payments[N].receiver.address.countryISO 3166-1 alpha-22O

Example Request:

{
  "type": "VN_NAPAS",
  "paymentDate": "2026-11-16",
  "senderAccountId": "intacc_0H3BQNTQGBW2W",
  "currency": "VND",
  "payments": [
    {
      "amount": 5000000,
      "customerReference": "INV2026001",
      "paymentDetails": "Payment for invoice 2026001",
      "receiver": {
        "name": "Nguyen Van An",
        "bankAccountNumber": "0123456789",
        "localRoutingIdentifier": "970436"
      }
    }
  ]
}

VN_RTGS

Important

  • High value domestic transfer through the interbank payment system (IBPS).
  • Currency must be VND only.
  • Send the receiver bank's BIC in receiver.bank and its 8 digit local bank code in receiver.localRoutingIdentifier.
  • Acme sends the first 8 characters of receiver.bank (BIC8).
  • If bankChargeBearer is not provided, Acme sends SHARED.
  • For a tax payment, add taxPayment. See Tax payment.
fieldpattern / charsetmax lengthmandatory/optional
paymentDateYYYY-MM-DDM
paymentSetCodeASCII
Example: E01
3O
payments[N].customerReferenceASCII35O
payments[N].paymentDetailsASCII140O
payments[N].bankChargeBearerSENDER or RECEIVER or SHARED
Default to SHARED if not provided.
O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
2048 per email (max 6 emails)O
payments[N].receiver.nameASCII140M
payments[N].receiver.bankBIC11M (see Tax payment)
payments[N].receiver.bankAccountNumberAlphanumeric34M
payments[N].receiver.localRoutingIdentifier8 digits (local bank code)
Example: 01203001
8M (see Tax payment)
payments[N].receiver.address.line1ASCII35O
payments[N].receiver.address.cityASCII35O
payments[N].receiver.address.stateASCII35O
payments[N].receiver.address.postalCodeASCII35O
payments[N].receiver.address.countryISO 3166-1 alpha-22O

Example Request:

{
  "type": "VN_RTGS",
  "paymentDate": "2026-11-16",
  "senderAccountId": "intacc_0H3BQNTQGBW2W",
  "currency": "VND",
  "payments": [
    {
      "amount": 750000000,
      "customerReference": "INV2026002",
      "paymentDetails": "Payment for invoice 2026002",
      "bankChargeBearer": "SHARED",
      "receiver": {
        "name": "Cong Ty TNHH Example",
        "bank": "BFTVVNVXXXX",
        "bankAccountNumber": "0123456789",
        "localRoutingIdentifier": "01203001"
      }
    }
  ]
}

Tax payment

Important

  • A tax payment is a VN_RTGS payment with taxPayment. It is only supported for VN_RTGS.
  • Register your debit account and tax code with HSBC for its Electronic Tax Payment Service before you send a tax payment.
  • HSBC checks each tax payment against the tax authority's records. Make the tax item amounts add up to the payment amount.
  • Acme treats the payment as a tax payment only when taxPayment.localTaxType is provided.
  • Acme builds the tax narrative for HSBC from the taxPayment fields. paymentDetails is not sent for a tax payment.
  • For a monthly, quarterly or K period, Acme takes the year from paymentDate.
  • For example, a Dec period paid on 2027-01-10 is reported as December 2027.
  • Use a YYYY period to name the year yourself.
  • For a tax payment, send both receiver.bank and receiver.localRoutingIdentifier, or leave both out.
  • If you leave both out, Acme sends receiver.name as the receiving bank's name.
fieldpattern / charsetmax lengthmandatory/optional
payments[N].taxPayment.localTaxType01 or 02 or 03 or 042M
payments[N].taxPayment.taxCodeTaxpayer's tax code (MST)10 to 14M
payments[N].taxPayment.collectingAuthorityCodeTax collecting authority code (CQT)M
payments[N].taxPayment.stateTreasuryCodeState treasury code (KB)M
payments[N].taxPayment.onBehalfOfTaxPayerNameName of the taxpayer, when you pay on their behalfO
payments[N].taxPayment.taxItems[N].taxPeriodJan to Dec, Q1 to Q4, K1 to K9, or a year YYYY (case sensitive)M
payments[N].taxPayment.taxItems[N].chapterCodeChapter code (C)M
payments[N].taxPayment.taxItems[N].subItemCodeSub-item code (TM)M
payments[N].taxPayment.taxItems[N].amountInteger amount in VND, 1 to 999,999,999M
  • taxItems must have at least one item.

What the tax fields mean (source: HSBC Input Guide for Tax and Customs):

  • localTaxType:
    • 01: taxes managed by the General Department of Taxation, such as corporate income tax, personal income tax and VAT.
    • 02: fees and charges of ministries.
    • 03: taxes and fees managed by other departments, such as administrative fines.
    • 04: payments managed by the General Department of Customs.
  • taxCode: the taxpayer's tax code (MST), including any branch suffix, for example 0101234567-001.
  • collectingAuthorityCode: the code of the tax office that collects the payment (CQT).
  • stateTreasuryCode: the code of the state treasury that receives the payment (KB).
  • chapterCode and subItemCode: the budget chapter (C) and sub-item (TM) of the tax.
  • taxPeriod: Acme sends it to HSBC as follows.
taxPeriodsent asmeaning
Jan00/01/<year>monthly
Q100/Q1/<year>quarterly
K300/K3/<year>by period
202600/CN/2026yearly

Example Request:

{
  "type": "VN_RTGS",
  "paymentDate": "2026-11-16",
  "senderAccountId": "intacc_0H3BQNTQGBW2W",
  "currency": "VND",
  "payments": [
    {
      "amount": 15000000,
      "customerReference": "TAX2026001",
      "receiver": {
        "name": "Kho bac Nha nuoc Example",
        "bankAccountNumber": "7111123456789"
      },
      "taxPayment": {
        "localTaxType": "01",
        "taxCode": "0101234567",
        "collectingAuthorityCode": "1054321",
        "stateTreasuryCode": "0011",
        "taxItems": [
          {
            "taxPeriod": "Oct",
            "chapterCode": "754",
            "subItemCode": "1701",
            "amount": 15000000
          }
        ]
      }
    }
  ]
}

VN_ACH

Important

  • Low value domestic batch transfer.
  • Currency must be VND only.
  • purposeOfPayment is mandatory. Acme sends it as the end-to-end ID of the payment.
  • Send the receiver bank's BIC in receiver.bank and its 8 digit local bank code in receiver.localRoutingIdentifier.
  • Acme sends the first 8 characters of receiver.bank (BIC8).
  • If bankChargeBearer is not provided, Acme sends SENDER.
fieldpattern / charsetmax lengthmandatory/optional
paymentDateYYYY-MM-DDM
paymentSetCodeASCII
Example: E01
3O
payments[N].customerReferenceASCII35O
payments[N].purposeOfPaymentASCII35M
payments[N].paymentDetailsASCII140O
payments[N].bankChargeBearerSENDER or RECEIVER or SHARED
Default to SENDER if not provided.
O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
2048 per email (max 6 emails)O
payments[N].receiver.nameASCII140M
payments[N].receiver.bankBIC11M
payments[N].receiver.bankAccountNumberAlphanumeric34M
payments[N].receiver.localRoutingIdentifier8 digits (local bank code)
Example: 01203001
8M
payments[N].receiver.address.line1ASCII35O
payments[N].receiver.address.cityASCII35O
payments[N].receiver.address.stateASCII35O
payments[N].receiver.address.postalCodeASCII35O
payments[N].receiver.address.countryISO 3166-1 alpha-22O

Example Request:

{
  "type": "VN_ACH",
  "paymentDate": "2026-11-16",
  "senderAccountId": "intacc_0H3BQNTQGBW2W",
  "currency": "VND",
  "payments": [
    {
      "amount": 12000000,
      "customerReference": "PAY2026003",
      "purposeOfPayment": "SALARY OCT 2026 001",
      "paymentDetails": "Salary October 2026",
      "receiver": {
        "name": "Nguyen Van An",
        "bank": "BFTVVNVXXXX",
        "bankAccountNumber": "0123456789",
        "localRoutingIdentifier": "01203001"
      }
    }
  ]
}

TT

Important

  • Currency must be one of: AED, AUD, BHD, BND, CAD, CHF, DKK, EGP, EUR, GBP, HKD, HUF, IDR, INR, JPY, KHR, KRW, KWD, LKR, MUR, MYR, NOK, NPR, NZD, PHP, PLN, QAR, SAR, SEK, SGD, THB, TWD, USD, VND, ZAR.
  • receiver.address.country is mandatory.
  • If bankChargeBearer is not provided, Acme sends SHARED.
fieldpattern / charsetmax lengthmandatory/optional
paymentDateYYYY-MM-DDM
paymentSetCodeASCII
Example: E01
3O
payments[N].customerReferenceASCII35O
payments[N].paymentDetailsASCII140O
payments[N].bankChargeBearerSENDER or RECEIVER or SHARED
Default to SHARED if not provided.
O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
2048 per email (max 6 emails)O
payments[N].receiver.nameASCII140M
payments[N].receiver.bankBIC11M
payments[N].receiver.bankAccountNumberAlphanumeric34M
payments[N].receiver.address.line1ASCII35O
payments[N].receiver.address.cityASCII35O
payments[N].receiver.address.stateASCII35O
payments[N].receiver.address.postalCodeASCII35O
payments[N].receiver.address.countryISO 3166-1 alpha-22M

Example Request:

{
  "type": "TT",
  "paymentDate": "2026-11-16",
  "senderAccountId": "intacc_0H3BQNTQGBW2W",
  "currency": "USD",
  "payments": [
    {
      "amount": 2500000,
      "customerReference": "INV2026004",
      "paymentDetails": "Payment for invoice 2026004",
      "bankChargeBearer": "SHARED",
      "receiver": {
        "name": "Example Supplies Pte Ltd",
        "bank": "DBSSSGSGXXX",
        "bankAccountNumber": "0123456789",
        "address": {
          "line1": "1 Example Road",
          "city": "Singapore",
          "postalCode": "123456",
          "country": "SG"
        }
      }
    }
  ]
}

Bank references

bankReference is usually null for HSBC Vietnam payments: HSBC sends no payment reference to use as bankReference. bankReferences has StsId, HSBC's id for the transaction, from HSBC's status file on the payment.

Good to know:

  • If an HSBC status file does carry AcctSvcrRef (HSBC's own reference for the transaction) or ClrSysRef (the clearing system's reference), Acme keeps it, and bankReference is set to AcctSvcrRef, else ClrSysRef.
  • Until HSBC's first status file on the payment, bankReferences is {}.

A completed payment returns:

{
  "bankReference": null,
  "bankReferences": {
    "StsId": "I175000003940001"
  }
}

On this page