# Acme OCBC Bank Singapore Payments (H2H) (/guides/ocbc-sg-payments)



This describes validations / allowed data formats for Acme payments going
through OCBC Bank 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 [#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 <code style="{whiteSpace: 'pre'}"> </code>

* BIC11:
  * 11-character Bank Identifier Code

## General notes [#general-notes]

* The beneficiary country (`receiver.address.country`) must be an uppercase 2-letter ISO 3166 country code (e.g. `SG` for Singapore).
* The format for BIC (used in `receiver.bank` and `receiver.intermediaryBank`) is strictly validated using `[A-Z]{6}[A-Z2-9][A-NP-Z0-9]([A-Z0-9]{3})?`
  (as specified in [ISO20022 BICFIIdentifier](https://www.iso20022.org/standardsrepository/type/BICFIIdentifier)).

### Currency [#currency]

* ACT, MEPS, FAST, GIRO, PAYNOW (FAST), and PAYNOW\_GIRO payments must be in `SGD`.

### Payment date [#payment-date]

* For GIRO and PAYNOW\_GIRO, the `paymentDate` must be at least one business day after today (Asia/Singapore time).

### Amount [#amount]

* FAST and PAYNOW (FAST) payments must not be more than SGD 200,000 in amount.

## FAST / GIRO [#fast--giro]

| field                      | pattern / charset | max length   | mandatory/optional |
| -------------------------- | ----------------- | ------------ | ------------------ |
| customerReference          | SWIFT             | 16           | M                  |
| paymentDetails             | SWIFT             | 140          | O                  |
| receiver.name              | SWIFT             | 140          | M                  |
| receiver.bank              | BIC11             | 11           | M                  |
| receiver.bankAccountNumber | Alphanumeric      | 34           | M                  |
| receiver.address           | SWIFT             | 35 chars x 3 | O                  |

## PAYNOW (FAST) [#paynow-fast]

| field                                | pattern / charset                                                                             | max length   | mandatory/optional |
| ------------------------------------ | --------------------------------------------------------------------------------------------- | ------------ | ------------------ |
| customerReference                    | SWIFT                                                                                         | 16           | M                  |
| paymentDetails                       | SWIFT                                                                                         | 140          | O                  |
| receiver.name                        | SWIFT                                                                                         | 140          | M                  |
| receiver.proxyType                   | `MOBILE` or `UEN` or `NRIC` or `VPA`                                                          |              | M                  |
| receiver.proxyValue <br />for MOBILE | `+` followed by 1 to 15 digits                                                                | 16           | M                  |
| receiver.proxyValue <br />for UEN    | 1 to 35 digits and uppercase letters `A`-`Z`                                                  | 35           | M                  |
| receiver.proxyValue <br />for NRIC   | First letter `S`, `T`, `F`, `G`, or `M`, followed by 7 digits, then an uppercase check letter | 9            | M                  |
| receiver.proxyValue <br />for VPA    | 1 to 21 characters from `+`, `#`, digits, and uppercase letters `A`-`Z`                       | 21           | M                  |
| receiver.address                     | SWIFT                                                                                         | 35 chars x 3 | O                  |

## PAYNOW\_GIRO [#paynow_giro]

`VPA` is not a valid `receiver.proxyType` for PAYNOW\_GIRO.

| field                                | pattern / charset                                                                             | max length   | mandatory/optional |
| ------------------------------------ | --------------------------------------------------------------------------------------------- | ------------ | ------------------ |
| customerReference                    | SWIFT                                                                                         | 16           | M                  |
| paymentDetails                       | SWIFT                                                                                         | 140          | O                  |
| receiver.name                        | SWIFT                                                                                         | 140          | M                  |
| receiver.proxyType                   | `MOBILE` or `UEN` or `NRIC`                                                                   |              | M                  |
| receiver.proxyValue <br />for MOBILE | `+` followed by 1 to 15 digits                                                                | 16           | M                  |
| receiver.proxyValue <br />for UEN    | 1 to 35 digits and uppercase letters `A`-`Z`                                                  | 35           | M                  |
| receiver.proxyValue <br />for NRIC   | First letter `S`, `T`, `F`, `G`, or `M`, followed by 7 digits, then an uppercase check letter | 9            | M                  |
| receiver.address                     | SWIFT                                                                                         | 35 chars x 3 | O                  |

## ACT [#act]

Also known as IFT (Internal Funds Transfer) or Book Transfer.

The `receiver.bank` is not required because it's a transfer within the same bank (OCBC).

| 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           | SWIFT             | 35 chars x 3 | O                  |

## MEPS [#meps]

| field                      | pattern / charset                  | max length   | mandatory/optional |
| -------------------------- | ---------------------------------- | ------------ | ------------------ |
| customerReference          | SWIFT                              | 16           | M                  |
| paymentDetails             | SWIFT                              | 140          | O                  |
| bankChargeBearer           | `SENDER` or `RECEIVER` or `SHARED` |              | O                  |
| receiver.name              | SWIFT                              | 35           | M                  |
| receiver.bank              | BIC11                              | 11           | M                  |
| receiver.intermediaryBank  | BIC11                              | 11           | O                  |
| receiver.bankAccountNumber | Alphanumeric                       | 34           | M                  |
| receiver.address           | SWIFT                              | 35 chars x 3 | O                  |

## TT [#tt]

| field                           | pattern / charset                  | max length   | mandatory/optional |
| ------------------------------- | ---------------------------------- | ------------ | ------------------ |
| customerReference               | SWIFT                              | 16           | M                  |
| paymentDetails                  | SWIFT                              | 140          | O                  |
| bankChargeBearer                | `SENDER` or `RECEIVER` or `SHARED` |              | O                  |
| receiver.name                   | SWIFT                              | 35           | M                  |
| receiver.bank                   | BIC11                              | 11           | M                  |
| receiver.intermediaryBank       | BIC11                              | 11           | O                  |
| receiver.localRoutingIdentifier | Alphanumeric                       | 35           | O                  |
| receiver.bankAccountNumber      | Alphanumeric                       | 34           | M                  |
| receiver.address                | SWIFT                              | 35 chars x 3 | M                  |
| receiver.address.country        | uppercase ISO country code         | 2            | M                  |
