Acme UOB Singapore Payments
This describes validations / allowed data formats for Acme payments going through UOB Singapore. These will be validated by Acme and further validated by the bank. These rules may be stricter than what the bank requires.
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
General notes
The beneficiary country (receiver.address.country) is mandatory for all payment types, and must be a valid, uppercase 2-letter ISO country code (ISO 3166 Alpha-2) e.g. SG, MY, AU, US, etc.
FAST
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 35 | M |
| paymentDetails | SWIFT | 140 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
| receiver.address.country | Uppercase ISO country code | 2 | M |
PAYNOW
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 35 | M |
| paymentDetails | SWIFT | 140 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.proxyType | MOBILE or UEN or NRIC or VPA | M | |
| receiver.proxyValue for MOBILE | + followed by 7 to 15 digits | 16 | M |
| receiver.proxyValue for UEN | 9 to 13 uppercase alphanumeric characters | 13 | M |
| receiver.proxyValue for NRIC | 9 uppercase alphanumeric characters | 9 | M |
| receiver.proxyValue for VPA | Mobile followed by # and 4 alphanumeric characters or UEN followed by UEN followed by # and 4 alphanumeric characters | 21 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
| receiver.address.country | Uppercase ISO country code | 2 | M |
GIRO
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 35 | M |
| paymentDetails | SWIFT | 140 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
| receiver.address.country | Uppercase ISO country code | 2 | M |
ACT
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address.country | Uppercase ISO country code | 2 | M |
MEPS
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 20 | M |
| instructionForSenderBank | SWIFT | 140 | O |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
| receiver.address.country | Uppercase ISO country code | 2 | M |
TT
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 20 | M |
| instructionForSenderBank | SWIFT | 140 | O |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.localRoutingIdentifier | Alphanumeric | 35 | O |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | M |
| receiver.address.country | Uppercase ISO country code | 2 | M |
TT - SWIFT ISO20022 (CBPR+) Payment data changes
Important
- Only applicable to organizations onboarded to UOB's CBPR+ update.
- The following are breaking changes for
TTclients migrating to CBPR+.receiver.address.line1is now required.receiver.address.cityis now required. City is sent as the structured town name, so it does not count against the 3 x 35 address-line limit.
receiver.namemax length increases from 35 to 140. This is not a breaking change.outgoingPurposeCodeis new. It carries the UOB Creditor Purpose of Payment (POP) code and applies toTTonly.- It is mandatory when the beneficiary bank is in China (
CN), Malaysia (MY), Indonesia (ID) or Thailand (TH). UOB rejects the payment if it is missing. - For every other beneficiary country it is optional.
- Acme validates the format only (
TTonly, alphanumeric, max 10 characters). Acme does not validate the code value.
- It is mandatory when the beneficiary bank is in China (
- See Acme UOB Singapore Creditor Purpose of Payment Codes for the code list per beneficiary country.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| customerReference | SWIFT | 20 | M |
| instructionForSenderBank | SWIFT | 140 | O |
| outgoingPurposeCode | Alphanumeric (UOB Creditor POP code) Example: GDDS, SALA, GOD | 10 | Conditional (TT only). M for beneficiary banks in CN, MY, ID or TH, otherwise O |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| receiver.name | SWIFT | 140 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.localRoutingIdentifier | Alphanumeric | 35 | O |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | M |
| receiver.address.line1 | SWIFT | 35 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | Uppercase ISO country code | 2 | M |
Bank references
bankReference is UOB's reference for the payment. bankReferences lists every reference UOB sent, keyed by UOB's field name.
| Sent as | bankReference | Available from |
|---|---|---|
FAST, PAYNOW through UOB's API | UOB's bankReference | UOB confirms the payment |
| A file | null: UOB's status files carry no reference for the payment today |
Other keys in bankReferences:
transactionReference: yourcustomerReference, echoed back by UOB's API.ourReference: UOB's reference for the debit on your account, when Acme confirms the payment from UOB's debit notification or transaction search instead.bankReferenceis then set to it.
Good to know:
- A transaction search result without
ourReferenceleavesbankReferencenull. - For
PAYNOWto an account outside UOB, thebankReferencein UOB's API answer is longer: UOB's 19-character reference, 3 spaces, and a 12-character PayNow lookup reference. Acme keeps it as UOB returns it. A payment confirmed from the debit instead gets the shorterourReference. - If a UOB status file does carry references, they're kept:
AcctSvcrRef(UOB's own reference for the transaction),ClrSysRef(the clearing system's reference) andStsId(the id of UOB's status entry).bankReferenceis thenAcctSvcrRef, elseClrSysRef.
A completed PAYNOW payment sent through the API returns:
{
"bankReference": "API2026100500012345",
"bankReferences": {
"bankReference": "API2026100500012345",
"transactionReference": "PYMT-2026-0001"
}
}