Acme Citibank Philippines Payments (H2H)
This describes validations / allowed data formats for Acme payments going through Citibank Philippines. 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 Citibank as host-to-host (H2H) files. Create them with Create a Batch Payment.
- Single payments are not supported.
Supported types: PH_PESONET, PH_RTGS, TT, BKTR.
Common Definitions
-
SWIFT Character Set:
- The 26 uppercase Latin letters
A-Z - The 26 lowercase Latin letters
a-z - The 10 digits
0-9 - Forward slash
/ - Hyphen
- - Question mark
? - Colon
: - Left and right parentheses
() - Full stop
. - Comma
, - Single quote
' - Plus sign
+ - Space
- The 26 uppercase Latin letters
-
PESONet Character Set:
- The 26 uppercase Latin letters
A-Z - The 26 lowercase Latin letters
a-z - The 10 digits
0-9 - Full stop
. - Comma
, - Hyphen
- - Ampersand
& - Left and right parentheses
() - Space
- The 26 uppercase Latin letters
-
BIC:
- 8 or 11 character Bank Identifier Code in uppercase, for example
BOPIPHMMXXX.
- 8 or 11 character Bank Identifier Code in uppercase, for example
-
Citi restrictions:
- For SWIFT character set: do not start a field with any of the following characters:
/,-,:
- For SWIFT character set: do not start a field with any of the following characters:
General notes
- A batch holds up to 1,000 payments.
paymentDatemust not be in the past. It can be at most 20 days ahead.amountis in minor units. For example,150000is PHP 1,500.00. See Minor units format.- The maximum amount per payment is PHP 9,999,999,999.99 for
PH_PESONET. - For
PH_RTGS,TTandBKTR, it is 999,999,999 minor units. For PHP, that is PHP 9,999,999.99.
ISO 20022 Migration
Citi address requirements
- Citi is moving to the ISO 20022 (CBPR+) address format. If a receiver address is provided, it must carry a town name and a country.
- In the Philippines, this applies to
PH_RTGSandTT.PH_PESONETandBKTRare not in Citi's scope. - For
PH_RTGS, Citi rejects a payment whose address is missingaddress.cityoraddress.country. - This becomes mandatory in November 2026.
- For
TT, Citi has not confirmed the date it starts rejecting these payments. - Acme already enforces this:
PH_RTGS: the address is optional. If you provide it,address.cityandaddress.countryare mandatory, andaddress.countrymust bePH.TT:address.cityandaddress.countryare always mandatory.
- Acme sends
postalCode,city,stateandcountryas structured fields, andline1andline2as address lines.
Payment Customer Reference
- Use
payments[N].customerReferenceas the unique identifier of your payments. - If
customerReferenceis not provided, Acme generates a 13 character unique alphanumeric reference. - The
customerReferenceis sent to the bank as the end-to-end ID of the payment.
PH_PESONET
Important
- Currency must be PHP only.
- Send the 8 digit BRSTN code of the receiver's bank branch in
receiver.localRoutingIdentifier. receiver.bankNameis mandatory.- Do not send
bankChargeBearerorinstructionForSenderBank. - Acme sends every
PH_PESONETpayment with Citi purpose code21(Standing Instruction Credit). You cannot set the purpose code.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | PESONet | 105 | O |
| payments[N].receiver.name | PESONet | 35 | M |
| payments[N].receiver.bank | BIC | 11 | M |
| payments[N].receiver.bankName | SWIFT | 140 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | 8 digits (BRSTN) Example: 01033001 | 8 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | PH | 2 | O |
Example Request:
{
"type": "PH_PESONET",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "PHP",
"payments": [
{
"amount": 2500000,
"customerReference": "INV2026001",
"paymentDetails": "Payment for invoice 2026001",
"receiver": {
"name": "Juan dela Cruz",
"bank": "BOPIPHMMXXX",
"bankName": "Bank of the Philippine Islands",
"bankAccountNumber": "1234567890",
"localRoutingIdentifier": "01033001"
}
}
]
}PH_RTGS
Important
- Currency must be PHP only.
bankChargeBeareris mandatory.purposeCodeis not supported for this payment type.- Do not send
instructionForSenderBank. - If you provide
receiver.address,address.cityandaddress.countryare mandatory, andaddress.countrymust bePH. See ISO 20022 Migration.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | SENDER or RECEIVER or SHARED | M | |
| payments[N].paymentAdviceEmails[N] | Valid email address Example: ["finance@company.com"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | Conditional: M if address is provided (ISO 20022) |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | PH | 2 | Conditional: M if address is provided (ISO 20022) |
Example Request:
{
"type": "PH_RTGS",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "PHP",
"payments": [
{
"amount": 500000000,
"customerReference": "INV2026002",
"paymentDetails": "Payment for invoice 2026002",
"bankChargeBearer": "SENDER",
"receiver": {
"name": "Example Trading Corporation",
"bank": "BOPIPHMMXXX",
"bankAccountNumber": "1234567890",
"address": {
"line1": "1 Ayala Avenue",
"city": "Makati City",
"country": "PH"
}
}
}
]
}TT
Important
- Currency can be any valid ISO 4217 currency code.
purposeCodeis mandatory. Use a 10 digit code from Citibank Philippines Purpose Codes.receiver.address.cityandreceiver.address.countryare always mandatory. See ISO 20022 Migration.- If
bankChargeBeareris not provided, Acme sendsSHARED.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].purposeCode | Alphanumeric See purpose codes | 10 | M |
| payments[N].bankChargeBearer | SENDER or RECEIVER or SHARED Default to SHARED if not provided. | O | |
| payments[N].paymentAdviceEmails[N] | Valid email address Example: ["finance@company.com"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC | 11 | M |
| payments[N].receiver.intermediaryBank | BIC | 11 | O |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | M (ISO 20022) |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M (ISO 20022) |
Example Request:
{
"type": "TT",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "USD",
"payments": [
{
"amount": 2500000,
"customerReference": "INV2026003",
"paymentDetails": "Payment for invoice 2026003",
"purposeCode": "0420000005",
"bankChargeBearer": "SHARED",
"receiver": {
"name": "Example Supplies Pte Ltd",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "0123456789",
"address": {
"line1": "1 Example Road",
"city": "Singapore",
"postalCode": "123456",
"country": "SG"
}
}
}
]
}BKTR
Important
- Book transfer to another Citibank Philippines account. Do not send
receiver.bank. - Currency can be any valid ISO 4217 currency code.
receiver.bankAccountNumberis up to 10 characters.purposeCodeis optional. If you send it, use a 10 digit code from Citibank Philippines Purpose Codes.- Do not send
bankChargeBearer.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].purposeCode | Alphanumeric See purpose codes | 10 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address Example: ["finance@company.com"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 10 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | PH | 2 | O |
Example Request:
{
"type": "BKTR",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "PHP",
"payments": [
{
"amount": 2500000,
"customerReference": "INV2026004",
"paymentDetails": "Payment for invoice 2026004",
"receiver": {
"name": "Example Trading Corporation",
"bankAccountNumber": "1234567890"
}
}
]
}Bank references
| Sent as | bankReference | bankReferences | Available from |
|---|---|---|---|
| A file | AcctSvcrRef, else ClrSysRef | AcctSvcrRef, ClrSysRef, StsId, as Citi sends them | Citi's status report on the payment |
On your Citi statement, the line shows a different Citi reference. Find the payment by your customerReference.
What the names mean:
AcctSvcrRef: Citi's own reference for the transaction.ClrSysRef: the clearing system's reference.StsId: the id of Citi's status entry.
A rejected payment keeps the references from the report that rejected it.
A completed payment returns:
{
"bankReference": "01720322200000001",
"bankReferences": {
"AcctSvcrRef": "01720322200000001"
}
}