# Acme DBS Singapore Payments (H2H) (/guides/dbs-sg-payments)



This describes validations / allowed data formats for Acme payments going
through DBS 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 ` `

### Acme Address Packing (Before SWIFT ISO20022 Payment data changes) [#acme-address-packing-before-swift-iso20022-payment-data-changes]

* `receiver.address` is submitted as a structured object with up to six fields. The fields are `line1`, `line2`, `city`, `state`, `postalCode`, and `country`.
* The same handling applies to every existing payment type that accepts an address (FAST, PAYNOW, PAYNOW\_GIRO, GIRO, MEPS, TT).
* `line1` is mandatory only for **MEPS** and **TT**. It is optional for the other types.
* When no address is provided for the optional types, packing is skipped.
* When an address is provided, Acme flattens the fields into **3 lines of up to 35 SWIFT characters**.
* `line1` and `line2` are each placed on their own line. Each must be 35 characters or fewer.
* `city`, `state`, `postalCode`, and `country` are combined in that order onto the remaining lines. Acme splits on spaces or punctuation as needed to fit.
* The payment is **rejected** if the combined address cannot fit within 3 lines of 35 characters.

### Payment advice on DBS IDEAL and advice emails [#payment-advice-on-dbs-ideal-and-advice-emails]

When you provide `payments[N].paymentAdviceEmails`, DBS sends a payment advice to those recipients. The following fields determine what the recipient sees.

* `paymentDetails` is shown as the **Invoice Details** in the advice email **Payment Details** section in the email body.
* `customerReference` is shown as the **Client Reference** in the advice email **Payment Details** section in the email body.
* If `paymentDetails` is not provided, Acme uses `customerReference` as the Invoice Details so the field is never empty.
* These fields are populated only when advice emails are provided in `paymentAdviceEmails` for the payment.

## FAST [#fast]

| field                                | pattern / charset                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ------------------------------------------------------------------------------------------ | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                      | 35                          | O \* Acme auto-generate if not provided |
| 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                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O                                       |

`receiver.address` is a structured object with the fields `line1`, `line2`, `city`, `state`, `postalCode`, and `country`. When provided, Acme flattens it into **3 lines of 35 SWIFT characters**. See [Address packing](#acme-address-packing-before-swift-iso20022-payment-data-changes).

## PAYNOW (FAST) / PAYNOW\_GIRO [#paynow-fast--paynow_giro]

<Callout type="info">
  Acme does not validate the `proxyValue` patterns. Follow the rules specified below to avoid rejection by the bank.
</Callout>

* `receiver.bankAccountNumber` and `receiver.bank` must not be provided

| field                                | pattern / charset                                                                                                                                                                                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                                                                                                                                                                                      | 35                          | O \* Acme auto-generate if not provided |
| paymentDetails                       | SWIFT                                                                                                                                                                                                                                                      | 140                         | O                                       |
| receiver.name                        | SWIFT                                                                                                                                                                                                                                                      | 35                          | M                                       |
| receiver.proxyType                   | `MOBILE` or `UEN` or `VPA` or `NRIC`                                                                                                                                                                                                                       |                             | M                                       |
| receiver.proxyValue (MOBILE)         | SWIFT, `+` followed by up to 15 digits <br /> Example: `+6588880000`                                                                                                                                                                                       | 35                          | M                                       |
| receiver.proxyValue (UEN)            | Uppercase SWIFT <br /> 9 to 13 uppercase alphanumeric characters <br /> Example: `201688888A`                                                                                                                                                              | 35                          | M                                       |
| receiver.proxyValue (NRIC)           | Uppercase SWIFT <br /> 9 uppercase alphanumeric characters <br /> Example: `S7800000A`                                                                                                                                                                     | 35                          | M                                       |
| receiver.proxyValue (VPA)            | Uppercase SWIFT <br /> Mobile followed by `#` and 4 uppercase alphanumeric characters <br /> Example: `+6588880000#Grab` <br /> or <br /> `UEN` followed by UEN followed by `#` and 4 uppercase alphanumeric characters <br /> Example: `+UEN1234567#Grab` | 35                          | M                                       |
| receiver.address                     | SWIFT                                                                                                                                                                                                                                                      | 35 chars x 3                | O                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"]                                                                                                                                                                 | 75 per email (max 5 emails) | O                                       |

`receiver.address` is a structured object with the fields `line1`, `line2`, `city`, `state`, `postalCode`, and `country`. When provided, Acme flattens it into **3 lines of 35 SWIFT characters**. See [Address packing](#acme-address-packing-before-swift-iso20022-payment-data-changes).

## GIRO [#giro]

| field                                | pattern / charset                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ------------------------------------------------------------------------------------------ | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                      | 35                          | O \* Acme auto-generate if not provided |
| 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                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O                                       |

`receiver.address` is a structured object with the fields `line1`, `line2`, `city`, `state`, `postalCode`, and `country`. When provided, Acme flattens it into **3 lines of 35 SWIFT characters**. See [Address packing](#acme-address-packing-before-swift-iso20022-payment-data-changes).

## ACT [#act]

* `receiver.bank` must not be provided

| field                                | pattern / charset                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ------------------------------------------------------------------------------------------ | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                      | 16                          | O \* Acme auto-generate if not provided |
| paymentDetails                       | SWIFT                                                                                      | 140                         | O                                       |
| receiver.name                        | SWIFT                                                                                      | 35                          | M                                       |
| receiver.bankAccountNumber           | Alphanumeric                                                                               | 34                          | M                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O                                       |

## MEPS [#meps]

| field                                | pattern / charset                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ------------------------------------------------------------------------------------------ | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                      | 16                          | O \* Acme auto-generate if not provided |
| paymentDetails                       | SWIFT                                                                                      | 140                         | O                                       |
| bankChargeBearer                     | `SENDER` or `RECEIVER` or `SHARED`                                                         |                             | O                                       |
| receiver.name                        | SWIFT                                                                                      | 35                          | M                                       |
| receiver.bank                        | Alphanumeric                                                                               | 11                          | M                                       |
| receiver.bankAccountNumber           | Alphanumeric + `-`                                                                         | 34                          | M                                       |
| receiver.intermediaryBank            | Alphanumeric                                                                               | 11                          | O                                       |
| receiver.address.line1               | SWIFT                                                                                      | 35                          | M                                       |
| receiver.address.line2               | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.city                | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.state               | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.postalCode          | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.country             | SWIFT                                                                                      | 35                          | O                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O                                       |

Acme flattens these `receiver.address` fields into **3 lines of 35 SWIFT characters** before submission to DBS. See [Address packing](#acme-address-packing-before-swift-iso20022-payment-data-changes).

## TT [#tt]

| field                                | pattern / charset                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ------------------------------------------------------------------------------------------ | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                      | 16                          | O \* Acme auto-generate if not provided |
| instructionForSenderBank             | SWIFT                                                                                      | 128                         | 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 + `-`                                                                         | 34                          | M                                       |
| receiver.localRoutingIdentifier      | Alphanumeric                                                                               | 31                          | O                                       |
| receiver.intermediaryBank            | Alphanumeric                                                                               | 11                          | O                                       |
| receiver.address.line1               | SWIFT                                                                                      | 35                          | M                                       |
| receiver.address.line2               | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.city                | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.state               | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.postalCode          | SWIFT                                                                                      | 35                          | O                                       |
| receiver.address.country             | SWIFT                                                                                      | 35                          | O                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O                                       |

Acme flattens these `receiver.address` fields into **3 lines of 35 SWIFT characters** before submission to DBS. See [Address packing](#acme-address-packing-before-swift-iso20022-payment-data-changes).

## MEPS and TT - SWIFT ISO20022 Payment data changes [#meps-and-tt---swift-iso20022-payment-data-changes]

<Callout type="warn" title="Important">
  * Only applicable to clients migrated to DBS H2H CBPR+ (ISO 20022).
  * `instructionForSenderBank` applies to `TT` only.
  * `receiver.name` maximum characters increased from 35 to 140.
  * `outgoingPurposeCode` applies to `TT` only and is **mandatory** when the payment currency or beneficiary country falls into the corridors below. Payments that omit a required code will be rejected by the bank. Applicable purpose code list should be obtained from DBS or the destination country's regulator.
    * **Currencies**: `MYR`, `CNH` / `CNY`, `INR`, `KWD`
    * **Beneficiary countries**: Myanmar (`MM`), United Arab Emirates (`AE`)
</Callout>

| field                                | pattern / charset                                                                                             | max length                  | mandatory/optional                                                               |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------- | --------------------------- | -------------------------------------------------------------------------------- |
| customerReference                    | SWIFT                                                                                                         | 16                          | O \* Acme auto-generate if not provided                                          |
| instructionForSenderBank             | SWIFT                                                                                                         | 128                         | O (TT only)                                                                      |
| outgoingPurposeCode                  | Alphanumeric (ISO 20022 ExternalPurpose code or country-specific purpose code) <br /> Example: `SALA`, `GDDS` | 10                          | Conditional (TT only) — M for specific beneficiary country/currency, otherwise O |
| paymentDetails                       | SWIFT                                                                                                         | 140                         | O                                                                                |
| bankChargeBearer                     | `SENDER` or `RECEIVER` or `SHARED`                                                                            |                             | O                                                                                |
| receiver.name                        | SWIFT                                                                                                         | 140                         | M                                                                                |
| receiver.bank                        | Alphanumeric                                                                                                  | 11                          | M                                                                                |
| receiver.bankAccountNumber           | Alphanumeric + `-`                                                                                            | 34                          | M                                                                                |
| receiver.localRoutingIdentifier      | Alphanumeric                                                                                                  | 31                          | O (TT only)                                                                      |
| receiver.intermediaryBank            | Alphanumeric                                                                                                  | 11                          | O                                                                                |
| receiver.address.line1               | SWIFT                                                                                                         | 70                          | M                                                                                |
| receiver.address.line2               | SWIFT                                                                                                         | 70                          | O                                                                                |
| receiver.address.city                | SWIFT                                                                                                         | 35                          | M                                                                                |
| receiver.address.country             | SWIFT                                                                                                         | 2                           | M                                                                                |
| receiver.address.state               | SWIFT                                                                                                         | 35                          | O                                                                                |
| receiver.address.postalCode          | SWIFT                                                                                                         | 16                          | O                                                                                |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"]                    | 75 per email (max 5 emails) | O                                                                                |

## ACT - SWIFT ISO20022 Payment data changes [#act---swift-iso20022-payment-data-changes]

<Callout type="warn" title="Important">
  * Only applicable to clients migrated to DBS H2H CBPR+ (ISO 20022).
  * `receiver.name` maximum characters increased from 35 to 140.
  * `receiver.bank` must not be provided.
</Callout>

| field                                | pattern / charset                                                                          | max length                  | mandatory/optional                      |
| ------------------------------------ | ------------------------------------------------------------------------------------------ | --------------------------- | --------------------------------------- |
| customerReference                    | SWIFT                                                                                      | 16                          | O \* Acme auto-generate if not provided |
| paymentDetails                       | SWIFT                                                                                      | 140                         | O                                       |
| receiver.name                        | SWIFT                                                                                      | 140                         | M                                       |
| receiver.bankAccountNumber           | Numeric                                                                                    | 34                          | M                                       |
| payments\[N].paymentAdviceEmails\[N] | Valid email address <br /> Example: \["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O                                       |
