Acme Standard Chartered Bank Singapore Payments (API)
This describes validations / allowed data formats for Acme payments going
through Standard Chartered Bank (SCB) Singapore (SCBLSG22XXX) over the SCB Open
Banking API. These will be validated by Acme and further validated by the bank.
These rules may be stricter than what the bank requires.
Supported types: FAST, MEPS, BKTR, TT.
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
-
customerReferenceis required for all payment types. It must be unique and must not exceed 16 characters. -
A SWIFT BIC is 8 to 11 characters (uppercase letters and digits).
-
paymentDetailsis sent to the beneficiary as unstructured remittance information across 2 lines of 70 characters. -
receiver.address.cityandreceiver.address.countryare required for all payment types, as enforced by Standard Chartered Bank. Theline1,line2,state, andpostalCodeaddress fields are optional.
ISO 20022 migration: SCB address requirements
- SCB is migrating to the ISO 20022 message standards. The beneficiary address requirements on this page are part of this migration. Refer to ISO 20022 at Standard Chartered for an overview.
- Under the SCB Payment API guide, the beneficiary
address.city(town name) andaddress.countryare mandatory for all payment types. Acme validates this on every payment.
FAST
- 4 characters
purposeCodemust be provided for FAST payments.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| currency | SGD | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| purposeCode | SWIFT | 4 | M |
| receiver.name | Free text | 140 | M |
| receiver.bank | SWIFT BIC | 8–11 | M |
| receiver.bankAccountNumber | Numeric | 20 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| receiver.address.line1 | SWIFT | 70 | O |
| receiver.address.line2 | SWIFT | 70 | O |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
MEPS
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| currency | SGD | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| receiver.name | Free text | 140 | M |
| receiver.bank | SWIFT BIC | 8–11 | M |
| receiver.bankAccountNumber | Numeric | 20 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| receiver.address.line1 | SWIFT | 70 | O |
| receiver.address.line2 | SWIFT | 70 | O |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
BKTR
receiver.bank must not be provided. SCB routes the payment to itself.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| currency | ISO 4217 currency code | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| receiver.name | Free text | 140 | M |
| receiver.bankAccountNumber | Numeric | 16 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| receiver.address.line1 | SWIFT | 70 | O |
| receiver.address.line2 | SWIFT | 70 | O |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
TT
receiver.bank is required.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| currency | ISO 4217 currency code | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | SENDER or RECEIVER or SHARED | O | |
| receiver.name | Free text | 140 | M |
| receiver.bank | SWIFT BIC | 8–11 | M |
| receiver.bankAccountNumber | Free text | M | |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| receiver.address.line1 | SWIFT | 70 | O |
| receiver.address.line2 | SWIFT | 70 | O |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
Bank references
bankReference is SCB's clearing reference, clearingSystemReference. SCB usually sends it when it reports the payment as processed. bankReferences lists every id SCB sent, keyed by SCB's field name.
Other keys in bankReferences:
- From SCB's answer to the request:
paymentIdentifier,internalTrackingId,clientReferenceId(yourcustomerReference, echoed back). - From SCB's status updates, when sent:
endToEndId,clientIdentifier,instructionIdentifier,paymentContainerId,originalTransactionId,groupId.
Good to know:
- If SCB completes the payment immediately,
bankReferencecan staynulluntil a later SCB update brings it. No webhook is sent for that update, so fetch the payment to see it. - A rejected payment keeps the ids SCB sent before rejecting it.
A completed TT payment returns:
{
"bankReference": "6OT2610051234567",
"bankReferences": {
"clearingSystemReference": "6OT2610051234567",
"paymentIdentifier": "2610051234567890",
"internalTrackingId": "3f2b8c1e-7d4a-4e9b-9c6f-1a2b3c4d5e6f",
"clientReferenceId": "ET12345678-USD-0",
"endToEndId": "E2E2610051234",
"clientIdentifier": "CLI2610051234",
"instructionIdentifier": "INS2610051234",
"paymentContainerId": "PC2610051234",
"originalTransactionId": "OT2610051234",
"groupId": "GRP2610051234"
}
}