# Acme CIMB Singapore (H2H) Payments (/guides/cimb-h2h-payments)



This describes validations / allowed data formats for Acme batch payments going
through CIMB H2H (Host-to-Host) integration. 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 ` `

* Alphanumeric: `A`-`Z`, `a`-`z`, `0`-`9`

* BIC11: 11-character alphanumeric bank identifier

## General Notes [#general-notes]

* `paymentDate` is required and cannot be earlier than the current date in `Asia/Singapore` timezone.
* Each batch must contain between 1 and 1,000 payments.
* `paymentAdviceEmails` is optional for all payment types; maximum 1 email address and maximum 100 characters.
* `paymentDetails` (remittance information) is supported for `TT` and `MEPS` only.

## FAST [#fast]

* Currency must be `SGD`.
* FAST payment amount must not exceed 200,000 SGD.
* A 4-character purpose code is required. Refer to the [ABS Singapore purpose code list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf).

| field                       | pattern / charset                  | max length         | mandatory/optional                      |
| --------------------------- | ---------------------------------- | ------------------ | --------------------------------------- |
| currency                    | `SGD`                              | -                  | M                                       |
| paymentDate                 | current/future date                | -                  | M                                       |
| amount                      | numeric, min `1`, max `20,000,000` | -                  | M                                       |
| customerReference           | Alphanumeric                       | 35                 | O \* Acme auto-generate if not provided |
| purposeCode                 | Alphanumeric                       | 4                  | M                                       |
| paymentAdviceEmails         | email                              | 1 email, 100 chars | O                                       |
| receiver.name               | SWIFT                              | 140                | M                                       |
| receiver.bank               | Alphanumeric (BIC/SWIFT code)      | 11                 | M                                       |
| receiver.bankAccountNumber  | Alphanumeric                       | 34                 | M                                       |
| receiver.address.line1      | SWIFT                              | 70                 | O                                       |
| receiver.address.city       | SWIFT                              | 35                 | O                                       |
| receiver.address.postalCode | SWIFT                              | 16                 | O                                       |
| receiver.address.country    | ISO alpha-2                        | 2                  | O                                       |

Example payload:

```json
{
  "type": "FAST",
  "paymentDate": "2026-04-15",
  "senderAccountId": "intacc_XXXXXXXXXXXXX",
  "currency": "SGD",
  "payments": [
    {
      "amount": 500000,
      "customerReference": "INVFAST001",
      "purposeCode": "OTHR",
      "paymentAdviceEmails": ["ops@example.com"],
      "receiver": {
        "name": "Acme Technology Pte Ltd",
        "bank": "DBSSSGSGXXX",
        "bankAccountNumber": "0123456789"
      }
    }
  ]
}
```

## GIRO [#giro]

* Currency must be `SGD`.
* A 4-character purpose code is required. Refer to the [ABS Singapore purpose code list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf).

| field                      | pattern / charset    | max length         | mandatory/optional                      |
| -------------------------- | -------------------- | ------------------ | --------------------------------------- |
| currency                   | `SGD`                | -                  | M                                       |
| paymentDate                | current/future date  | -                  | M                                       |
| amount                     | numeric, min `1`     | -                  | M                                       |
| customerReference          | Alphanumeric         | 35                 | O \* Acme auto-generate if not provided |
| purposeCode                | Alphanumeric         | 4                  | M                                       |
| paymentAdviceEmails        | email                | 1 email, 100 chars | O                                       |
| receiver.name              | SWIFT                | 140                | M                                       |
| receiver.bank              | Alphanumeric (BIC11) | 11                 | M                                       |
| receiver.bankAccountNumber | Alphanumeric         | 34                 | M                                       |

Example payload:

```json
{
  "type": "GIRO",
  "paymentDate": "2026-04-15",
  "senderAccountId": "intacc_XXXXXXXXXXXXX",
  "currency": "SGD",
  "payments": [
    {
      "amount": 250000,
      "customerReference": "INVGIRO001",
      "purposeCode": "SALA",
      "receiver": {
        "name": "Jane Doe",
        "bank": "UOVBSGSGXXX",
        "bankAccountNumber": "9876543210"
      }
    }
  ]
}
```

## MEPS [#meps]

* Currency must be `SGD`.
* `bankChargeBearer` is required.
* `paymentDetails` (remittance information) is supported; maximum 140 characters.

| field                       | pattern / charset              | max length         | mandatory/optional                      |
| --------------------------- | ------------------------------ | ------------------ | --------------------------------------- |
| currency                    | `SGD`                          | -                  | M                                       |
| paymentDate                 | current/future date            | -                  | M                                       |
| amount                      | numeric, min `1`               | -                  | M                                       |
| customerReference           | Alphanumeric                   | 35                 | O \* Acme auto-generate if not provided |
| paymentDetails              | SWIFT                          | 140                | O                                       |
| bankChargeBearer            | `SENDER`, `RECEIVER`, `SHARED` | -                  | M                                       |
| paymentAdviceEmails         | email                          | 1 email, 100 chars | O                                       |
| receiver.name               | SWIFT                          | 140                | M                                       |
| receiver.bank               | Alphanumeric (BIC11)           | 11                 | M                                       |
| receiver.bankAccountNumber  | Alphanumeric                   | 34                 | M                                       |
| receiver.address.line1      | SWIFT                          | 70                 | O                                       |
| receiver.address.line2      | SWIFT                          | 70                 | O                                       |
| receiver.address.city       | SWIFT                          | 35                 | O                                       |
| receiver.address.postalCode | SWIFT                          | 16                 | O                                       |
| receiver.address.country    | ISO alpha-2                    | 2                  | O                                       |

Example payload:

```json
{
  "type": "MEPS",
  "paymentDate": "2026-04-15",
  "senderAccountId": "intacc_XXXXXXXXXXXXX",
  "currency": "SGD",
  "payments": [
    {
      "amount": 5000000,
      "customerReference": "INVMEPS001",
      "paymentDetails": "Payment for Invoice INV-2024-001",
      "bankChargeBearer": "SENDER",
      "paymentAdviceEmails": ["ops@example.com"],
      "receiver": {
        "name": "Global Supplies Pte Ltd",
        "bank": "OCBCSGSGXXX",
        "bankAccountNumber": "5432109876"
      }
    }
  ]
}
```

## TT [#tt]

* Currency accepts any valid ISO currency code.
* `bankChargeBearer` is required.
* `receiver.address` is required; `receiver.address.line1` and `receiver.address.country` are mandatory within it.
* `paymentDetails` (remittance information) is supported; maximum 140 characters.

| field                           | pattern / charset                   | max length         | mandatory/optional                      |
| ------------------------------- | ----------------------------------- | ------------------ | --------------------------------------- |
| currency                        | valid ISO currency code             | -                  | M                                       |
| paymentDate                     | current/future date                 | -                  | M                                       |
| amount                          | numeric, min `1`                    | -                  | M                                       |
| customerReference               | Alphanumeric                        | 35                 | O \* Acme auto-generate if not provided |
| paymentDetails                  | SWIFT                               | 140                | O                                       |
| bankChargeBearer                | `SENDER`, `RECEIVER`, `SHARED`      | -                  | M                                       |
| paymentAdviceEmails             | email                               | 1 email, 100 chars | O                                       |
| receiver.name                   | SWIFT                               | 140                | M                                       |
| receiver.bank                   | Alphanumeric (BIC11)                | 11                 | M                                       |
| receiver.bankAccountNumber      | Alphanumeric                        | 34                 | M                                       |
| receiver.iban                   | `^[A-Z]{2}[0-9]{2}[A-Z0-9]{10,30}$` | 34                 | O                                       |
| receiver.localRoutingIdentifier | Alphanumeric                        | 35                 | O                                       |
| receiver.address                | object                              | -                  | M                                       |
| receiver.address.line1          | SWIFT                               | 70                 | M                                       |
| receiver.address.line2          | SWIFT                               | 70                 | O                                       |
| receiver.address.city           | SWIFT                               | 35                 | O                                       |
| receiver.address.postalCode     | SWIFT                               | 16                 | O                                       |
| receiver.address.country        | ISO alpha-2                         | 2                  | M                                       |
| intermediaryBank                | Alphanumeric                        | 8–11               | O                                       |

Example payload:

```json
{
  "type": "TT",
  "paymentDate": "2026-04-15",
  "senderAccountId": "intacc_XXXXXXXXXXXXX",
  "currency": "USD",
  "payments": [
    {
      "amount": 1000000,
      "customerReference": "INVTT001",
      "paymentDetails": "Payment for Invoice INV-2024-002",
      "bankChargeBearer": "SHARED",
      "paymentAdviceEmails": ["ops@example.com"],
      "receiver": {
        "name": "Overseas Partner Corp",
        "bank": "CHASUS33XXX",
        "bankAccountNumber": "000123456789",
        "address": {
          "line1": "270 Park Avenue",
          "line2": "Floor 12",
          "city": "New York",
          "postalCode": "10017",
          "country": "US"
        }
      }
    }
  ]
}
```

## BKTR [#bktr]

* Use `BKTR` for in-house book transfers within CIMB SG.
* Currency accepts any valid ISO currency code.

| field                      | pattern / charset       | max length         | mandatory/optional                      |
| -------------------------- | ----------------------- | ------------------ | --------------------------------------- |
| currency                   | valid ISO currency code | -                  | M                                       |
| paymentDate                | current/future date     | -                  | M                                       |
| amount                     | numeric, min `1`        | -                  | M                                       |
| customerReference          | Alphanumeric            | 35                 | O \* Acme auto-generate if not provided |
| paymentAdviceEmails        | email                   | 1 email, 100 chars | O                                       |
| receiver.name              | SWIFT                   | 140                | M                                       |
| receiver.bank              | Alphanumeric (BIC11)    | -                  | O                                       |
| receiver.bankAccountNumber | Alphanumeric            | 34                 | M                                       |

Example payload:

```json
{
  "type": "BKTR",
  "paymentDate": "2024-06-15",
  "senderAccountId": "intacc_XXXXXXXXXXXXX",
  "currency": "SGD",
  "payments": [
    {
      "amount": 100000,
      "customerReference": "INVBKTR001",
      "receiver": {
        "name": "Internal Treasury Account",
        "bankAccountNumber": "1234567890"
      }
    }
  ]
}
```
