# Overview (https://docs.tryacme.com/guides/overview)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
One REST API for moving money across many banks — payments, collections, accounts, FX, and more.
Acme is a single REST API for **money movement and treasury operations across many banks**. It
abstracts each bank's protocols, file formats, and payment rails behind one consistent JSON-over-HTTPS
interface, so you integrate once instead of bank by bank.
These **guides** explain the concepts and integration flows. The **[API reference](/reference)**
documents every endpoint's request and response. New to Acme? Start with
**[Getting started](/guides/getting-started)**.
## What you can do [#what-you-can-do]
## Bank coverage [#bank-coverage]
Acme moves money across banks including CIMB, Citibank, DBS, HSBC, OCBC, RHB, Standard Chartered, UOB,
ANZ, Deutsche Bank, and Zand. Each bank's specifics — supported rails, character sets, and required
fields — live under **Bank payment rules**.
# Getting started (https://docs.tryacme.com/guides/getting-started)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
Acme exposes a REST API to facilitate money movement and treasury operations by abstracting away the different underlying banking services and protocols.
The API operates over HTTPS and all requests and responses are JSON encoded.
To get started, please contact Acme to obtain your test API key.
You can use Acme API in test mode which does not affect your live data and does not interact with any banks.
# Authentication (https://docs.tryacme.com/guides/authentication)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
## API Authentication [#api-authentication]
Every requests to Acme API must include a secret API key in the HTTP request header. For example,
```sh
curl --header "Authorization: Bearer YOUR_API_KEY_HERE" https://api.tryacme.com/v1/transactions
```
Acme Mode, whether `LIVE` or `TEST`, will be determined based on the API key set in the request header.
## Retrieve API Keys [#retrieve-api-keys]
Please contact Acme to retrieve your API keys.
Treat your secret API key as you would any other password. Secret API keys should not be in your
client-side code and should not be checked into your source version control system.
# Minor Units Format (https://docs.tryacme.com/guides/minor-units-format)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
## Amount Format [#amount-format]
Acme maintains a consistent format for `amount` values across all Acme APIs.
All `amount` values provided in the API must be represented in their **smallest currency unit** as an integer.
The number of minor units per major unit follows the [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) standard.
* Most currencies have 2 decimal places. `amount` is in cents, so multiply the major amount by 100.
* Some currencies have no minor unit (0 decimal places). `amount` equals the major amount.
* A small set of currencies have 3 decimal places. `amount` is in thousandths, so multiply the major amount by 1000.
### Examples [#examples]
| Currency | Decimal Places | Example Amount | Smallest Unit (ISO 4217 standard) | API Value |
| --- | --- | --- | --- | --- |
| SGD | 2 | $10.00 | cents | `1000` |
| USD | 2 | $10.00 | cents | `1000` |
| EUR | 2 | €10.00 | cents | `1000` |
| JPY | 0 | ¥10 | yen | `10` |
| VND | 0 | ₫10 | dong | `10` |
| KWD | 3 | KD 10.000 | fils | `10000` |
### Currencies with no minor unit (0 decimal places) [#currencies-with-no-minor-unit-0-decimal-places]
For these currencies, send `amount` as the whole major amount. Do not multiply by 100.
For example, send `1000` for JPY ¥1,000.
| Code | Currency |
| --- | --- |
| BIF | Burundian Franc |
| CLP | Chilean Peso |
| DJF | Djiboutian Franc |
| GNF | Guinean Franc |
| ISK | Icelandic Króna |
| JPY | Japanese Yen |
| KMF | Comorian Franc |
| KRW | South Korean Won |
| PYG | Paraguayan Guaraní |
| RWF | Rwandan Franc |
| UGX | Ugandan Shilling |
| VND | Vietnamese Dong |
| VUV | Vanuatu Vatu |
| XAF | Central African CFA Franc |
| XOF | West African CFA Franc |
| XPF | CFP Franc |
### Currencies with 3 decimal places [#currencies-with-3-decimal-places]
For these currencies, send `amount` in thousandths. Multiply the major amount by 1000.
For example, send `10500` for KWD 10.500.
| Code | Currency |
| --- | --- |
| BHD | Bahraini Dinar |
| IQD | Iraqi Dinar |
| JOD | Jordanian Dinar |
| KWD | Kuwaiti Dinar |
| LYD | Libyan Dinar |
| OMR | Omani Rial |
| TND | Tunisian Dinar |
All other currencies use 2 decimal places. Send `amount` in cents by multiplying the major amount by 100.
### Decimal places follow the ISO 4217 scale [#decimal-places-follow-the-iso-4217-scale]
The number of decimal places is set by the ISO 4217 standard, not by the smallest physical coin or note in circulation.
For example, the smallest New Taiwan Dollar (TWD) coin is NT$1, but ISO 4217 assigns TWD 2 decimal places. So TWD is a 2 decimal place currency for the API.
* Send `1000` for NT$10.00.
* Send `1050` for NT$10.50.
### Important [#important]
* You must convert major currency units to the smallest unit before sending to Acme (e.g. send `1050` for SGD $10.50).
* All amounts will be returned in the smallest unit. Your system must convert these back to major units if needed for display.
* Amounts must not include decimal points. Submissions with decimal points (e.g. `10.50`) will be rejected.
```json
{
"amount": 1050,
"currency": "SGD"
}
```
# Idempotency (https://docs.tryacme.com/guides/idempotency)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
Acme APIs support idempotency for safely retrying requests without accidentally duplicating the result.
When your API call fails and you are not sure if Acme received the request,
Idempotency enables you to safely retry a request without risk of creating a second object or performing the update twice.
For POST requests, in order to perform an idempotent request,
you have to provide an `Idempotency-Key: ` header in the request for the endpoint that supports it.
The `` can be any string that uniquely identifies your request, for instance a UUID.
Results of requests with `Idempotency-Key` will be saved and returned on every subsequent request with the same `Idempotency-Key`.
These responses will have the `Idempotent-Replayed: true` header so you can detect them.
Keys and the associated cached responses are removed from the system automatically after 1 hour.
A new request is generated if a key is reused after the original has been removed.
For retries, the idempotency layer compares incoming request parameters with those of the original request linked to the original idempotency key,
and will return an error response if these don't match.
All GET, PUT and DELETE requests are idempotent by default.
Sending idempotency keys in GET, PUT and DELETE requests has no effect.
# Pagination (https://docs.tryacme.com/guides/pagination)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
By default, all `List *` endpoints return paginated results in reverse chronological order and support cursor based pagination.
You may set query parameter `order` to `ASC` if you wish to retrieve results in chronological order.
You may also use query parameters `after` and `limit` to control the results returned from the endpoint.
For `limit` the default is 10 but can optionally be set to any integer between 1 and 100 (inclusive).
The response returned from the `List *` endpoints include a `hasMore` field that indicate whether there are more results to be fetched.
# Rate limits (https://docs.tryacme.com/guides/rate-limits)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
The Acme API rate limits requests per API key and HTTP method using a token bucket: the bucket
holds your burst allowance and refills continuously at the sustained rate. Short bursts above the
sustained rate are fine until the bucket is empty.
| Method | Mode | Burst | Sustained rate |
| --- | --- | --- | --- |
| GET | LIVE | 100 requests | 10 requests/second |
| GET | TEST | 50 requests | 5 requests/second |
| POST | LIVE and TEST | 100 requests | 25 requests/second |
## When you exceed a limit [#when-you-exceed-a-limit]
The request is rejected with HTTP `429` and a `Retry-After` header (in seconds):
```json
{
"errorCode": "RATE_LIMIT_EXCEEDED",
"errorMessage": "Rate limit exceeded. Please try again later."
}
```
## Handling 429s [#handling-429s]
* Wait for the `Retry-After` interval before retrying instead of retrying immediately; the bucket
refills within a second.
* A rate-limited request is never cached by [idempotency](/guides/idempotency), so retry it with
the same `Idempotency-Key`.
* If your integration needs more sustained throughput, please contact Acme; limits can be raised
per API key.
# Batch Payments (https://docs.tryacme.com/guides/batch-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes Acme's Batch Payments API. This API can be used to send multiple
payments in a single batch to the bank using file transfer.
## Which API should I use? [#which-api-should-i-use]
Payments created *outside* of a Batch (using the [Payments
API](/reference/post-payments)) are sent to the bank
over API transport. Payments created within a batch using the [Batch
Payments](/reference/list-batch-payments) API described
here are sent to the bank over files (host-to-host integration).
The API you should use to create the payment depends on the integration you
have with your bank.
Both kinds of payments are visible in the [List
Payments](/reference/get-payments) API.
## Payment Batch API [#payment-batch-api]
The Payment Batch API creates a batch of payments all at once. The payments in
a batch share a common payment type, payment date, and source account. They
also share a common currency by default. Each payment may set its own
`currency` to override the batch-level currency. The payments in a batch will
be submitted together in a single file to the bank. Each payment in the batch
has its own individual ID that can be used to track its success / failure. The
batch itself also has an ID.
Upon receiving the batch, Acme will process and send it to the bank. Any
progress reports will be sent via webhook. The changes will also be visible
when calling the list or get APIs. A [sample timeline](#sample-timeline) of events and webhooks /
status changes is provided below.
### Create a Batch Payment [#create-a-batch-payment]
[POST /v1/payment-batches](/reference/post-batch-payments)
```js
{
"type": "MEPS",
// actual payment date may change due to auto value date rollover from bank
// e.g. due to submitting batch after cutoff, or approval taking too long
"paymentDate": "2024-05-10",
"senderAccountId": "intacct_XYZ",
// optional - must be provided if account has multiple currencies configured in Acme
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 20000,
// optional - defaults to the batch-level currency if not provided
// set this to override the batch-level currency for this payment
"currency": "SGD",
// optional - a random string will be generated if not provided
// cannot reuse previous customer references (checked by bank)
"customerReference": "DONUTS",
// optional
"paymentDetails": "10 boxes of 12 each",
// optional - for TT / MEPS: SENDER/RECEIVER/SHARED
"bankChargeBearer": "SENDER",
"receiver": {
"name": "Donut Shop",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "123456789",
// address must be provided for TT/MEPS
"address": {
"line1": "20 Side Street",
"line2": "Unit 02-3A"
}
}
},
{
"amount": 3000
"customerReference": "COFFEE",
"receiver": {
"name": "Coffee Shop",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "345678901",
"address": {
"line1": "127 Jln Merdeka"
}
}
},
[...]
]
}
```
More details on the receiver fields may be found in our [Payment documentation](/reference/post-payments).
#### Response [#response]
200 OK
```js
{
"id": "pymtb_XYZ",
"type": "MEPS",
"paymentDate": "2024-05-10",
"senderAccountId": "intacct_XYZ",
"currency": "SGD"
"senderAccountCurrency": "SGD",
"status": "PROCESSING", // PROCESSING (still at Acme) -> SUBMITTED (at the bank) -> FAILED / COMPLETED
"payments": [
{
"id": "pymt_XYZ",
"amount": 20000,
"receiver": { ... },
"status": "PROCESSING" // individual payment status
},
{
"id": "pymt_XYZ",
"amount": 3000,
"receiver": { ... },
"status": "PROCESSING"
},
[...]
]
}
```
The individual payment objects (`pymt_XXX`) returned as part of the response are also
visible in our [Payments API endpoints](/reference/get-payments).
#### Validation [#validation]
* Sender account currency: must be specified if account is configured in Acme as multi-currency
* Currency
* MEPS/FAST/PAYNOW: must be SGD
* Number of payments in one batch: maximum of 1000
* Receiver name: must be present
* Receiver address
* TT/MEPS: must be present
* ACT: must not be present
* all except ACT: if present, should fit within 3x35 character lines
* Receiver bank (for bank account payments - ACT/TT/MEPS/PAYNOW):
* ACT: must not be present
* others: must be present
#### Possible Errors [#possible-errors]
* Invalid type for batch
* Invalid payment date for batch
* Invalid currency for batch
* Invalid source account for batch
* any payment level error e.g. bank account number, bank, account holder name
* If any payment fails validation by Acme, Acme will currently reject the entire submission. Please resubmit the entire request with the errors corrected.
### List Batch Payments [#list-batch-payments]
[GET /v1/payment-batches](/reference/list-batch-payments)
### Get a Batch Payment [#get-a-batch-payment]
[GET /v1/payment-batches/\{id}](/reference/get-batch-payments-id)
## Additions to the Payment API [#additions-to-the-payment-api]
In addition to the existing Payment fields documented on
[the Payment API documentation](/reference/get-payments-id), the following fields will
be added for Payments which are part of a Payment Batch.
```js
{
"id": "pymt_XYZ",
// ... existing fields ...
"batchId": "pymtb_XYZ",
"paymentDate": "2024-05-10", // as instructed by customer
"actualPaymentDate": "2024-05-12", // if changed by bank
"bankChargeAmount": 100, // if bank charges present (e.g. for TT / MEPS)
"bankChargeCurrency": "SGD"
}
```
## Webhooks [#webhooks]
As file-based integration is an inherently asynchronous process, Acme will emit
webhooks to inform you of the status of the payments.
* Payment Batch Submitted ([sample](/guides/webhook-examples#batch-payments)) - sent after the file is submitted to the bank
* Payment Batch Rejected ([sample](/guides/webhook-examples#batch-payments)) - sent if the entire batch is rejected
* Payment Succeeded ([sample](/guides/webhook-examples#payments)) - sent for the payments after positive ACK3 (result from clearing system) is received from the bank
* Payment Failed ([sample](/guides/webhook-examples#payments)) - sent for the payments after a rejection at the ACK1 (entire batch), ACK2 (bank validation), or ACK3 (clearing system result) level.
## Test mode [#test-mode]
You can use your test API key to test your integration before going live. Test mode validates the input parameters and always assumes success, unless
one of the special account numbers below are used.
To test failure cases please use the following account numbers (any bank is fine):
* `000000000` fail this individual payment
* `000000001` fail this individual payment
* `000000002` fail the entire batch containing this payment
Test mode will emit the following webhooks for a batch that does not fail entirely:
* `payment-batches.submitted` ([sample](/guides/webhook-examples#batch-payments))
* `payments.succeeded` and/or `payments.failed` ([sample](/guides/webhook-examples#payments)) for the payments in the batch
If the `000000002` account number is used in a batch, test mode will simulate a failure for the entire batch:
* `payment-batches.submitted` ([sample](/guides/webhook-examples#batch-payments))
* `payment-batches.rejected` ([sample](/guides/webhook-examples#batch-payments))
* `payments.failed` ([sample](/guides/webhook-examples#payments)) for all payments in the batch
## Sample Timeline [#sample-timeline]
As the payment is processed, it goes through several stages of validation by Acme and the bank. A payment may be rejected by any of these stages. A payment is considered completed only when the final stage succeeds.
1. Client submits 10 payments in the batch, 2 of them are obviously invalid e.g. bank code has wrong format (caught by Acme)
2. Acme returns 400 bad request, no batch object is created.
3. Client submits 10 payments, fixing the invalid ones.
4. Acme returns 200 OK, batch object is created (status PROCESSING), payments are created with status PROCESSING.
5. Acme processes the batch and sends a batch of 10 payments to the bank.
1. Batch status change to SUBMITTED, 10 payments status change to SUBMITTED.
2. Acme sends payment batch submitted webhook for the batch.
6. Bank reads the file, validates batch parameters, and delivers ACK1 accepting the batch.
1. In case of a rejection in ACK1 (batch rejection), Acme will send a payment batch rejected webhook for the batch, and payment rejected webhook for the payments inside of it.
7. Bank processes the file and validates each payment inside. It delivers ACK2 where 2 of the 10 payments are further rejected, while the remaining 8 payments move on to the next stage.
1. If any of the payments have ACWC (Accepted With Changes) status, Acme will set actualPaymentDate to the changed value.
2. Acme sends payment failed webhook for the 2 payments (payment status change to FAILED).
8. Bank submits the payment to the clearing system and delivers their response in ACK3, 8 remaining payments are successful.
1. If any of the payments have ACWC (Accepted With Changes) status, Acme will set actualPaymentDate / bankChargeAmount / bankChargeCurrency to the values provided by the bank.
2. Acme sends payment succeeded webhook for the 8 payments (payment status change to COMPLETED).
# Payment Lifecycle (Maker-checker flow) (https://docs.tryacme.com/guides/maker-checker-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
The following flow diagram illustrates payment lifecycle when maker-checker flow is enabled:
| Payment State | `Payment.status` | Description | Terminal Status? |
| --- | --- | --- | --- |
| Held for checker approval | `PENDING_APPROVAL` | Maker submits a payment where maker-checker applies | No |
| Approved by checker | `PROCESSING` | Checker approved the payment and the payment is executed. | No |
| Rejected by checker | `APPROVAL_REJECTED` | Checker rejected the payment and is not executed. | Yes |
| Approval window expired | `APPROVAL_EXPIRED` | Payment is not approved before the review expiry datetime. | Yes |
| Bank accepted the payment | `SUBMITTED` | Bank accepted, pending the final status from the bank. | No |
| Payment Success | `COMPLETED` | Bank returned a success response. | Yes |
| Payment failed | `FAILED` | Bank submission or failed during execution. | Yes |
# Acme ANZ Australia Payments (https://docs.tryacme.com/guides/anz-au-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through ANZ Australia. 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
* DE (Direct Entry) Character Set:
* The 26 uppercase Latin letters `A`-`Z`
* The 26 lowercase Latin letters `a`-`z`
* The 10 digits `0`-`9`
* Forward slash `/`
* Question mark `?`
* Colon `:`
* Left and right parentheses `(` `)`
* Full stop `.`
* Comma `,`
* Single quote `'`
* Plus sign `+`
* Space
* Ampersand `&`
* At sign `@`
* Exclamation mark `!`
* Number sign / hash `#`
* Dollar sign `$`
* Percent sign `%`
* Equals sign `=`
* Left and right square brackets `[` `]`
* Caret sign `^`
* Underscore `_`
* note: does *not* include Hyphen `-`
* NPP 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
* Exclamation mark `!`
### Receiver Address Fields [#receiver-address-fields]
ANZ maps the receiver address structurally, one Acme field to one ISO 20022 pain.001 element.
* `receiver.address.line1` and `receiver.address.line2` map to `AdrLine`.
* `receiver.address.city` maps to `TwnNm`.
* `receiver.address.state` maps to `CtrySubDvsn`.
* `receiver.address.postalCode` maps to `PstCd`.
* `receiver.address.country` maps to `Ctry`.
ANZ does not flatten these into repeated address lines. Each field carries its own maximum length.
* `postalCode` allows at most 16 characters, because that is the limit on `PstCd`.
* The other address text fields allow 35 characters.
* The address applies to `TT` and `AU_HVCS` only.
* The address is ignored for `AU_BECS` and for both `AU_OSKO` types.
The per-type sections below list which address fields are required.
## AU_BECS [#au_becs]
Maximum of 1000 payments per batch.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | DE | 18 | M |
| paymentDetails | N/A must not provide | | |
| receiver.name | DE | 35 | M |
| receiver.bankAccountNumber | Numeric | 9 | M |
| receiver.localRoutingIdentifier | Numeric (6 digit BSB) | 6 | M |
| receiver.address | N/A ignored | | |
## AU_HVCS [#au_hvcs]
Maximum of 500 payments per batch.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SHARED` | | O (default is `SHARED`) |
| receiver.name | SWIFT | 35 | M |
| receiver.bankAccountNumber | Numeric | 9 | M |
| receiver.localRoutingIdentifier | Numeric (6 digit BSB) | 6 | M |
| receiver.address | see below | | O |
### AU_HVCS receiver.address [#au_hvcs-receiveraddress]
`receiver.address` is optional for `AU_HVCS` payments. Every subfield is optional.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| receiver.address.line1 | SWIFT | 35 | O |
| receiver.address.line2 | SWIFT | 35 | O |
| receiver.address.city | SWIFT | 35 | O |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
| receiver.address.country | Uppercase ISO 3166-1 alpha-2 | 2 | O |
## AU_OSKO (to bank account / BBAN) [#au_osko-to-bank-account--bban]
Maximum of 1000 payments per batch.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | NPP | 35 | M |
| paymentDetails | NPP | 140 | O |
| receiver.name | NPP | 35 | M |
| receiver.bankAccountNumber | Numeric | 9 | M |
| receiver.localRoutingIdentifier | Numeric (6 digit BSB) | 6 | M |
| receiver.address | N/A ignored | | |
## AU_OSKO (to proxy) [#au_osko-to-proxy]
Maximum of 100 payments to proxy per batch.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | NPP | 35 | M |
| paymentDetails | NPP | 140 | O |
| receiver.name | NPP | 35 | M |
| receiver.proxyType | `MOBILE` or `ABN` or `ORG_ID` or `EMAIL` | | M |
| receiver.proxyValue
for MOBILE | +<- hyphen> | 30 | M |
| receiver.proxyValue
for ABN | 9 to 11 digits | 11 | M |
| receiver.proxyValue
for ORG_ID | up to 255 chars | 255 | M |
| receiver.proxyValue
for EMAIL | email address up to 255 chars | 255 | M |
| receiver.address | N/A ignored | | |
## TT [#tt]
Maximum of 500 payments per batch.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Uppercase BIC | 11 | M |
| receiver.intermediaryBank | Uppercase BIC | 11 | O |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | see below | | M |
### TT receiver.address [#tt-receiveraddress]
`receiver.address` is mandatory for `TT` payments. Each subfield has its own length and rule.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| receiver.address.line1 | SWIFT | 35 | C |
| receiver.address.line2 | SWIFT | 35 | C |
| receiver.address.city | SWIFT | 35 | C |
| receiver.address.state | SWIFT | 35 | C |
| receiver.address.postalCode | SWIFT | 16 | C |
| receiver.address.country | Uppercase ISO 3166-1 alpha-2 | 2 | M |
`C` means conditional. The rules are:
* `receiver.address.country` is always required.
* `line1` and `line2` are each optional on their own.
* If neither `line1` nor `line2` is provided, then `city`, `state` and `postalCode` are all required.
* `city`, `state` and `postalCode` are otherwise optional.
# Acme Banco Azteca Mexico Payments (API) (https://docs.tryacme.com/guides/baz-mx-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Banco Azteca Mexico (`AZTKMXMMXXX`) over the Banco Azteca API. 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]
* All payments must be in **MXN**.
* **CLABE** (Clave Bancaria Estandarizad) is the 18-digit standardized Mexican bank account number.
## MX_SPEI [#mx_spei]
SPEI (Sistema de Pagos Electrónicos Interbancarios) for interbank transfers of Mexican Pesos (MXN).
* `receiver.bankAccountNumber` is interpreted by length:
* 18 digits: CLABE
* 16 digits: card number
* 10 digits: phone number
* `customerReference` is the SPEI numeric reference (*referencia numérica*). It must be 1 to 7 numeric digits and greater than 0.
* `paymentDetails` is the payment reference (*concepto de pago*) shown to the receiver.
* SPEI payments are expected to be completed within an average of 30 seconds, according to information published by Banco de México.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Numeric, 1 to 7 digits, greater than 0
Example: `1234567` | 7 | M |
| paymentDetails | Free text | 30 | M |
| receiver.name | Free text | 60 | M |
| receiver.bankAccountNumber | Numeric: 18 digits (CLABE), 16 digits (card), or 10 digits (phone) | 18 | M |
| receiver.localRoutingIdentifier | Banxico bank code of the beneficiary bank
Example: `40128` | | M |
Example Request:
```json
{
"type": "MX_SPEI",
"amount": 150000,
"currency": "MXN",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"customerReference": "1234567",
"paymentDetails": "Payment for invoice 001",
"receiver": {
"name": "Juan Pérez García",
"bankAccountNumber": "012180012345678901",
"localRoutingIdentifier": "40012"
}
}
```
## BKTR [#bktr]
In-house book transfer between Banco Azteca (`AZTKMXMMXXX`) accounts.
* `paymentDetails` is the debit reference (*concepto de pago*) shown on the sender's statement.
* `customerReference` is the payment reference (*concepto de pago*) shown to the receiver.
* If `customerReference` is omitted, Acme default the mandatory `paymentDetails` value in both fields.
* The beneficiary account is always treated as a checking account.
* Book transfers (traspasos) and comprobantes are expected to be completed within 1 minute.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Free text | 30 | O |
| paymentDetails | Free text | 30 | M |
| receiver.name | Free text | 60 | M |
| receiver.bankAccountNumber | Numeric Banco Azteca account number (14 or 20 digits) | 20 | M |
Example Request:
```json
{
"type": "BKTR",
"amount": 150000,
"currency": "MXN",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"customerReference": "Pago de servicios",
"paymentDetails": "Payment for invoice 001",
"receiver": {
"name": "Comercializadora Azteca SA de CV",
"bankAccountNumber": "12345678901234"
}
}
```
# Acme CIMB Singapore Payments (API) (https://docs.tryacme.com/guides/cimb-api-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through CIMB API 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 ` `
* BIC11:
* 11-character Bank Identifier Code
## General notes [#general-notes]
* The format for BIC (used in `receiver.bank`) 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)).
## FAST [#fast]
* `customerReference` must be uniquely defined to serve as the end-to-end identifier.
* 4 letter purpose code is required for SG FAST payment. Refer to this [list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf) from ABS Singapore for the list of official purpose codes supported.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 35 | O * Acme auto-generate if not provided |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | `^[A-Za-z0-9]{1,4}$` | 4 | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric (BIC/SWIFT code) | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
Example payload:
```json
{
"senderAccountId": "intacc_XXXXXXXXXXXXX",
"type": "FAST",
"amount": 100,
"currency": "SGD",
"receiver": {
"bankAccountNumber": "0123456789",
"name": "Acme Technology Pte. Ltd.",
"bank": "DBSSSGSGXXX"
},
"purposeCode": "OTHR",
"paymentDetails": "FAST xfer to DBS for INV001",
"customerReference": "0FR4123968T"
}
```
## BKTR [#bktr]
* Use `BKTR` type for In-house Book Transfer within CIMB SG.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 19 | O * Acme auto-generate if not provided |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
Example payload:
```json
{
"senderAccountId": "intacc_XXXXXXXXXXXXX",
"type": "BKTR",
"amount": 100,
"currency": "SGD",
"receiver": {
"bankAccountNumber": "1234567890"
},
"paymentDetails": "In House Transfer for INV002",
"customerReference": "0SR5123967T"
}
```
## TT [#tt]
* `bankChargeBearer` is required.
* `paymentAdviceEmails` accepts at most 1 email.
* `purposeCode` is optional. Provide a 1 to 4 character ISO 20022 ExternalPurpose code that describes the nature of the transaction. See the [supported purpose codes](#tt-purpose-codes) below.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| bankChargeBearer | `SENDER`, `RECEIVER`, `SHARED` | - | M |
| customerReference | SWIFT | 35 | O * Acme auto-generate if not provided |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | `^[A-Za-z0-9]{1,4}$` (ISO 20022 ExternalPurpose code)
Example: `SALA`, `GDDS` | 4 | O |
| paymentAdviceEmails | email | 1 email, 100 chars | O |
| receiver.name | SWIFT | 100 | M |
| receiver.bank | Alphanumeric (BIC/SWIFT code, 8 or 11 chars) | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 40 | M |
| 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 |
Example payload:
```json
{
"senderAccountId": "intacc_XXXXXXXXXXXXX",
"type": "TT",
"amount": 100000,
"currency": "USD",
"receiver": {
"bankAccountNumber": "000123456789",
"name": "Overseas Partner Corp",
"bank": "CHASUS33XXX",
"address": {
"line1": "270 Park Avenue",
"line2": "New York NY 10017",
"city": "New York",
"state": "NY",
"postalCode": "10017",
"country": "US"
}
},
"bankChargeBearer": "SHARED",
"paymentAdviceEmails": ["ops@example.com"],
"purposeCode": "GDDS",
"customerReference": "0TT4123968T"
}
```
Supported purpose codes
The following ISO 20022 ExternalPurpose codes are supported for the `purposeCode` field.
View the full list of supported purpose codes
| code | description |
| --- | --- |
| `ACCT` | Account Management |
| `ADCS` | Advisory Donation Copyright Services |
| `ADMG` | Administrative Management |
| `ADVA` | Advance Payment |
| `AEMP` | Active Employment Policy |
| `AGRT` | Agricultural Transfer |
| `AIRB` | Air |
| `ALLW` | Allowance |
| `ALMY` | Alimony Payment |
| `AMEX` | Amex |
| `ANNI` | Annuity |
| `ANTS` | Anesthesia Services |
| `AREN` | Accounts Receivables Entry |
| `AUCO` | Authenticated Collections |
| `B112` | Trailer Fee Payment |
| `BBSC` | Baby Bonus Scheme |
| `BCDM` | Bearer Cheque Domestic |
| `BCFG` | Bearer Cheque Foreign |
| `BECH` | Child Benefit |
| `BENE` | Unemployment Disability Benefit |
| `BEXP` | Business Expenses |
| `BFWD` | Bond Forward |
| `BKDF` | Bank Loan Delayed Draw Funding |
| `BKFE` | Bank Loan Fees |
| `BKFM` | Bank Loan Funding Memo |
| `BKIP` | Bank Loan Accrued Interest Payment |
| `BKPP` | Bank Loan Principal Paydown |
| `BLDM` | Building Maintenance |
| `BNET` | Bond Forward Netting |
| `BOCE` | Back Office Conversion Entry |
| `BOND` | Bonds |
| `BONU` | Bonus Payment |
| `BR12` | Trailer Fee Rebate |
| `BUSB` | Bus |
| `CABD` | Corporate Actions Bonds |
| `CAEQ` | Corporate Actions Equities |
| `CAFI` | Custodian Management Fee Inhouse |
| `CASH` | Cash Management Transfer |
| `CBCR` | Credit Card |
| `CBFF` | Capital Building |
| `CBFR` | Capital Building Retirement |
| `CBLK` | Card Bulk Clearing |
| `CBTV` | Cable TV Bill |
| `CCHD` | Cash Compensation Helplessness Disability |
| `CCIR` | Cross Currency IRS |
| `CCPC` | CCP Cleared Initial Margin |
| `CCPM` | CCP Cleared Variation Margin |
| `CCRD` | CreditCardPayment |
| `CCSM` | CCP Cleared Initial Margin Segregated Cash |
| `CDBL` | Credit Card Bill |
| `CDCB` | Card Payment With Cash Back |
| `CDCD` | Cash Disbursement Cash Settlement |
| `CDCS` | Cash Disbursement With Surcharging |
| `CDDP` | Card Deferred Payment |
| `CDEP` | Credit Default Event Payment |
| `CDOC` | Original Credit |
| `CDQC` | Quasi Cash |
| `CFDI` | Capital Falling Due Inhouse |
| `CFEE` | Cancellation Fee |
| `CGDD` | Card Generated Direct Debit |
| `CHAR` | Charity Payment |
| `CLPR` | Car Loan Principal Repayment |
| `CMDT` | Commodity Transfer |
| `COLL` | Collection Payment |
| `COMC` | Commercial Payment |
| `COMM` | Commission |
| `COMP` | Compensation Payment |
| `COMT` | Consumer Third Party Consolidated Payment |
| `CORT` | Trade Settlement Payment |
| `COST` | Costs |
| `CPEN` | Cash Penalties |
| `CPKC` | Carpark Charges |
| `CPYR` | Copyright |
| `CRDS` | CreditDefaultSwap |
| `CRPR` | Cross Product |
| `CRSP` | Credit Support |
| `CRTL` | Credit Line |
| `CSDB` | Cash Disbursement Cash Management |
| `CSLP` | Company Social Loan Payment To Bank |
| `CVCF` | Convalescent Care Facility |
| `DBCR` | Debit Card |
| `DBTC` | Debit Collection Payment |
| `DCRD` | Debit Card Payment |
| `DEPD` | Dependent Support Payment |
| `DEPT` | Deposit |
| `DERI` | Derivatives |
| `DICL` | Diners |
| `DIVD` | Dividend |
| `DMEQ` | Durable Medicale Equipment |
| `DNTS` | Dental Services |
| `DSMT` | Printed Order Disbursement |
| `DVPM` | Deliver Against Payment |
| `ECPG` | Guaranteed EPayment |
| `ECPR` | EPayment Return |
| `ECPU` | Non Guaranteed EPayment |
| `EDUC` | Education |
| `EFTC` | Low Value Credit |
| `EFTD` | Low Value Debit |
| `ELEC` | Electricity Bill |
| `ENRG` | Energies |
| `EPAY` | Epayment |
| `EQPT` | EquityOption |
| `EQTS` | Equities |
| `EQUS` | Equity Swap |
| `ESTX` | Estate Tax |
| `ETUP` | EPurse Top Up |
| `EXPT` | Exotic Option |
| `EXTD` | Exchange Traded Derivatives |
| `FACT` | Factor Update Related Payment |
| `FAND` | Financial Aid In Case Of Natural Disaster |
| `FCOL` | Fee Collection |
| `FCPM` | Late Payment Of Fees And Charges |
| `FEES` | Payment Of Fees |
| `FERB` | Ferry |
| `FIXI` | Fixed Income |
| `FLCR` | Fleet Card |
| `FNET` | Futures Netting Payment |
| `FORW` | Forward Foreign Exchange |
| `FREX` | Foreign Exchange |
| `FUTR` | Futures |
| `FWBC` | Forward Broker Owned Cash Collateral |
| `FWCC` | Forward Client Owned Cash Collateral |
| `FWLV` | Foreign Worker Levy |
| `FWSB` | Forward Broker Owned Cash Collateral Segregated |
| `FWSC` | Forward Client Owned Segregated Cash Collateral |
| `FXNT` | Foreign Exchange Related Netting |
| `GAFA` | Government Family Allowance |
| `GAHO` | Government Housing Allowance |
| `GAMB` | Gambling Or Wagering Payment |
| `GASB` | Gas Bill |
| `GDDS` | Purchase Sale Of Goods |
| `GDSV` | Purchase Sale Of Goods And Services |
| `GFRP` | Guarantee Fund Rights Payment |
| `GIFT` | Gift |
| `GOVI` | Government Insurance |
| `GOVT` | Government Payment |
| `GSCB` | Purchase Sale Of Goods And Services With Cash Back |
| `GSTX` | Goods Services Tax |
| `GVEA` | Austrian Government Employees Category A |
| `GVEB` | Austrian Government Employees Category B |
| `GVEC` | Austrian Government Employees Category C |
| `GVED` | Austrian Government Employees Category D |
| `GWLT` | Goverment War Legislation Transfer |
| `HEDG` | Hedging |
| `HLRP` | Property Loan Repayment |
| `HLST` | Property Loan Settlement |
| `HLTC` | Home Health Care |
| `HLTI` | Health Insurance |
| `HREC` | Housing Related Contribution |
| `HSPC` | HospitalCare |
| `HSTX` | Housing Tax |
| `ICCP` | Irrevocable Credit Card Payment |
| `ICRF` | Intermediate Care Facility |
| `IDCP` | Irrevocable Debit Card Payment |
| `IHRP` | Instalment Hire Purchase Agreement |
| `INPC` | Insurance Premium Car |
| `INPR` | Insurance Premium Refund |
| `INSC` | Payment Of Insurance Claim |
| `INSM` | Installment |
| `INSU` | Insurance Premium |
| `INTC` | Intra Company Payment |
| `INTE` | Interest |
| `INTP` | Intra Party Payment |
| `INTX` | Income Tax |
| `INVS` | Investment And Securities |
| `IPAY` | Instant Payments |
| `IPCA` | Instant Payments Cancellation |
| `IPDO` | Instant Payments For Donations |
| `IPEA` | Instant Payments In ECommerce Without Address Data |
| `IPEC` | Instant Payments In ECommerce With Address Data |
| `IPEW` | Instant Payments In ECommerce |
| `IPPS` | Instant Payments At POS |
| `IPRT` | Instant Payments Return |
| `IPU2` | Instant Payments Unattended Vending Machine With 2FA |
| `IPUW` | Instant Payments Unattended Vending Machine Without 2FA |
| `IVPT` | Invoice Payment |
| `LBIN` | Lending Buy In Netting |
| `LBRI` | Labor Insurance |
| `LCOL` | Lending Cash Collateral Free Movement |
| `LFEE` | Lending Fees |
| `LICF` | License Fee |
| `LIFI` | Life Insurance |
| `LIMA` | Liquidity Management |
| `LMEQ` | Lending Equity Marked To Market Cash Collateral |
| `LMFI` | Lending Fixed Income Marked To Market Cash Collateral |
| `LMRK` | Lending Unspecified Type Of Marked To Market Cash Collateral |
| `LOAN` | Loan |
| `LOAR` | Loan Repayment |
| `LOTT` | Lottery Payment |
| `LREB` | Lending Rebate Payments |
| `LREV` | Lending Revenue Payments |
| `LSFL` | Lending Claim Payment |
| `LTCF` | Long Term Care Facility |
| `MAFC` | Medical Aid Fund Contribution |
| `MARF` | Medical Aid Refund |
| `MARG` | DailyMarginOnListedDerivatives |
| `MBSB` | MBS Broker Owned Cash Collateral |
| `MBSC` | MBS Client Owned Cash Collateral |
| `MCDM` | Multi Curreny Cheque Domestic |
| `MCFG` | Multi Curreny Cheque Foreign |
| `MDCS` | Medical Services |
| `MGCC` | Futures Initial Margin |
| `MGSC` | Futures Initial Margin Client Owned Segregated Cash Collateral |
| `MOMA` | Money Market |
| `MP2B` | Mobile P2B Payment |
| `MP2P` | Mobile P2P Payment |
| `MSVC` | Multiple Service Types |
| `MTUP` | MobileTopUp |
| `NETT` | Netting |
| `NITX` | Net Income Tax |
| `NOWS` | Not Otherwise Specified |
| `NWCH` | Network Charge |
| `NWCM` | Network Communication |
| `OCCC` | Client Owned OCC Pledged Collateral |
| `OCDM` | Order Cheque Domestic |
| `OCFG` | Order ChequeF oreign |
| `OFEE` | Opening Fee |
| `OPBC` | OTC Option Broker Owned Cash Collateral |
| `OPCC` | OTC Option Client Owned Cash Collateral |
| `OPSB` | OTC Option Broker Owned Segregated Cash Collateral |
| `OPSC` | OTC Option Client Owned Cash Segregated Cash Collateral |
| `OPTN` | FX Option |
| `OTCD` | OTC Derivatives |
| `OTHR` | Other |
| `OTLC` | Other Telecom Related Bill |
| `PADD` | PreauthorizedDebit |
| `PAYR` | Payroll |
| `PCOM` | Property Completion Payment |
| `PDEP` | Property Deposit |
| `PEFC` | Pension Fund Contribution |
| `PENO` | Payment Based On Enforcement Order |
| `PENS` | Pension Payment |
| `PHON` | Telephone Bill |
| `PLDS` | Property Loan Disbursement |
| `PLRF` | Property Loan Refinancing |
| `POPE` | Point Of Purchase Entry |
| `PPTI` | Property Insurance |
| `PRCP` | Price Payment |
| `PRME` | Precious Metal |
| `PTSP` | Payment Terms |
| `PTXP` | Property Tax |
| `RAPI` | Rapid Payment Instruction |
| `RCKE` | Represented Check Entry |
| `RCPT` | Receipt Payment |
| `RDTX` | Road Tax |
| `REBT` | Rebate |
| `REFU` | Refund |
| `RELG` | Rental Lease General |
| `RENT` | Rent |
| `REOD` | Account Overdraft Repayment |
| `REPO` | Repurchase Agreement |
| `RETL` | Retail Payment |
| `RHBS` | Rehabilitation Support |
| `RIMB` | Reimbursement Of A Previous Erroneous Transaction |
| `RINP` | Recurring Installment Payment |
| `RLWY` | Railway |
| `ROYA` | Royalties |
| `RPBC` | Bilateral Repo Broker Owned Collateral |
| `RPCC` | Repo Client Owned Collateral |
| `RPNT` | Bilateral Repo Internet Netting |
| `RPSB` | Bilateral Repo Broker Owned Segregated Cash Collateral |
| `RPSC` | Bilateral Repo Client Owned Segregated Cash Collateral |
| `RRBN` | Round Robin |
| `RRCT` | Reimbursement Received Credit Transfer |
| `RRTP` | Related Request To Pay |
| `RVPM` | Receive Against Payment |
| `RVPO` | Reverse Repurchase Agreement |
| `SALA` | Salary Payment |
| `SASW` | ATM |
| `SAVG` | Savings |
| `SBSC` | Securities Buy Sell Sell Buy Back |
| `SCIE` | Single Currency IRS Exotic |
| `SCIR` | Single Currency IRS |
| `SCRP` | Securities Cross Products |
| `SCVE` | Purchase Sale Of Services |
| `SECU` | Securities |
| `SEPI` | Securities Purchase Inhouse |
| `SERV` | Service Charges |
| `SHBC` | Broker Owned Collateral Short Sale |
| `SHCC` | Client Owned Collateral Short Sale |
| `SHSL` | Short Sell |
| `SLEB` | Securities Lending And Borrowing |
| `SLOA` | Secured Loan |
| `SLPI` | Payment Slip Instruction |
| `SPLT` | Split Payments |
| `SPSP` | Salary Pension Sum Payment |
| `SSBE` | Social Security Benefit |
| `STDY` | Study |
| `SUBS` | Subscription |
| `SUPP` | Supplier Payment |
| `SWBC` | Swap Broker Owned Cash Collateral |
| `SWCC` | Swap Client Owned Cash Collateral |
| `SWFP` | Swap Contract Final Payment |
| `SWPP` | Swap Contract Partial Payment |
| `SWPT` | Swaption |
| `SWRS` | Swap Contract Reset Payment |
| `SWSB` | Swaps Broker Owned Segregated Cash Collateral |
| `SWSC` | Swaps Client Owned Segregated Cash Collateral |
| `SWUF` | Swap Contract Upfront Payment |
| `TAXR` | Tax Refund |
| `TAXS` | Tax Payment |
| `TBAN` | TBA Pair Off Netting |
| `TBAS` | To Be Announced |
| `TBBC` | TBA Broker Owned Cash Collateral |
| `TBCC` | TBA Client Owned Cash Collateral |
| `TBIL` | Telecommunications Bill |
| `TCSC` | Town Council Service Charges |
| `TELI` | Telephone Initiated Transaction |
| `TLRF` | Non US Mutual Fund Trailer Fee Payment |
| `TLRR` | Non US Mutual Fund Trailer Fee Rebate Payment |
| `TMPG` | TMPG Claim Payment |
| `TPRI` | Tri Party Repo Interest |
| `TPRP` | Tri Party Repo Netting |
| `TRAD` | Commercial |
| `TRCP` | Treasury Cross Product |
| `TREA` | Treasury Payment |
| `TRFD` | Trust Fund |
| `TRNC` | Truncated Payment Slip |
| `TRPT` | Road Pricing |
| `TRVC` | Traveller Cheque |
| `UBIL` | Utilities |
| `UNIT` | Unit Trust Purchase |
| `VATX` | Value Added Tax Payment |
| `VIEW` | VisionCare |
| `WEBI` | Internet Initiated Transaction |
| `WHLD` | With Holding |
| `WTER` | WaterBill |
# Acme CIMB Singapore (H2H) Payments (https://docs.tryacme.com/guides/cimb-h2h-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
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"
}
}
]
}
```
# Acme Citibank Singapore Payments (https://docs.tryacme.com/guides/citi-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank 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 ` `
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
## FAST [#fast]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 35 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## PAYNOW [#paynow]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 35 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.proxyType | `MOBILE` or `UEN` or `VPA` | | M |
| receiver.proxyValue
for MOBILE | + followed by 7 to 15 digits | 16 | M |
| receiver.proxyValue
for UEN | 9 to 13 alphanumeric characters | 13 | 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 |
## GIRO [#giro]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 105 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
## ACT [#act]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | 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 (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## TT [#tt]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
# Acme Citibank Australia Payments (https://docs.tryacme.com/guides/citi-au-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank Australia. 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
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
## AU_BECS [#au_becs]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 18 | O |
| receiver.name | SWIFT | 32 | M |
| receiver.bankAccountNumber | Numeric | 9 | M |
| receiver.localRoutingIdentifier | Numeric (6 digit BSB) | 6 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## AU_HVCS [#au_hvcs]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bankAccountNumber | Numeric | 9 | M |
| receiver.localRoutingIdentifier | Numeric (6 digit BSB) | 6 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## AU_OSKO [#au_osko]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 18 | O |
| receiver.name | SWIFT | 32 | M |
| receiver.bankAccountNumber | Numeric | 9 | M |
| receiver.localRoutingIdentifier | Numeric (6 digit BSB) | 6 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## TT [#tt]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## ACT [#act]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
# Acme Citibank Brazil Payments (https://docs.tryacme.com/guides/citi-br-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank Brazil (BIC: `CITIBRBRXXX`). These will be validated by Acme and further validated by
the bank. These rules may be stricter than what the bank requires.
Field paths below match batch payloads (`payments[N].…` per inlined payment).
### 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
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
### Supported payment types (Citi Brasil) [#supported-payment-types-citi-brasil]
| Type | Description | Currency | Amount / notes |
| --- | --- | --- | --- |
| `BR_BOLETO` | Boleto (bank slip) | BRL only | 1–99,999,999 (minor units) |
| `BR_UTILITY` | Utility bill (barcode) | BRL only | 1–99,999,999 |
| `BR_TAX_BARCODE` | Tax payment (`receiver.barCode`) | BRL only | 1–99,999,999 |
| `BR_DIPHASED` | Diphased transfer | BRL only | 1–99,999,999 |
| `BR_PIX` | PIX | BRL only | 1–99,999,999 |
## BR_BOLETO [#br_boleto]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric | 15 | M |
| paymentDetails | Optional; `/PMD*` / `/LALx/` prefix rules if prefixed | 140 | O |
| receiver.barCode | Numeric, 44 - 47 digits | 47 | M |
| paymentAdviceEmails | Valid email, max 1 | 50 per email | O |
| receiver.name | SWIFT | 70 | M |
| receiver.taxId | Alphanumeric | 20 | M |
| receiver.branchId | Numeric | 8 | O |
| receiver.address | SWIFT | 35 chars x 3 | O |
## BR_UTILITY [#br_utility]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric | 15 | M |
| paymentDetails | Optional; `/PMD*` / `/LALx/` prefix rules if prefixed | 140 | O |
| receiver.barCode | Numeric, 44 - 48 digits, starts with 8 | 48 | M |
| receiver.name | SWIFT | 70 | M |
| receiver.bank | Alphanumeric (BIC) | 11 | O |
| receiver.branchId | Numeric, 4 digits | 4 | O |
| receiver.address | SWIFT | 35 chars x 3 | O |
## BR_TAX_BARCODE [#br_tax_barcode]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric | 15 | M |
| taxDate | `yyyy-MM-dd` (optional) | 10 | O |
| paymentDetails | Optional remittance | 140 | O |
| receiver.barCode | Numeric | 50 | M |
| receiver.name | SWIFT | 70 | M |
| receiver.bank | Alphanumeric (BIC) | 11 | O |
| receiver.branchId | Numeric, 4 digits | 4 | O |
| receiver.address | SWIFT | 35 chars x 3 | O |
## BR_DIPHASED [#br_diphased]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric | 15 | M |
| paymentDetails | Optional; `/PMD*` / `/LALx/` prefix rules if prefixed | 140 | O |
| instructionForSenderBank | Forbidden (omit) | — | — |
| paymentAdviceEmails | Valid email, max 1 | 50 per email | O |
| receiver.name | SWIFT | 70 | M |
| receiver.bankAccountNumber | Numeric, 6–10 digits | 10 | M |
| receiver.localRoutingIdentifier | Numeric (bank code) | 8 | O |
| receiver.taxId | Alphanumeric | 20 | M |
| receiver.branchId | Numeric | 8 | M |
| receiver.address.line1 | SWIFT | 35 | M |
## BR_PIX [#br_pix]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric | 32 | M |
| paymentDetails | Optional; `/PMD*` / `/LALx/` prefix rules if prefixed | 140 | O |
| instructionForSenderBank | Forbidden (omit) | — | — |
| paymentAdviceEmails | Valid email, max 1 | 50 per email | O |
| receiver.name | SWIFT | 80 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.localRoutingIdentifier | Numeric (bank code) | 8 | M |
| receiver.taxId | Alphanumeric | 20 | M |
| receiver.branchId | Numeric | 8 | M |
| receiver.address.line1 | SWIFT | 35 | M |
# Acme Citibank China Payments (https://docs.tryacme.com/guides/citi-cn-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank China. 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 ` `
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
* Acme does not apply a China bank-holiday calendar. The bank may still reject a `paymentDate` that is not a CN working day.
## CN_ACH [#cn_ach]
China domestic ACH transfer.
* Currency must be **CNY only**.
* Payment date cannot be in the past. Maximum 65 days forward.
* `bankChargeBearer` and `instructionForSenderBank` must not be provided.
* `receiver.intermediaryBank` and `receiver.address.line1`/`line2`/`state`/`postalCode` must not be provided; only `city` and `country` are accepted.
* `receiver.name` and `receiver.bank` may be English or Chinese. Backtick is not allowed.
* Provide `receiver.accountName` only if it differs from `receiver.name`. If provided, the bank uses the account name instead of the beneficiary name.
* `categoryPurpose` is a batch-level field. `receiver.address.city` is required.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| categoryPurpose (at batch level) | One of `BONU` `CASH` `CCRD` `CORT` `DCRD` `DIVI` `EPAY` `GOVT` `HEDG` `ICCP` `IDCP` `INTC` `INTE` `LOAN` `OTHR` `PENS` `SALA` `SECU` `SSBE` `SUPP` `TAXS` `TRAD` `TREA` `VATX` `WHLD` | 4 | O |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | English or Chinese | 70 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].transferLocality | `INTRA_CITY` or `INTER_CITY` | | M |
| payments[N].receiver.name | English or Chinese; backtick not allowed | 60 | M |
| payments[N].receiver.bank | English or Chinese; backtick not allowed | 60 | M |
| payments[N].receiver.bankAccountNumber | Numeric | 32 | M |
| payments[N].receiver.localRoutingIdentifier | Numeric | 12 | O |
| payments[N].receiver.accountName | English or Chinese | 44 | O |
| payments[N].receiver.address.city | English or Chinese | 35 | M |
| payments[N].receiver.address.country | Fixed value `CN` | 2 | O |
## CN_RTGS [#cn_rtgs]
China domestic RTGS transfer for high-value payments.
* Currency must be **CNY only**.
* Payment date cannot be in the past. Maximum 90 days forward.
* `receiver.localRoutingIdentifier` must be exactly 12 digits (CNAPS).
* `receiver.bank` is optional.
* `bankChargeBearer`, `instructionForSenderBank`, `transferLocality`, `purposeCode`, `receiver.intermediaryBank`, and `receiver.address` must not be provided.
* `receiver.name`, `receiver.bank`, and `paymentDetails` must not contain a backtick.
* Provide `receiver.accountName` only if it differs from `receiver.name`. If provided, the bank uses the account name instead of the beneficiary name.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | English or Chinese; backtick not allowed | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | English or Chinese; backtick not allowed | 60 | M |
| payments[N].receiver.bank | English or Chinese; backtick not allowed | 60 | O |
| payments[N].receiver.bankAccountNumber | Numeric | 32 | M |
| payments[N].receiver.localRoutingIdentifier | Numeric (exactly 12 digits) | 12 | M |
| payments[N].receiver.accountName | English or Chinese | 60 | O |
## CN_TT_INTL [#cn_tt_intl]
Telegraphic transfer for international payments. Currency must not be CNY; use `CN_TT_DOM` for RMB.
* Currency must **not** be CNY.
* Payment date cannot be in the past. Maximum 90 days forward.
* `receiver.bank` must be a BIC.
* `instructionForSenderBank` and `receiver.localRoutingIdentifier` must not be provided.
* SAFE BOP reporting is required. See [SAFE BOP](#safe-bop). Acme validates list size, string length, and amount shape only.
* Provide `receiver.accountName` only if it differs from `receiver.name`. If provided, the bank uses the account name instead of the beneficiary name.
* `receiver.address.city` and `receiver.address.country` are mandatory. The full address must fit in 3 lines of 35 SWIFT characters.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | English or Chinese; backtick not allowed | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].bankChargeBearer | `SENDER` / `RECEIVER` / `SHARED` | | O |
| payments[N].regulatoryInstructionInfo | Array of strings (include Citi prefixes, e.g. `/CNS1/`) | 35 per entry (max 3) | M |
| payments[N].regulatoryAmounts | Array of `{ amount, currency }`. `amount` is a positive integer in [minor units](/guides/minor-units-format) | max 2 entries | M |
| payments[N].regulatoryInformation | Array of strings. List index is the Inf slot. **Exactly 6** entries; unused slots `""` | 35 per entry | M |
| payments[N].receiver.name | English or Chinese; backtick not allowed | 35 | M |
| payments[N].receiver.bank | BIC (8 or 11 characters, [ISO 9362](https://en.wikipedia.org/wiki/ISO_9362)) | 11 | M |
| payments[N].receiver.intermediaryBank | BIC (8 or 11 characters) | 11 | O |
| payments[N].receiver.bankAccountNumber | SWIFT | 34 | M |
| payments[N].receiver.accountName | English or Chinese | 35 | O |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | M |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | 2 | M |
## CN_TT_DOM [#cn_tt_dom]
RMB cross-border payment. Despite the type name, this is not a domestic FCY rail. Currency must be **CNY only**; use `CN_TT_INTL` for other currencies.
* Currency must be **CNY only**.
* Payment date cannot be in the past. There is no Acme forward-date cap.
* `receiver.bank` is a bank name, not a BIC.
* `receiver.name` and `receiver.bank` must be SWIFT characters. Backtick is not allowed on those fields.
* `instructionForSenderBank`, `receiver.localRoutingIdentifier`, and `receiver.intermediaryBank` must not be provided.
* SAFE BOP reporting is required. See [SAFE BOP](#safe-bop). Acme validates list size, string length, and amount shape only.
* Provide `receiver.accountName` only if it differs from `receiver.name`. If provided, the bank uses the account name instead of the beneficiary name.
* If an address is provided, the full address must fit in 3 lines of 35 SWIFT characters.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 16 | M |
| payments[N].paymentDetails | English or Chinese | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].bankChargeBearer | `SENDER` / `RECEIVER` / `SHARED` | | O |
| payments[N].purposeCode | One of `GOD` `STR` `CTF` `RMT` `OTF` `02112` `02113` `02114` `02115` `02116` `02117` `02123` `02124` `02125` `02127` | | O |
| payments[N].regulatoryInstructionInfo | Array of strings (include Citi prefixes, e.g. `/CNS1/`) | 35 per entry (max 3) | M |
| payments[N].regulatoryAmounts | Array of `{ amount, currency }`. `amount` is a positive integer in [minor units](/guides/minor-units-format) | max 2 entries | M |
| payments[N].regulatoryInformation | Array of strings. List index is the Inf slot. **Exactly 6** entries; unused slots `""` | 35 per entry | M |
| payments[N].receiver.name | SWIFT; backtick not allowed | 35 | M |
| payments[N].receiver.bank | SWIFT (bank name, not BIC); backtick not allowed | 35 | M |
| payments[N].receiver.bankAccountNumber | SWIFT | 34 | M |
| payments[N].receiver.accountName | English or Chinese | 60 | O |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | 2 | O |
## SAFE BOP [#safe-bop]
For `CN_TT_INTL` and `CN_TT_DOM` you must send three payment fields. They are not interchangeable:
| field | Role | How you can tell them apart |
| --- | --- | --- |
| `regulatoryInstructionInfo` | Prefixed remarks and invoice | Every string **starts with** `/CNS1/`, `/CNS2/`, or `/CNIN/` |
| `regulatoryInformation` | SAFE form slots | First string **starts with** `O/C/…` (no `/CNS` prefix). **Always 6 slots**; unused slots are `""` |
| `regulatoryAmounts` | Code 1 / Code 2 money | Objects with `amount` and `currency`, not strings |
Use application form type **`O` (overseas)** for both types. Customer type is **`C` (business)**.
Acme only checks list size, string length (≤35), and amount shape. Citi checks the actual SAFE content.
| field | Limits |
| --- | --- |
| `regulatoryInstructionInfo` | Non-empty; ≤3 strings |
| `regulatoryAmounts` | Non-empty; ≤2. `amount` is [minor units](/guides/minor-units-format) (`1`–`999999999`) |
| `regulatoryInformation` | **Exactly 6** strings. List index = slot (`[0]` is slot 1). Unused slots are `""` |
Use this table with Citi’s *Values — CHINA SAFE BOP Declaration Sub-form*. Join the parts of a slot with `/`.
**`regulatoryInformation`**
| Citi sub-form field | Send as |
| --- | --- |
| Application Form Type | Slot `[0]`, 1st part — use `O` (overseas) |
| Customer Type | Slot `[0]`, 2nd part — use `C` (business) |
| BOP Transaction Code 1 | Slot `[0]`, 3rd part — 6 digits |
| Payment Purpose | Slot `[0]`, 4th part — `A` `D` `R` `O` |
| Name of Applicant | Slot `[0]`, 5th part |
| BOP Transaction Code 2 | Slot `[1]`, 1st part — optional; leave empty if unused |
| Payment classified for bonded goods | Slot `[1]`, 2nd part — `Y` or `N` |
| Applicant Phone Number | Slot `[1]`, 3rd part |
| Payment Character | Slot `[2]` — only if form type is `D` |
| SAFE Approval/Register/Service Number | Slot `[3]`, 1st part — optional |
| Fund Source Type | Slot `[3]`, 2nd part — optional `F` `P` `O` |
| Unit Code For Business | Slot `[4]`, 1st part — required because customer type is `C` |
| Resident Country/Region | Slot `[4]`, 2nd part — 3 characters from the China SAFE country list |
| Contract Number | Slot `[5]` — required when bonded goods is `Y` |
**`regulatoryAmounts`**
| Citi sub-form field | Send as |
| --- | --- |
| BOP Transaction Code 1 Amount | `[0].amount` (minor units) — goes with Inf slot `[0]` |
| BOP Transaction Code 1 Currency | `[0].currency` |
| BOP Transaction Code 2 Amount | `[1].amount` — only if Code 2 is used (Inf slot `[1]`) |
| BOP Transaction Code 2 Currency | `[1].currency` — only if Code 2 is used |
**`regulatoryInstructionInfo`** (each string starts with the code word)
| Citi sub-form field | Send as |
| --- | --- |
| BOP Transaction Code 1 Remark | `/CNS1/{remark}` — required for form type `O` (overseas) |
| BOP Transaction Code 2 Remark | `/CNS2/{remark}` — required for form type `O` (overseas) when Code 2 is used |
| Invoice Number | `/CNIN/{invoice}` — required when bonded goods is `Y` |
### Typical payment [#typical-payment]
Bonded goods `N`, no second BOP code. Send **all 6 strings**. Unused slots (Payment Character, SAFE number, contract) are `""` so later slots stay in position. Replace the `{…}` values.
```json
{
"regulatoryInstructionInfo": ["/CNS1/{code 1 remark}"],
"regulatoryAmounts": [
{ "amount": {same minor units as amount}, "currency": "{payment currency}" }
],
"regulatoryInformation": [
"O/C/{6-digit BOP code}/{purpose}/{applicant name}",
"/N/{phone}",
"",
"",
"{unit code}/{SAFE country}",
""
]
}
```
| Index | Slot | In this template |
| --- | --- | --- |
| `[0]` | 1 | Form, customer, BOP code 1, purpose, applicant name |
| `[1]` | 2 | Code 2 (empty), bonded `N`, phone |
| `[2]` | 3 | `""` — Payment Character, only if form type is `D` |
| `[3]` | 4 | `""` — optional SAFE number / fund source |
| `[4]` | 5 | Unit code + SAFE country |
| `[5]` | 6 | `""` — contract number, only if bonded is `Y` |
Do not skip middle or trailing unused slots. Send `""` so the index still matches the Citi slot.
| Placeholder | What to put |
| --- | --- |
| `{code 1 remark}` | Short remark for BOP code 1 (required for overseas). The whole string including `/CNS1/` must be ≤35 |
| `{6-digit BOP code}` | BOP Transaction Code 1 |
| `{purpose}` | `A` advance payment, `D` payment against delivery, `R` refund, `O` others |
| `{applicant name}` | English ≤20 or Simplified Chinese ≤10 |
| `{phone}` | Applicant phone, ≤20 |
| `{unit code}` | Business unit code Citi issued (required because customer type is `C`) |
| `{SAFE country}` | 3 characters from the China SAFE country list (for example `CHN`) |
### When you need extra fields [#when-you-need-extra-fields]
**Second BOP code**
* Slot `[1]` becomes `{code2}/N/{phone}` (or `Y` if bonded)
* Add `{ "amount": …, "currency": … }` as `regulatoryAmounts[1]` (this amount is sent with Inf slot `[1]`, not as a separate amount-only block)
* Add `/CNS2/{code 2 remark}` to `regulatoryInstructionInfo`
**Bonded goods `Y`**
* Slot `[1]` uses `Y` instead of `N`
* Add `/CNIN/{invoice number}` to `regulatoryInstructionInfo`
* Put the contract number in slot `[5]` instead of `""`
**Optional slot `[3]`**
* `{SAFE approval or register number}/{fund source}`
* Fund source: `F` FX, `P` purchase, `O` others
* If you skip it, keep `""` so later slots do not move
**Domestic form type `D`**
* Do not use `D` for these payment types unless Citi told you to
* If you do, slot `[2]` must be Payment Character: `X` bonded area, `E` export processing zone, `D` diamond exchange, `M` downstream processing, `O` other
### Example: `CN_TT_INTL` [#example-cn_tt_intl]
USD 10,000.00, BOP code `600101`, advance payment, not bonded. Replace `12345678` with your Citi unit code.
```json
{
"amount": 1000000,
"currency": "USD",
"customerReference": "CNTT002",
"bankChargeBearer": "SHARED",
"regulatoryInstructionInfo": ["/CNS1/Trade settlement"],
"regulatoryAmounts": [{ "amount": 1000000, "currency": "USD" }],
"regulatoryInformation": ["O/C/600101/A/Zhang Wei", "/N/13800138000", "", "", "12345678/CHN", ""],
"receiver": {
"name": "Shanghai Export Co",
"bank": "CITIUS33XXX",
"bankAccountNumber": "9876543210",
"accountName": "Shanghai Export Account Title",
"address": {
"line1": "100 Wall Street",
"city": "New York",
"state": "NY",
"postalCode": "10005",
"country": "US"
}
}
}
```
That SAFE block means:
| String | Meaning |
| --- | --- |
| `/CNS1/Trade settlement` | Code 1 remark |
| `O/C/600101/A/Zhang Wei` | Overseas, business, code `600101`, advance, applicant Zhang Wei |
| `/N/13800138000` | No Code 2, not bonded, phone |
| `12345678/CHN` | Unit code + resident country China |
### Example: `CN_TT_DOM` [#example-cn_tt_dom]
Same three SAFE fields. Use **CNY** for `amount` and `regulatoryAmounts`.
```json
{
"amount": 1000000,
"currency": "CNY",
"customerReference": "CNTTDOM0001",
"bankChargeBearer": "SHARED",
"paymentDetails": "Invoice 2024-001",
"regulatoryInstructionInfo": ["/CNS1/Trade settlement"],
"regulatoryAmounts": [{ "amount": 1000000, "currency": "CNY" }],
"regulatoryInformation": ["O/C/600101/A/Zhang Wei", "/N/13800138000", "", "", "12345678/CHN", ""],
"receiver": {
"name": "Shanghai Import Export Co",
"bank": "Bank of Shanghai Co Ltd",
"bankAccountNumber": "9876543210",
"accountName": "账户户名",
"address": {
"line1": "100 Huangpu Road",
"city": "Shanghai",
"country": "CN"
}
}
}
```
# Acme Citibank Indonesia Payments (https://docs.tryacme.com/guides/citi-id-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank Indonesia. 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
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
## ID_SKN [#id_skn]
* Currency must be **IDR only**.
* Amount in Indonesian Rupiah must not have cents / digits after the decimal point (you must send amount ending in `00`).
* Amount maximum 500,000,000 IDR.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].receiver.name | SWIFT | 40 | M |
| payments[N].receiver.bank | BIC | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.residencyStatus | `RESIDENT` / `NON_RESIDENT` | | M |
| payments[N].receiver.beneficiaryType | `INDIVIDUAL` / `CORPORATE` / `GOVERNMENT` | | M |
| payments[N].receiver.citizenshipStatus | `CITIZEN` / `NON_CITIZEN` | | M |
| payments[N].receiver.address | SWIFT | 35 chars x 3 | O |
## TT [#tt]
* Purpose code (*Sandi Tujuan Transaksi*) is required. Please contact the bank for the list.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 105 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].bankChargeBearer | `SENDER` / `RECEIVER` / `SHARED` | | O |
| payments[N].purposeCode | 4 digit purpose code | 4 | M |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | Alphanumeric | 11 | M |
| payments[N].receiver.intermediaryBank | Alphanumeric | 11 | O |
| payments[N].receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| payments[N].receiver.address | SWIFT | 35 chars x 3 | O |
## BKTR [#bktr]
* Amount in Indonesian Rupiah must not have cents / digits after the decimal point (you must send amount ending in `00`).
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 105 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address | SWIFT | 35 chars x 3 | O |
## ID_FAST [#id_fast]
* Currency must be **IDR only**.
* Amount in Indonesian Rupiah must not have cents / digits after the decimal point (you must send amount ending in `00`).
* Purpose code (*Sandi Tujuan Transaksi*) is required. Please contact the bank for the list.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].bankChargeBearer | `SENDER` / `RECEIVER` / `SHARED` | | M |
| payments[N].purposeCode | 2 digit purpose code | 2 | M |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | Alphanumeric (BIC) | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
## ID_RTGS [#id_rtgs]
* Currency must be **IDR only**.
* Amount in Indonesian Rupiah must not have cents / digits after the decimal point (you must send amount ending in `00`).
* Amount mininum > IDR 100,000,000. For amounts ≤ IDR 100,000,000, use ACH Credit/GIRO instead.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 105 | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].bankChargeBearer | `SENDER` / `RECEIVER` / `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 40 | M |
| payments[N].receiver.bank | Alphanumeric (BIC) | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | Numeric (7 digits exactly) | 7 | M |
| payments[N].receiver.residencyStatus | `RESIDENT` / `NON_RESIDENT` | | M |
| payments[N].receiver.citizenshipStatus | `CITIZEN` / `NON_CITIZEN` | | M |
| payments[N].receiver.bankName | SWIFT | 35 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | M |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | SWIFT | 35 | O |
# Acme Citibank Korea Payments (https://docs.tryacme.com/guides/citi-kr-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank Korea. 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
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
## ACT [#act]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## KR_DFT [#kr_dft]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## TT [#tt]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
# Acme Citibank Malaysia Payments (https://docs.tryacme.com/guides/citi-my-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank Malaysia. 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 ` `
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
## MY_IBFT [#my_ibft]
* Currency must be **MYR only**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].receiver.residencyStatus | `RESIDENT` or `NON_RESIDENT` | | M |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | Alphanumeric | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address | SWIFT | 35 chars x 3 | O |
## MY_IBG [#my_ibg]
* Currency must be **MYR only**.
* Amount maximum 1,000,000 MYR.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | Alphanumeric | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address | SWIFT | 35 chars x 3 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
## MY_DUITNOW [#my_duitnow]
* Currency must be **MYR only**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.residencyStatus | `RESIDENT` or `NON_RESIDENT` | | M |
| payments[N].receiver.proxyType | `MOBILE` or `BUSINESS_REG` or `PASSPORT` or `NRIC` | | M |
| payments[N].receiver.proxyValue
for PASSPORT | passport number followed by [3 letter ISO 3166-1 country code](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3)
e.g. `A12345678MYS` for Malaysia passport A12345678 | 15 | M |
| payments[N].receiver.proxyValue
for other types | SWIFT | 15 | M |
| payments[N].receiver.address | SWIFT | 35 chars x 3 | O |
## MY_RENTAS [#my_rentas]
* Currency must be **MYR only**.
* Amount minimum 10,000 MYR.
* Purpose code is required. Please contact the bank for the list.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 116 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| payments[N].purposeCode | 5 digit purpose code | 5 | M |
| payments[N].receiver.residencyStatus | `RESIDENT` or `NON_RESIDENT` | | M |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | Alphanumeric | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.city | SWIFT | 30 | M |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.line3 | SWIFT | 35 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
## TT [#tt]
* Purpose code is required. Please contact the bank for the list.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| payments[N].purposeCode | 5 digit purpose code | 5 | M |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | Alphanumeric (BIC/SWIFT code) | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric + Dash | 34 | M |
| payments[N].receiver.address.city | SWIFT | 30 | M |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.line3 | SWIFT | 35 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
## BKTR [#bktr]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | M |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.city | SWIFT | 30 | M |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.line3 | SWIFT | 35 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
## MY_JOMPAY [#my_jompay]
* Currency must be **MYR only**.
* recipientRef2 allowed characters: `0-9`, `A-Z`, `a-z`, Space, and special characters: `? @ [ \ ] ^ _` `` ` `` `\{ | \} ~`
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].receiver.name | SWIFT | 35 | O |
| payments[N].receiver.billerCode | Alphanumeric | 8 | M |
| payments[N].receiver.recipientRef1 | Alphanumeric | 20 | M |
| payments[N].receiver.recipientRef2 | Alphanumeric + special chars* | 30 | O |
| payments[N].receiver.address.city | SWIFT | 30 | M |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.line3 | SWIFT | 35 | O |
# Acme Citibank Taiwan Payments (H2H) (https://docs.tryacme.com/guides/citi-tw-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank Taiwan (CITITWTXXXX). 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
### Citibank restrictions [#citibank-restrictions]
* For SWIFT character set: Citibank may reject fields that start with `/`, `-`, or `:`.
### Receiver address mapping: [#receiver-address-mapping]
* `receiver.address.city` and `receiver.address.country` map to dedicated structured fields (`TwnNm` and `Ctry`) in the bank file.
* For `BKTR`, the bank file always sends `Ctry` as `TW` regardless of what the client sends; Acme only validates that `receiver.address.country` is `TW` when provided.
* `receiver.address.line1` and `receiver.address.line2` each take a dedicated `AdrLine` slot when present.
* `receiver.address.city`, `receiver.address.state`, `receiver.address.postalCode`, and `receiver.address.country` are additionally combined into any remaining `AdrLine` capacity, so they may appear in both structured fields and address lines (for example, `city` = `Taipei` and `country` = `TW` can produce `Taipei`, `TW`, and `Taipei TW`).
* The full address must fit in **3 lines of 35 SWIFT characters**. `line1` and `line2` take priority over the combined remainder; if the address cannot be formatted within those limits, Acme rejects the request.
## BKTR [#bktr]
Book transfer between accounts held at Citibank Taiwan (CITITWTXXXX).
* For TWD, the amount must not have cents / digits after the decimal point (you must send amount ending in `00`).
* `paymentDate` cannot be in the past. Maximum 21 days forward.
* `receiver.address.country` is fixed to `TW`.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | Fixed value `TW` | 2 | O |
## TT [#tt]
Telegraphic transfer for international payments.
* Payment date cannot be in the past. Maximum 21 days forward.
* For TWD, the amount must not have cents / digits after the decimal point (you must send amount ending in `00`).
* Taiwan Central Bank regulatory reporting enforces `beneficiaryType`, `transactionNature`, `purposeCode`, `subCode`, and `specialApproval`. Acme assembles them into a `/TWNREG/[beneficiaryType][transactionNature][purposeCode][subCode][specialApproval][internetBankingFlag]` string for the bank. Acme sets `internetBankingFlag` to `W`; clients do not send this field.
* Refer to the **Taiwan Central Bank Reporting Code** provided by Citibank for the specification.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].instructionForSenderBank | SWIFT | 35 | O |
| payments[N].bankChargeBearer | `SENDER` / `RECEIVER` / `SHARED` | | O |
| payments[N].beneficiaryType | `1` Government / `2` Public / `3` Private / `4` FX Funds | 1 | M |
| payments[N].transactionNature | One of `S` `Y` `B` `A` `C` `I` `G` `J` `E` `R` `T` `X` `4` | 1 | M |
| payments[N].purposeCode | Alphanumeric (`0`-`9`, `A`-`Z`), exactly 3 characters
Example: `194` | 3 | M |
| payments[N].subCode | One of `A` `B` `C` `D` `E` `F` `G` `I` `R` `S` `T` `X` `Y` `Z`
Required when `purposeCode` is `692`, `693`, or `695`. Optional otherwise. | 1 | Conditional |
| payments[N].specialApproval | `Y` / `N` | 1 | M |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC (8 or 11 characters, [ISO 9362](https://en.wikipedia.org/wiki/ISO_9362)) | 11 | M |
| payments[N].receiver.intermediaryBank | BIC (8 or 11 characters) | 11 | O |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | M |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | 2 | M |
## TW_ACH [#tw_ach]
Taiwan domestic ACH transfer.
* Currency must be **TWD only**.
* The amount must not have cents / digits after the decimal point (you must send amount ending in `00`).
* Payment date cannot be in the past. Maximum 365 days forward.
* `receiver.name` must be in Han script (Chinese characters).
* `receiver.bankName` is the beneficiary bank name (not a BIC). English or Chinese are both accepted.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | Han script (Chinese) only | 70 | M |
| payments[N].receiver.bankName | SWIFT or Chinese (not a BIC)
Example: `DBS BANK (TAIWAN) LTD` | 140 | M |
| payments[N].receiver.localRoutingIdentifier | Numeric (7 digits exactly) | 7 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | 2 | O |
## TW_RTGS [#tw_rtgs]
Taiwan domestic RTGS transfer for high-value payments.
* Currency must be **TWD only**.
* The amount must not have cents / digits after the decimal point (you must send amount ending in `00`).
* Payment date cannot be in the past. Maximum 365 days forward.
* `receiver.name` must be in Han script (Chinese characters).
* If `address` is provided, both `city` and `country` are mandatory.
* `receiver.bankName` is the beneficiary bank name (not a BIC). English or Chinese are both accepted. Citi rejects RTGS without this name.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 50 per email (max 1 email) | O |
| payments[N].receiver.name | Han script (Chinese) only | 70 | M |
| payments[N].receiver.bankName | SWIFT or Chinese (not a BIC)
Example: `DBS BANK (TAIWAN) LTD` | 140 | M |
| payments[N].receiver.localRoutingIdentifier | Numeric (7 digits exactly) | 7 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 35 | O |
| payments[N].receiver.address.country | [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) | 2 | O |
# Acme Citibank US Payments (https://docs.tryacme.com/guides/citi-us-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Citibank US. 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
* Citi restrictions:
* For SWIFT character set: do not start a field with any of the following characters: `/`, `-`, `:`
## US_ACH [#us_ach]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| subtype (at batch level) | `CCD` or `PPD` | | M |
| customerReference | SWIFT (uppercase only) | 15 | M |
| paymentDetails | SWIFT | 80 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 22 | M |
| receiver.bankAccountNumber | Numeric | 17 | M |
| receiver.bankName | SWIFT | 35 | M |
| receiver.accountType | `CHECKING` or `SAVINGS` | | M |
| receiver.localRoutingIdentifier | Numeric (routing number) | 9 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
Note: `CCD` subtype is for sending to corporate accounts, it can only send to `CHECKING` account type. `PPD` subtype is for sending to personal accounts, it can use either `CHECKING` or `SAVINGS`.
Example:
```json
{
"type": "US_ACH",
"subtype": "CCD",
"currency": "USD",
"payments": [
{
"amount": 100,
"customerReference": "REF 01",
"receiver": {
"name": "Recipient Name",
"bankName": "Test Bank",
"localRoutingIdentifier": "123456789",
"bankAccountNumber": "987654321",
"accountType": "CHECKING"
}
},
{
"amount": 200,
"customerReference": "REF 02",
"receiver": {
"name": "Recipient Two",
"bankName": "Test Bank",
"localRoutingIdentifier": "123456789",
"bankAccountNumber": "967854321",
"accountType": "CHECKING"
}
}
]
}
```
## US_WIRE_DOM [#us_wire_dom]
US Domestic Wire
* Use `US_WIRE_DOM` for book transfer and USD payments, use `US_WIRE_INTL` for other currencies
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `SHARED` if not provided. | | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 140 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.localRoutingIdentifier | Either `bank` or `localRoutingIdentifier` must be provided (not both)
4 digits: USCH (CHIPS ABA / participant number)
or 6 digits: USCHU (CHIPS UID)
or 9 digits: USABA (ABA) | 9 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.bankName | SWIFT | 35 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## US_WIRE_INTL [#us_wire_intl]
* Use for any foreign currency except for USD
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | Only accept `SHARED`. Default to `SHARED` if not provided. | | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 140 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.intermediaryBank | Alphanumeric | 11 | O |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
## US_RTP [#us_rtp]
* Receiver structured address must be provided. `line1`, `postalCode`, `city`, `state` and `country` are mandatory.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT (uppercase only) | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| instructionForSenderBank | SWIFT | 35 | O |
| receiver.name | SWIFT | 140 | M |
| receiver.localRoutingIdentifier | only accept 9 digits ABA code | 9 | M |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address.line1 | SWIFT | 70 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.state | 2-char upper case state abbreviation
Example: `NY` | 2 | M |
| receiver.address.postalCode | SWIFT | 16 | M |
| receiver.address.country | 2-char upper case ISO country code | 2 | M |
# Acme DBS Singapore Payments (H2H) (https://docs.tryacme.com/guides/dbs-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
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
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]
Acme does not validate the `proxyValue` patterns. Follow the rules specified below to avoid rejection by the bank.
* `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
Example: `+6588880000` | 35 | M |
| receiver.proxyValue (UEN) | Uppercase SWIFT
9 to 13 uppercase alphanumeric characters
Example: `201688888A` | 35 | M |
| receiver.proxyValue (NRIC) | Uppercase SWIFT
9 uppercase alphanumeric characters
Example: `S7800000A` | 35 | M |
| receiver.proxyValue (VPA) | Uppercase SWIFT
Mobile followed by `#` and 4 uppercase alphanumeric characters
Example: `+6588880000#Grab`
or
`UEN` followed by UEN followed by `#` and 4 uppercase alphanumeric characters
Example: `+UEN1234567#Grab` | 35 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
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
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
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
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
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]
* 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.
* **Currencies** (any beneficiary country): `CNH` / `CNY`
* **Beneficiary countries** (any currency): Myanmar (`MM`), United Arab Emirates (`AE`)
* **Currency-specific corridors**: `MYR` (Malaysia, `MY`), `INR` (India, `IN`), `KWD` (Kuwait, `KW`), `BHD` (Bahrain, `BH`), `QAR` (Qatar, `QA`), `THB` (Thailand, `TH`), `JOD` (Jordan, `JO`), `PHP` (Philippines, `PH`), `KES` (Kenya, `KE`), `KGS` (Kyrgyzstan, `KG`), `AOA` (Angola, `AO`), `PKR` (Pakistan, `PK`)
* The beneficiary country (the "paying into" location) takes precedence over the currency when a payment matches more than one corridor. For example, an `MYR` payment to a beneficiary in the UAE uses the UAE purpose code list, not Malaysia's.
* Acme validates the format only (`TT` only, max 10 characters); neither Acme nor DBS validates the code **value** against the corridor list. DBS validates the value at submission only for payments into Malaysia — in every other corridor the code is passed through and may be rejected by the beneficiary bank.
* See [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes) for the country-specific purpose code list for each corridor.
| 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)
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
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]
* 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.
| 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
Example: ["[finance@company.com](mailto:finance@company.com)"] | 75 per email (max 5 emails) | O |
# Acme DBS Singapore Payments (API) (https://docs.tryacme.com/guides/dbs-sg-api-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
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 ` `
* DBS G_I3 String Character Set:
* The 26 uppercase Latin letters `A`-`Z`
* The 26 lowercase Latin letters `a`-`z`
* The 10 digits `0`-`9`
* Space ` `
* Exclamation mark `!`
* Hash `#`
* Dollar sign `$`
* Percent `%`
* Ampersand `&`
* Single quote `'`
* Left and right parentheses `(` `)`
* Asterisk `*`
* Plus sign `+`
* Comma `,`
* Full stop `.`
* Forward slash `/`
* Colon `:`
* Semicolon `;`
* Equals sign `=`
* Question mark `?`
* At sign `@`
* Left and right square brackets `[` `]`
* Caret `^`
* Underscore `_`
* Backtick `` ` ``
* Left and right curly braces `{` `}`
* Pipe `|`
* Tilde `~`
* Hyphen `-`
## Payment details [#payment-details]
`paymentDetails` is an optional free-text field. Acme does not validate its charset or length. DBS validates it.
* For ACT, MEPS, and TT, `paymentDetails` is sent to the beneficiary bank but it is subject to the beneficiary to display it. It is also included in the email advice when an advice email is provided.
* For FAST and PAYNOW, `paymentDetails` is not sent to the beneficiary bank. It is included in the email advice only when an advice email is provided.
## Receiver name validation [#receiver-name-validation]
Migrating ACT, MEPS, or TT from the existing version (V4) to the new ISO 20022 Payment data changes version (V6) is a breaking change for `receiver.name`.
* On V6, `receiver.name` is **enforced** as `SWIFT` up to 140 characters.
* Names that were accepted before but contain characters outside the SWIFT set are **rejected** on V6.
* Sanitize stored payee names before migrating. Characters outside the SWIFT set include `!`, `#`, `$`, `%`, `&`, `*`, `;`, `=`, `@`, `[`, `]`, `^`, `_`, `` ` ``, `{`, `}`, `|`, `~`.
## Bank charges (MEPS and TT) [#bank-charges-meps-and-tt]
`bankChargeBearer` and `chargeAccount` apply to MEPS and TT only.
* `bankChargeBearer` accepts `SENDER`, `RECEIVER`, or `SHARED`. When omitted, DBS applies its default charge bearer.
* `chargeAccount` is the account DBS debits for the bank charges. When omitted, DBS debits the originating account.
## 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 | G_I3 | 140 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
* The `receiver.name` charset and length shown here are validated by DBS. Acme does not validate them upfront.
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
## PAYNOW [#paynow]
* `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 | G_I3 | 140 | M |
| receiver.proxyType | `MOBILE` or `UEN` or `VPA` or `NRIC` | | M |
| receiver.proxyValue | SWIFT | 35 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
* The `receiver.name` charset and length shown here are validated by DBS. Acme does not validate them upfront.
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
## ACT [#act]
* `receiver.bank` must be provided (Required by DBS)
| 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.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
* The `receiver.name` charset and length shown here are validated by DBS. Acme does not validate them upfront.
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
## 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 |
| chargeAccount | Alphanumeric | 35 | O *Example: `0172948596` |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| receiver.address.line1 | SWIFT | 35 | M |
| receiver.address.line2 | SWIFT | 35 | O |
| receiver.address.city | SWIFT | 35 | O |
| receiver.address.country | SWIFT | 35 | O |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 35 | O |
* The `receiver.name` charset and length shown here are validated by DBS. Acme does not validate them upfront.
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
## TT [#tt]
| 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 |
| chargeAccount | Alphanumeric | 35 | O |
| receiver.name | SWIFT | 35 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| 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 |
* The `receiver.name` charset and length shown here are validated by DBS. Acme does not validate them upfront.
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
## MEPS and TT - SWIFT ISO20022 Payment data changes [#meps-and-tt---swift-iso20022-payment-data-changes]
* Only applicable to client migrated to DBS V6 Payment API.
* The following are breaking changes for MEPS and TT clients migrating from V4 to V6.
* `receiver.name` is **enforced** as `SWIFT` up to 140 characters. See [Receiver name validation](#receiver-name-validation) before migrating from V4.
* `receiver.address.city` is now **required**. It was optional in V4.
* `receiver.address.country` is now **required** and must be an ISO 3166-1 alpha-2 code, for example `SG`. In V4 it was optional free SWIFT text up to 35 characters.
* `receiver.address.postalCode` max length is reduced from 35 to 16.
* `receiver.address.line1` and `line2` max length increases from 35 to 70. This is not a breaking change.
* `outgoingPurposeCode` applies to `TT` only and is **mandatory** when the payment currency or beneficiary country falls into the corridors below.
* **Currencies** (any beneficiary country): `CNH` / `CNY`
* **Beneficiary countries** (any currency): Myanmar (`MM`), United Arab Emirates (`AE`)
* **Currency-specific corridors**: `MYR` (Malaysia, `MY`), `INR` (India, `IN`), `KWD` (Kuwait, `KW`), `BHD` (Bahrain, `BH`), `QAR` (Qatar, `QA`), `THB` (Thailand, `TH`), `JOD` (Jordan, `JO`), `PHP` (Philippines, `PH`), `KES` (Kenya, `KE`), `KGS` (Kyrgyzstan, `KG`), `AOA` (Angola, `AO`), `PKR` (Pakistan, `PK`)
* The beneficiary country (the "paying into" location) takes precedence over the currency when a payment matches more than one corridor. For example, an `MYR` payment to a beneficiary in the UAE uses the UAE purpose code list, not Malaysia's.
* Acme validates the format only (`TT` only, max 10 characters); neither Acme nor DBS validates the code **value** against the corridor list. DBS validates the value at submission only for payments into Malaysia — in every other corridor the code is passed through and may be rejected by the beneficiary bank.
* See [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes) for the country-specific purpose code list for each corridor.
| 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 |
| chargeAccount | Alphanumeric | 35 | O |
| outgoingPurposeCode | Alphanumeric (ISO 20022 ExternalPurpose code or country-specific purpose code)
Example: `SALA`, `GDDS` | 10 | Conditional (TT only) — M for specific beneficiary country/currency, otherwise O |
| receiver.name | SWIFT | 140 | M |
| receiver.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| 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 |
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
## ACT - SWIFT ISO20022 Payment data changes [#act---swift-iso20022-payment-data-changes]
* Only applicable to client migrated to DBS V6 Payment API.
* `receiver.bank` must be provided (Required by DBS).
* `receiver.name` is **enforced** as `SWIFT` up to **140** characters. See [Receiver name validation](#receiver-name-validation) before migrating from V4.
| 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.bank | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
* The `paymentDetails` charset and length shown here are validated by DBS. Acme does not validate them upfront.
# Acme Deutsche Bank Singapore Payments (https://docs.tryacme.com/guides/db-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Deutsche 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
## 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)).
## FAST [#fast]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 25 | 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 |
## PAYNOW [#paynow]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 25 | M |
| paymentDetails | SWIFT | 140 | O |
| receiver.proxyType | `MOBILE` or `UEN` or `VPA` | | M |
| receiver.proxyValue
for MOBILE | + followed by 7 to 15 digits | 16 | M |
| receiver.proxyValue
for UEN | 9 to 13 alphanumeric characters | 13 | 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 |
## GIRO [#giro]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 25 | 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 |
## ACT - not supported [#act---not-supported]
This type is not supported.
## MEPS [#meps]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 25 | M |
| 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.address | SWIFT | 35 chars x 3 | O |
## TT [#tt]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 25 | M |
| 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 | 34 | M |
| receiver.address | SWIFT | 35 chars x 3 | O |
| receiver.address.country | uppercase ISO country code | 2 | M |
# Acme HSBC Bank Singapore Payments (https://docs.tryacme.com/guides/hsbc-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through HSBC 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
* BIC11:
* 11-character Bank Identifier Code
## General notes [#general-notes]
* The `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`) 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)).
## GIRO [#giro]
* The `paymentSetCode` for GIRO payments is a 3 character optional code configured on HSBCnet to group payment instructions under a specific access or entitlement group. Use this field to restrict payroll transaction access on HSBCnet. The value must match an existing payment set code configured in HSBCnet, please contact the bank for the appropriate code(s) to set.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| paymentSetCode | SWIFT
Example: `E01` | 3 | O |
| payments[N].customerReference | SWIFT | 12 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `SENDER` if not provided. | | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | O |
## FAST [#fast]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | O |
## PAYNOW [#paynow]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].receiver.proxyType | `NRIC` or `MOBILE` or `UEN` or `VPA` | M | |
| payments[N].receiver.proxyValue
for NRIC or FIN | 9 uppercase alphanumeric characters | 9 | M |
| payments[N].receiver.proxyValue
for MOBILE | + followed by 7 to 15 digits
Example: `+6588880000` | 16 | M |
| payments[N].receiver.proxyValue
for UEN | 9 to 13 alphanumeric characters | 13 | M |
| payments[N].receiver.proxyValue
for VPA | Mobile followed by `#` and 4 alphanumeric characters
Example: `+6588880000#Grab`
or
`UEN` followed by UEN followed by `#` and 4 alphanumeric characters
Example: `+UEN1234567#Grab` | 21 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | O |
## MEPS [#meps]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `SHARED` if not provided. | | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | O |
## TT [#tt]
* The `paymentDetails` is conditionally mandatory for TT to specific countries in Asia including **Bangladesh, India, Malaysia, Mauritius, the Philippines, Sri Lanka, Vietnam and Indonesia**.
* Specify the purpose of payments (PoP) according to the local regulatory guidelines for each country. Please contact the bank for the latest **Asia Purpose of Payment Formatting Guide**.
* **Note:** As part of the requirements, for TT payments to Malaysia, please append the prefix **"REMI/"** before populating the purpose of payment. Example: "REMI/Manufactured Goods"
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT
Example: `REMI/Manufactured Goods` | 140 | CM |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `SHARED` if not provided. | | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | M |
# Acme HSBC Bank Malaysia Payments (https://docs.tryacme.com/guides/hsbc-my-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through HSBC Bank Malaysia. 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
* BIC11:
* 11-character Bank Identifier Code
## General notes [#general-notes]
* The `receiver.address.country` must be an uppercase 2-letter ISO 3166 country code (e.g. `MY` for Malaysia).
* The format for BIC (used in `receiver.bank`) 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)).
## MY_IBG [#my_ibg]
* The `paymentSetCode` for GIRO payments is a 3 character optional code configured on HSBCnet to group payment instructions under a specific access or entitlement group. Use this field to restrict payroll transaction access on HSBCnet. The value must match an existing payment set code configured in HSBCnet, please contact the bank for the appropriate code(s) to set.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| paymentSetCode | SWIFT
Example: `E01` | 3 | O |
| payments[N].customerReference | SWIFT | 12 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `SENDER` if not provided. | | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | M |
## MY_IBFT [#my_ibft]
* All payment type RENTAS, Telegraphic Transfer and DuitNow (IBFT and Proxy) require purpose of payment code to describe the nature of the transaction. Specify the 5 digits purpose of payments (PoP) in `purposeCode`. Please contact the bank for the latest **Purpose of Payment listing code**.
* As part of the requirements, please append the prefix **"/RRN/"** before populating remittance information of the payment in `paymentDetails`. Example: "/RRN/General Info"
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | 5 Digits PoP Code
Example: 00001 | 5 | M |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.accountType | `CHECKING` or `SAVINGS` | | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | O |
## MY_DUITNOW [#my_duitnow]
* All payment type RENTAS, Telegraphic Transfer and DuitNow (IBFT and Proxy) require purpose of payment code to describe the nature of the transaction. Specify the 5 digits purpose of payments (PoP) in `purposeCode`. Please contact the bank for the latest **Purpose of Payment listing code**.
* As part of the requirements, please append the prefix **"/RRN/"** before populating remittance information of the payment in `paymentDetails`. Example: "/RRN/General Info"
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | 5 Digits PoP Code
Example: 00001 | 5 | M |
| payments[N].receiver.proxyType | `NRIC` or `PASSPORT` or `ARMY` or `MOBILE` or `BUSINESS_REG` | M | |
| payments[N].receiver.proxyValue
for NRIC | NRIC / Malaysian Identification Number | 15 | M |
| payments[N].receiver.proxyValue
for PASSPORT | Passport Number + Alpha-3 country code of the country of issuance. E.g: given a passport number E394029340V and country code of Singapore (SGP), the value will be E394029340VSGP. | 15 | M |
| payments[N].receiver.proxyValue
for ARMY | Army Number | 15 | M |
| payments[N].receiver.proxyValue
for MOBILE | + followed by 7 to 15 digits
Example: `+60121234567` | 15 | M |
| payments[N].receiver.proxyValue
for BUSINESS_REG | Business Registration Number (BRN)
Example: `202201234565` | 15 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | O |
## MY_RENTAS [#my_rentas]
* All payment type RENTAS, Telegraphic Transfer and DuitNow (IBFT and Proxy) require purpose of payment code to describe the nature of the transaction. Specify the 5 digits purpose of payments (PoP) in `purposeCode`. Please contact the bank for the latest **Purpose of Payment listing code**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `RECEIVER` if not provided. | | O |
| payments[N].purposeCode | 5 Digits PoP/KPW Code
Example: 00001 | 5 | M |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | M |
## TT [#tt]
* All payment type RENTAS, Telegraphic Transfer and DuitNow (IBFT and Proxy) require purpose of payment code to describe the nature of the transaction. Specify the 5 digits purpose of payments (PoP) in `purposeCode`. Please contact the bank for the latest **Purpose of Payment listing code**.
* The `paymentDetails` is conditionally mandatory for TT to specific countries in Asia including **Bangladesh, India, Malaysia, Mauritius, the Philippines, Sri Lanka, Vietnam and Indonesia**.
* Specify the purpose of payments (PoP) according to the local regulatory guidelines for each country in `paymentDetails`. Please contact the bank for the latest **Asia Purpose of Payment Formatting Guide**.
* **Note:** As part of the requirements, for TT payments to Malaysia, please append the prefix **"REMI/"** before populating the purpose of payment in `paymentDetails`. Example: "REMI/Manufactured Goods"
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT
Example: `Manufactured Goods` | 140 | CM |
| payments[N].purposeCode | 5 Digits PoP/KPW Code
Example: 00001 | 5 | M |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`
Default to `SHARED` if not provided. | | O |
| payments[N].receiver.name | SWIFT | 35 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | SWIFT | 2 | M |
# Acme Maybank Singapore Payments (H2H) (https://docs.tryacme.com/guides/mbb-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations and allowed data formats for Acme payments going
through Maybank MBB Singapore (SWIFT BIC: MBBESGSGXXX). These rules are
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 ` `
## General notes [#general-notes]
* Currency must be **SGD** for FAST, GIRO, and PAYNOW payments. BKTR payments are not restricted to SGD.
* `receiver.bank` (FAST and GIRO) is the beneficiary bank's BIC11. Acme validates it as alphanumeric with a maximum of 11 characters.
## Field visibility on bank portal and statements [#field-visibility-on-bank-portal-and-statements]
Use this as a guide when deciding the value to populate in each field.
### Customer Reference [#customer-reference]
* `customerReference` is an optional field.
* If not provided, Maybank's core banking system generates a reference ID automatically.
* Acme suggest to populate the **Invoice Number** or **Document Reference Number** that will be sent to the beneficiary in this field.
| Maybank field name | Where it appears | What the recipient sees |
| --- | --- | --- |
| Debit description | Your Maybank statement and the Transaction Reference column on the Maybank M2E portal | - |
| Credit reference | This reference is sent to the beneficiary's bank and should appear in your beneficiary's bank statement | The value you provide in `customerReference` or the auto-generated reference ID |
### Payment Details [#payment-details]
* `paymentDetails` is an optional field for FAST, PAYNOW, and GIRO payments. It must not be provided for BKTR.
* It is sent to the beneficiary's bank as additional payment information.
* Whether the beneficiary sees this value depends on the beneficiary's bank. Not all banks surface this field to account holders.
| Maybank field name | Where it appears | What the recipient sees |
| --- | --- | --- |
| Payment details | Beneficiary's bank | The value you provide in `paymentDetails`. Whether it is shown to the beneficiary depends on the beneficiary's bank. |
## FAST [#fast]
* 4 characters `purposeCode` is mandatory for `FAST` payments. Refer to the [list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf) provided by The Association of Banks in Singapore (ABS).
* The maximum amount for FAST payments is SGD 200,000 per transaction.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 35 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric | 5 | M |
| payments[N].receiver.name | SWIFT | 120 | M |
| payments[N].receiver.bank | Alphanumeric | 11 | M |
| payments[N].receiver.bankAccountNumber | Numeric (digits only) | 34 | M |
Example Request:
```json
{
"type": "FAST",
"paymentDate": "2026-06-30",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV-001",
"paymentDetails": "Payment for invoice 001",
"purposeCode": "OTHR",
"receiver": {
"name": "Tan Ah Kow",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "9876543210"
}
}
]
}
```
## PAYNOW [#paynow]
* Acme does not validate the `proxyValue` patterns. Follow the rules specified below to avoid rejection by the bank.
* `receiver.bank` and `receiver.bankAccountNumber` must not be provided.
* The maximum amount for PAYNOW payments is SGD 200,000 per transaction.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 35 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric | 5 | M |
| payments[N].receiver.name | SWIFT | 120 | M |
| payments[N].receiver.proxyType | `MOBILE` or `NRIC` or `UEN` | | M |
| payments[N].receiver.proxyValue (MOBILE) | `+` followed by up to 15 digits
Example: `+6591234567` | 35 | M |
| payments[N].receiver.proxyValue (NRIC) | 9 uppercase alphanumeric characters
Example: `S7800000A` | 35 | M |
| payments[N].receiver.proxyValue (UEN) | 9 to 13 uppercase alphanumeric characters
Example: `201688888A` | 35 | M |
Example Request:
```json
{
"type": "PAYNOW",
"paymentDate": "2026-06-30",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV-002",
"paymentDetails": "Payment for invoice 002",
"purposeCode": "OTHR",
"receiver": {
"name": "Tan Ah Kow",
"proxyType": "MOBILE",
"proxyValue": "+6591234567"
}
}
]
}
```
## GIRO [#giro]
* 4 characters `purposeCode` is mandatory for `GIRO` payments. Refer to the [list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf) provided by The Association of Banks in Singapore (ABS).
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 35 | O |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric | 5 | M |
| payments[N].receiver.name | SWIFT | 120 | M |
| payments[N].receiver.bank | Alphanumeric | 11 | M |
| payments[N].receiver.bankAccountNumber | Numeric (digits only) | 34 | M |
Example Request:
```json
{
"type": "GIRO",
"paymentDate": "2026-06-30",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV-003",
"paymentDetails": "Payment for invoice 003",
"purposeCode": "SALA",
"receiver": {
"name": "Tan Ah Kow",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "9876543210"
}
}
]
}
```
## BKTR [#bktr]
Book transfers move funds between accounts within Maybank SG (MBBESGSGXXX).
* `receiver.bank` must not be provided.
* `paymentDetails` must not be provided for book transfers.
* `purposeCode` must not be provided for book transfers.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 35 | O |
| payments[N].receiver.name | SWIFT | 120 | M |
| payments[N].receiver.bankAccountNumber | Numeric (digits only) | 34 | M |
Example Request:
```json
{
"type": "BKTR",
"paymentDate": "2026-06-30",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV-004",
"receiver": {
"name": "Tan Ah Kow",
"bankAccountNumber": "9876543210"
}
}
]
}
```
## Payment Response [#payment-response]
Payment status definitions:
| Status | Description |
| --- | --- |
| `PROCESSING` | Status upon creation. |
| `SUBMITTED` | Payment file uploaded to Maybank. Awaiting acknowledgment and final confirmation. |
| `COMPLETED` | Payment confirmed successful by the bank. |
| `FAILED` | Payment rejected by the bank. Check `underlyingErrorMessage` for details. |
### Maybank status mapping [#maybank-status-mapping]
Maybank reports its own transaction status in the return file it sends back to Acme.
Acme maps each Maybank status to an Acme payment status.
* A payment stays `SUBMITTED` while Maybank reports a non-final status.
* Acme keeps checking for the latest status until Maybank reports a final status.
| Acme status | Maybank transaction status | Maybank description |
| --- | --- | --- |
| `PROCESSING` | — | Payment created in Acme. Not yet sent to Maybank. |
| `SUBMITTED` | Successfully Sent to Bank | Pending processing by Maybank or the beneficiary bank. |
| `SUBMITTED` | New | Pending action from maker. |
| `SUBMITTED` | Pending Verification | Pending action from verifier. |
| `SUBMITTED` | Pending Authorisation | Pending action from authoriser. |
| `SUBMITTED` | Pending Releaser | Pending action from releaser. |
| `SUBMITTED` | Returned | Payment returned by verifier or authoriser. |
| `COMPLETED` | Successful | Payment successful. |
| `FAILED` | Bank Rejected | Payment failed at the bank. |
| `FAILED` | Rejected | Payment rejected by verifier, authoriser, or releaser. |
| `FAILED` | Stopped | Payment stopped. |
| `FAILED` | Expired | Transaction expired after a number of days. |
| `FAILED` | Deleted | Payment deleted by the maker. |
# Acme OCBC Bank Singapore Payments (H2H) (https://docs.tryacme.com/guides/ocbc-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
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
* 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
for MOBILE | `+` followed by 1 to 15 digits | 16 | M |
| receiver.proxyValue
for UEN | 1 to 35 digits and uppercase letters `A`-`Z` | 35 | M |
| receiver.proxyValue
for NRIC | First letter `S`, `T`, `F`, `G`, or `M`, followed by 7 digits, then an uppercase check letter | 9 | M |
| receiver.proxyValue
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
for MOBILE | `+` followed by 1 to 15 digits | 16 | M |
| receiver.proxyValue
for UEN | 1 to 35 digits and uppercase letters `A`-`Z` | 35 | M |
| receiver.proxyValue
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 | 140 | M |
| receiver.bank | BIC11 | 11 | M |
| receiver.intermediaryBank | BIC11 | 11 | O |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | — | M |
| receiver.address.line1 | SWIFT | 35 | O |
| receiver.address.line2 | SWIFT | 35 | O |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
| receiver.address.country | uppercase ISO country code | 2 | M |
## TT [#tt]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | M |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | SWIFT | 140 | M |
| receiver.bank | BIC11 | 11 | M |
| receiver.intermediaryBank | BIC11 | 11 | O |
| receiver.localRoutingIdentifier | Alphanumeric | 35 | O |
| receiver.bankAccountNumber | Alphanumeric | 34 | M |
| receiver.address | SWIFT | — | M |
| receiver.address.line1 | SWIFT | 35 | O |
| receiver.address.line2 | SWIFT | 35 | O |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.state | SWIFT | 35 | O |
| receiver.address.postalCode | SWIFT | 16 | O |
| receiver.address.country | uppercase ISO country code | 2 | M |
### Beneficiary address mapping [#beneficiary-address-mapping]
For MEPS and TT, `receiver.address.line1` and `receiver.address.line2` are joined by a space into
the single street name field (`StrtNm`). Together with the joining space they must total **70
characters or fewer**, so two full-length 35-character lines are one character too long and are
rejected.
# Acme RHB Bank Malaysia Payments (API) (https://docs.tryacme.com/guides/rhb-my-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through RHB Bank Malaysia. 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 ` `
* BIC11:
* 11-character Bank Identifier Code
## General notes [#general-notes]
* The format for BIC (used in `receiver.bank`) 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)).
* RHB support both Pre-authorization (STP) flow and authorization flow via RHB Reflex, the configuration is done on RHB's backend.
## MY_IBG [#my_ibg]
Malaysia Interbank GIRO — next-day settlement.
* Currency must be **MYR only**.
* `customerReference` max length is **20 characters** for RHB payments.
* Receiver's `residencyStatus` is mandatory for MY IBG.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 20 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 500 (combined) | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | Alphanumeric (BIC/SWIFT code) | 11 | M |
| payments[N].receiver.bankAccountNumber | Numeric | 20 | M |
| payments[N].receiver.residencyStatus | `RESIDENT` or `NON_RESIDENT` | | M |
Example Request:
```json
{
"type": "MY_IBG",
"amount": 1000,
"currency": "MYR",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"customerReference": "INV-001",
"paymentDetails": "Payment for invoice 001",
"paymentAdviceEmails": ["finance@example.com"],
"receiver": {
"name": "Ahmad bin Ali",
"bank": "PBBEMYKLXXX",
"bankAccountNumber": "1234567890",
"residencyStatus": "RESIDENT"
}
}
```
## MY_IBFT [#my_ibft]
Malaysia Instant Fund Transfer via DuitNow Bank Account Transfer.
* Currency must be **MYR only**.
* `customerReference` max length is **20 characters** for RHB payments.
* Receiver's `residencyStatus` is mandatory for MY DuitNow Account Transfer.
* Receiver's `accountType` is mandatory for MY DuitNow Account Transfer.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 20 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: `["finance@company.com"]` | 500 (combined) | O |
| payments[N].receiver.name | SWIFT | 60 | M |
| payments[N].receiver.bank | Alphanumeric (BIC/SWIFT code) | 11 | M |
| payments[N].receiver.bankAccountNumber | Numeric | 20 | M |
| payments[N].receiver.residencyStatus | `RESIDENT` or `NON_RESIDENT` | | M |
| payments[N].receiver.accountType | `CHECKING` or `SAVINGS` | | M |
Example Request:
```json
{
"type": "MY_IBFT",
"amount": 1000,
"currency": "MYR",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"customerReference": "INV-001",
"paymentDetails": "Payment for invoice 001",
"paymentAdviceEmails": ["finance@example.com"],
"receiver": {
"name": "Ahmad bin Ali",
"bank": "PBBEMYKLXXX",
"bankAccountNumber": "1234567890",
"residencyStatus": "RESIDENT",
"accountType": "SAVINGS"
}
}
```
## Payment Response [#payment-response]
* RHB returns a reference Id upon payment created successfully, this is returned in the `bankReference` field.
* The `underlyingErrorMessage` field should contains payment status code and error message returned by RHB (if any).
Example of underlyingErrorMessage from RHB:
```
"underlyingErrorMessage" : "N3: Invalid Account Number"
```
Payment status definition:
| Status | Description |
| --- | --- |
| `PROCESSING` | Status upon creation |
| `SUBMITTED` | Payment submitted to RHB, awaiting final confirmation (polling in progress) |
| `COMPLETED` | Payment posting successful |
| `FAILED` | Payment unsuccessful or rejected by RHB. (check `resultCode` for details) |
Possible result Code for failed payments:
| resultCode | Description |
| --- | --- |
| `REQUEST_TIMEOUT` | Payment posting timeout. |
| `PAYMENT_EXPIRED` | Payment expired. |
| `PAYMENT_CANCELLED` | Payment aborted or cancelled by user. |
| `PAYMENT_REJECTED` | Payment rejected. |
| `REJECTED_BY_APPROVER` | Payment rejected by authorizer. |
| `OTHERS` | Default resultCode if status code return is not a known status code. |
Example response:
```json
{
"id": "pymt_0Q0T6K4DZFRZT",
"type": "MY_IBFT",
"amount": 100,
"currency": "MYR",
"bankReference": "260408894262",
"customerReference": "ACMELVIBG02",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"receiver": {
"name": "John Doe",
"bank": "PBBEMYKLXXX",
"bankAccountNumber": "1234567890",
"address": {},
"residencyStatus": "RESIDENT",
"accountType": "SAVINGS"
},
"paymentDetails": null,
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "MYR",
"status": "COMPLETED",
"resultCode": null,
"paymentAdviceEmails": ["finance@example.com"],
"createdAt": "2026-04-08T05:12:14.447Z",
"updatedAt": "2026-04-08T05:12:14.936Z"
}
```
# Acme Standard Chartered Bank Singapore Payments (API) (https://docs.tryacme.com/guides/scb-sg-api-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
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 [#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 ` `
* `customerReference` is 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).
* `paymentDetails` is sent to the beneficiary as unstructured remittance information across 2 lines of 70 characters.
* `receiver.address.city` and `receiver.address.country` are required for all payment types, as enforced by Standard Chartered Bank. The `line1`, `line2`, `state`, and `postalCode` address fields are optional.
- 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](https://www.sc.com/en/corporate-investment-banking/iso-20022/) for an overview.
- Under the [SCB Payment API guide](https://www.sc.com/en/uploads/sites/66/content/docs/ISO-20022-CBPR-API-Guide.pdf), the beneficiary `address.city` (town name) and `address.country` are mandatory for all payment types. Acme validates this on every payment.
## FAST [#fast]
* 4 characters `purposeCode` must 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 [#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 [#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 [#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 |
# Acme Standard Chartered Bank Singapore Payments (H2H) (https://docs.tryacme.com/guides/scb-sg-h2h-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations and allowed data formats for Acme payments going
through Standard Chartered Bank (SCB) Singapore (SWIFT BIC: SCBLSG22XXX) over
host-to-host (H2H) file integration. These rules are validated by Acme and
further validated by the bank. These rules may be stricter than what the bank
requires.
Supported types: `FAST`, `GIRO`, `MEPS`, `SG_PAYROLL`, `BKTR`, `TT`.
### 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 ` `
* SCB Extended Character Set:
* The 26 uppercase Latin letters `A`-`Z`
* The 26 lowercase Latin letters `a`-`z`
* The 10 digits `0`-`9`
* Space ` `
* The punctuation characters `!` `"` `#` `$` `%` `&` `'` `(` `)` `*` `+` `-` `.` `/` `:` `;` `<` `=` `>` `?` `@` `[` `]` `^` `_` `{` `}`
* Note that the comma `,` is not allowed in this character set.
## ISO 20022 Migration [#iso-20022-migration]
* SCB is migrating to the ISO 20022 message standards. The address requirements below are part of this migration. Refer to [ISO 20022 at Standard Chartered](https://www.sc.com/en/corporate-investment-banking/iso-20022/) for an overview.
* Under the [SCB address guidelines](https://www.sc.com/en/uploads/sites/66/content/docs/sc-cib-tb-ISO-20022%E2%80%93CBPR-Address-guidelines-H2H-and-API-sept-2025.pdf), the beneficiary `address.city` (town name) and `address.country` become mandatory for all payment types, not only for `MEPS` and `TT`.
* These address requirements become mandatory in November 2026.
* Acme enforces `address.city` and `address.country` on every payment type, ahead of the bank's deadline. `TT` additionally requires `address.line1` and `address.postalCode`; on the other types those two stay optional.
## Payment Customer Reference [#payment-customer-reference]
* Use payments[N].customerReference as the unique identifier of your payments.
* If customerReference is not provided, Acme generates a 13-character unique alphanumeric reference automatically.
* The customerReference is sent to the bank as the end-to-end ID of the payment.
## FAST [#fast]
* 4 characters `purposeCode` is mandatory for `FAST` payments. Refer to the [list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf) provided by The Association of Banks in Singapore (ABS).
* The maximum amount for FAST payment is SGD 200,000 per transaction.
* The payment `currency` must be **SGD**.
* FAST payments are processed 24/7.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | Alphanumeric | 16 | O |
| paymentDate | `YYYY-MM-DD` | | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric | 4 | M |
| payments[N].bankChargeBearer | `SENDER`, `RECEIVER`, or `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 150 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | Free text | 70 | O |
| payments[N].receiver.address.line2 | Free text | 70 | O |
| payments[N].receiver.address.city | Free text | 35 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
| payments[N].receiver.address.postalCode | Free text | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
Example Request:
```json
{
"type": "FAST",
"paymentDate": "2026-07-15",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV001",
"paymentDetails": "Payment for invoice 001",
"purposeCode": "OTHR",
"receiver": {
"name": "Tan Ah Kow",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "9876543210",
"address": {
"city": "Singapore",
"country": "SG"
}
}
}
]
}
```
## GIRO [#giro]
* 4 characters `purposeCode` is mandatory for `GIRO` payments. Refer to the [list](https://www.abs.org.sg/docs/library/mnemonic_purpose_codes.pdf) provided by The Association of Banks in Singapore (ABS).
* The cut-off time for GIRO payments is 18:30 SGT. Files submitted by Acme to the bank after the cut-off are processed in the next processing window.
* The payment `currency` must be **SGD**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | Alphanumeric | 16 | O |
| paymentDate | `YYYY-MM-DD` | | M |
| payments[N].paymentDetails | SCB Extended | 140 | O |
| payments[N].purposeCode | Alphanumeric | 4 | M |
| payments[N].bankChargeBearer | `SENDER`, `RECEIVER`, or `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 150 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | Free text | 70 | O |
| payments[N].receiver.address.line2 | Free text | 70 | O |
| payments[N].receiver.address.city | Free text | 35 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
| payments[N].receiver.address.postalCode | Free text | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
Example Request:
```json
{
"type": "GIRO",
"paymentDate": "2026-07-15",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV002",
"paymentDetails": "Payment for invoice 002",
"purposeCode": "OTHR",
"receiver": {
"name": "Tan Ah Kow",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "9876543210",
"address": {
"city": "Singapore",
"country": "SG"
}
}
}
]
}
```
## MEPS [#meps]
* The minimum amount is SGD 50,000 per payment.
* `purposeCode` is optional for `MEPS` payments.
* The payment `currency` must be **SGD**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | Alphanumeric | 16 | O |
| paymentDate | `YYYY-MM-DD` | | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric | 4 | O |
| payments[N].bankChargeBearer | `SENDER`, `RECEIVER`, or `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 150 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | Free text | 70 | O |
| payments[N].receiver.address.line2 | Free text | 70 | O |
| payments[N].receiver.address.city | Free text | 35 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
| payments[N].receiver.address.postalCode | Free text | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
Example Request:
```json
{
"type": "MEPS",
"paymentDate": "2026-07-15",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 5000000,
"customerReference": "INV003",
"paymentDetails": "Payment for invoice 003",
"receiver": {
"name": "Tan Ah Kow",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "9876543210",
"address": {
"city": "Singapore",
"country": "SG"
}
}
}
]
}
```
## SG_PAYROLL [#sg_payroll]
* `purposeCode` is mandatory for `SG_PAYROLL` payments.
* Allowed values are `SALA` or `SAL` (Salary), `BONU` or `BON` (Bonus), and `OTHR` or `OTH` (Other).
* The cut-off time for PAYROLL payments is 18:30 SGT. Files submitted by Acme to the bank after the cut-off are processed in the next processing window.
* The payment `currency` must be **SGD**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | Alphanumeric | 16 | O |
| paymentDate | `YYYY-MM-DD` | | M |
| payments[N].paymentDetails | SCB Extended | 140 | O |
| payments[N].purposeCode | `SALA` or `SAL` or `BONU` or `BON` or `OTHR` or `OTH` | 4 | M |
| payments[N].bankChargeBearer | `SENDER`, `RECEIVER`, or `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 150 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | Free text | 70 | O |
| payments[N].receiver.address.line2 | Free text | 70 | O |
| payments[N].receiver.address.city | Free text | 35 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
| payments[N].receiver.address.postalCode | Free text | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
Example Request:
```json
{
"type": "SG_PAYROLL",
"paymentDate": "2026-07-15",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 350000,
"customerReference": "PAYROLL07",
"paymentDetails": "July salary",
"purposeCode": "SALA",
"receiver": {
"name": "Tan Ah Kow",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "9876543210",
"address": {
"city": "Singapore",
"country": "SG"
}
}
}
]
}
```
## BKTR [#bktr]
Book transfers move funds between accounts within SCB Singapore (SCBLSG22XXX).
* `receiver.bank` is required for H2H book transfers. Use SCB Singapore's BIC `SCBLSG22XXX`.
* `receiver.name` accepts the SCB Extended Character Set.
* `purposeCode` is optional for book transfers.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | Alphanumeric | 16 | O |
| paymentDate | `YYYY-MM-DD` | | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric | 4 | O |
| payments[N].bankChargeBearer | `SENDER`, `RECEIVER`, or `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 150 per email (max 5 emails) | O |
| payments[N].receiver.name | SCB Extended | 70 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | Free text | 70 | O |
| payments[N].receiver.address.line2 | Free text | 70 | O |
| payments[N].receiver.address.city | Free text | 35 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
| payments[N].receiver.address.postalCode | Free text | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M (See [ISO 20022 Requirements](#iso-20022-migration)) |
Example Request:
```json
{
"type": "BKTR",
"paymentDate": "2026-07-15",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"amount": 10000,
"customerReference": "INV004",
"paymentDetails": "Internal fund transfer",
"receiver": {
"name": "Tan Ah Kow",
"bank": "SCBLSG22XXX",
"bankAccountNumber": "9876543210",
"address": {
"city": "Singapore",
"country": "SG"
}
}
}
]
}
```
## TT [#tt]
* `paymentDetails` is mandatory for `TT` payments.
* The beneficiary address is mandatory for `TT` payments. You must provide `line1`, `city`, `postalCode`, and `country`.
* `TT` payments accept any valid ISO 4217 currency.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | Alphanumeric | 16 | O |
| paymentDate | `YYYY-MM-DD` | | M |
| payments[N].paymentDetails | SWIFT | 140 | M |
| payments[N].purposeCode | Alphanumeric | 4 | O |
| payments[N].bankChargeBearer | `SENDER`, `RECEIVER`, or `SHARED` | | O |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 150 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.address.line1 | Free text | 70 | M |
| payments[N].receiver.address.line2 | Free text | 70 | O |
| payments[N].receiver.address.city | Free text | 35 | M |
| payments[N].receiver.address.postalCode | Free text | 16 | M |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
Example Request:
```json
{
"type": "TT",
"paymentDate": "2026-07-15",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"senderAccountCurrency": "SGD",
"currency": "USD",
"payments": [
{
"amount": 250000,
"customerReference": "INV005",
"paymentDetails": "Payment for invoice 005",
"receiver": {
"name": "John Smith",
"bank": "CHASUS33XXX",
"bankAccountNumber": "123456789",
"address": {
"line1": "270 Park Avenue",
"city": "New York",
"postalCode": "10017",
"country": "US"
}
}
}
]
}
```
## Payment Response [#payment-response]
Payment status definitions:
| Status | Description |
| --- | --- |
| `PROCESSING` | Status upon creation. |
| `SUBMITTED` | Payment file uploaded to SCB. Awaiting acknowledgment and final confirmation. |
| `COMPLETED` | Payment confirmed successful by the bank. |
| `FAILED` | Payment rejected by the bank. Check `underlyingErrorMessage` for details. |
# Acme Standard Chartered Bank Great Britain Payments (API) (https://docs.tryacme.com/guides/scb-gb-api-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Standard Chartered Bank (SCB) Great Britain (`SCBLGB2LXXX`) 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: `GB_FPS`, `GB_CHAPS`, `GB_SEPA`, `BKTR`, `TT`.
## 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 ` `
* `customerReference` is 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).
* `paymentDetails` is sent to the beneficiary as unstructured remittance information across 2 lines of 70 characters.
* `receiver.address.city` and `receiver.address.country` are required for all payment types, as enforced by Standard Chartered Bank. The `line1`, `line2`, `state`, and `postalCode` address fields are optional.
* For `GB_FPS`, and `GB_CHAPS`, provide either an 8-digit account number with a 6-digit sort code in `receiver.localRoutingIdentifier`, or a GB IBAN with a `receiver.bank` BIC.
- 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](https://www.sc.com/en/corporate-investment-banking/iso-20022/) for an overview.
- Under the [SCB Payment API guide](https://www.sc.com/en/uploads/sites/66/content/docs/ISO-20022-CBPR-API-Guide.pdf), the beneficiary `address.city` (town name) and `address.country` are mandatory for all payment types. Acme validates this on every payment.
## GB_FPS [#gb_fps]
Faster Payments transfer.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `GBP` | 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 for the IBAN form |
| receiver.localRoutingIdentifier | Numeric sort code | 6 | M for the account-number form, exactly 6 digits |
| receiver.bankAccountNumber | 8 digits, or a GB IBAN | | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## GB_CHAPS [#gb_chaps]
Same-day high-value RTGS transfer.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `GBP` | 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 for the IBAN form |
| receiver.localRoutingIdentifier | Numeric sort code | 6 | M for the account-number form, exactly 6 digits |
| receiver.bankAccountNumber | 8 digits, or a GB IBAN | | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## GB_SEPA [#gb_sepa]
SEPA credit transfer to any SEPA countries.
* `currency` must be `EUR`.
* `receiver.bank` (SWIFT BIC) is required and `receiver.bankAccountNumber` must be an IBAN.
* `purposeCode` is optional. Provide SEPA PoP Code for the recipient bank.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `EUR` | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | SWIFT | 4 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | Free text | 140 | M |
| receiver.bank | SWIFT BIC | 8–11 | M |
| receiver.bankAccountNumber | IBAN | 15–31 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## BKTR [#bktr]
Book Transfer. An intra-SCB transfer between two accounts at SCB Great Britain (`SCBLGB2LXXX`).
`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 |
## TT [#tt]
Telegraphic Transfer. A cross-border SWIFT transfer.
`receiver.bank` (SWIFT BIC) 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 |
# Acme Standard Chartered Bank Hong Kong Payments (API) (https://docs.tryacme.com/guides/scb-hk-api-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Standard Chartered Bank (SCB) Hong Kong (`SCBLHKHHXXX`) 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: `HK_FPS_PROXY`, `HK_FPS_ACCOUNT`, `HK_ACH`, `HK_CHATS`, `BKTR`, `TT`.
## 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 ` `
* `customerReference` is required for all payment types. It must be unique and must not exceed 16 characters.
* `paymentDetails` is sent to the beneficiary as unstructured remittance information across 2 lines of 70 characters.
* `receiver.name` is required for all payment types and must not exceed 140 characters. It is not restricted to the SWIFT character set.
* `receiver.address.city` and `receiver.address.country` are required for all payment types, as enforced by Standard Chartered Bank.
* `receiver.address.line1` is required for `TT` only. It is optional for every other payment type.
* The `line2`, `state`, and `postalCode` address fields are optional. `line1` and `line2` accept up to 70 SWIFT characters, `state` up to 35, and `postalCode` up to 16.
* `receiver.localRoutingIdentifier` is the 3-digit HKICL bank clearing code.
* `purposeCode` is not required for any SCB Hong Kong payment type.
* `bankChargeBearer` defaults to `SHARED` when omitted. On `BKTR` it is always `SHARED`, whatever value is supplied.
* For `HK_FPS_PROXY` and `HK_FPS_ACCOUNT`, Acme sets `paymentDate` to the current date in the `Asia/Hong_Kong` timezone.
- 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](https://www.sc.com/en/corporate-investment-banking/iso-20022/) for an overview.
- Acme sends SCB Hong Kong the `Address-Validation: Y` header, so the beneficiary `address.city` (town name) and `address.country` are mandatory for all payment types. Acme validates this on every payment.
* Acme does not pre-validate the length or character set of `customerReference` and `paymentDetails` on SCB Hong Kong payments.
* A `customerReference` over 16 characters, or a non-SWIFT character in either field, is rejected by Standard Chartered Bank after submission rather than by the Acme API.
* A `paymentDetails` value over 140 characters is **silently truncated to 140** before submission — the payment succeeds and the beneficiary sees the clipped text. Keep both fields within the limits stated above.
## HK_FPS_PROXY [#hk_fps_proxy]
Faster Payment System transfer addressed to a registered proxy rather than an account number.
* `receiver.bank` and `receiver.localRoutingIdentifier` must not be provided. The proxy identifies the beneficiary bank.
* `receiver.proxyValue` format depends on `receiver.proxyType`:
* `FPS_ID`: at most 9 digits.
* `HKID`: 1 or 2 uppercase letters, then 6 digits, then a digit or the letter `A`.
* `MOBILE`: must start with `+` followed by digits, and must carry a country code Acme can parse.
* `EMAIL`: accepted without a format check by Acme. Standard Chartered Bank validates it.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `HKD` or `CNY` | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | Free text | 140 | M |
| receiver.proxyType | `FPS_ID`, `HKID`, `MOBILE`, or `EMAIL` | | M |
| receiver.proxyValue | Depends on `receiver.proxyType` | | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## HK_FPS_ACCOUNT [#hk_fps_account]
Faster Payment System transfer addressed to a bank clearing code and account number.
`receiver.bank` must not be provided. `receiver.localRoutingIdentifier` routes the payment.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `HKD` or `CNY` | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | Free text | 140 | M |
| receiver.localRoutingIdentifier | Numeric HKICL clearing code | 3 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## HK_ACH [#hk_ach]
Hong Kong Automated Clearing House transfer. A batched, non-urgent local transfer.
`receiver.bank` must not be provided. `receiver.localRoutingIdentifier` routes the payment.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `HKD` or `CNY` | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | Free text | 140 | M |
| receiver.localRoutingIdentifier | Numeric HKICL clearing code | 3 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## HK_CHATS [#hk_chats]
Clearing House Automated Transfer System. A same-day high-value RTGS transfer.
* `receiver.bank` is required. `receiver.localRoutingIdentifier` must not be provided.
* Each CHATS currency clears through a different set of participant banks. Confirm the beneficiary bank supports the currency being sent.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `HKD`, `CNY`, `USD`, or `EUR` | 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 | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## BKTR [#bktr]
Book Transfer. An intra-SCB transfer between two accounts at SCB Hong Kong (`SCBLHKHHXXX`).
* `receiver.bank` and `receiver.localRoutingIdentifier` must not be provided. SCB routes the payment to itself.
* `bankChargeBearer` is always `SHARED` on this payment type.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | ISO 4217 currency code | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| receiver.name | Free text | 140 | M |
| receiver.bankAccountNumber | Numeric | 34 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## TT [#tt]
Telegraphic Transfer. A cross-border SWIFT transfer.
* `receiver.bank` is required.
* `receiver.address.line1` is required on this payment type only.
| 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 | Alphanumeric | 11 | M |
| receiver.bankAccountNumber | Free text | | M |
| receiver.address.line1 | SWIFT | 70 | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
# Acme Standard Chartered Bank UAE Payments (API) (https://docs.tryacme.com/guides/scb-ae-api-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Standard Chartered Bank (SCB) UAE (`SCBLAEADXXX`) 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: `UAE_IBFT`, `UAE_FTS`, `TT`, `BKTR`.
## 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 ` `
* `customerReference` is required for all payment types. It must be unique and must not exceed 16 SWIFT characters.
* `paymentDetails` is sent to the beneficiary as unstructured remittance information across 2 lines of 70 characters, for a total of 140 SWIFT characters.
* `purposeCode` is required for all payment types. Provide the UAE Purpose of Payment code that matches the transaction.
* `receiver.name` is required for all payment types and must not exceed 140 characters.
* `receiver.address.city` and `receiver.address.country` are required for all payment types, as enforced by Standard Chartered Bank. The `line1`, `line2`, `state`, and `postalCode` address fields are optional.
* A SWIFT BIC is either 8 or 11 characters: 6 uppercase letters, then 2 alphanumerics, optionally followed by a 3-character branch code. Lengths of 9 or 10 are rejected.
* A UAE IBAN is `AE` followed by 21 digits, for a total of 23 characters.
* `bankChargeBearer` defaults to `SHARED` when omitted. On `BKTR` it is always `SHARED`, whatever value is supplied.
- 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](https://www.sc.com/en/corporate-investment-banking/iso-20022/) for an overview.
- Under the [SCB Payment API guide](https://www.sc.com/en/uploads/sites/66/content/docs/ISO-20022-CBPR-API-Guide.pdf), the beneficiary `address.city` (town name) and `address.country` are mandatory for all payment types. Acme validates this on every payment.
* SCB UAE requires a currency prefix on the debit account number, so the sending account currency must be one Acme holds a prefix for.
* The supported currencies are `AED`, `USD`, `GBP`, `EUR`, `CHF`, `AUD`, `SGD`, `CAD`, `HKD`, `JPY`, `NOK`, `NZD`, `SEK`, and `ZAR`.
* A payment from an account in any other currency is rejected. Contact Acme if you need one added.
## UAE_IBFT [#uae_ibft]
Interbank Funds Transfer. A local AED transfer to another bank in the UAE.
* `currency` must be `AED`.
* Provide either a UAE IBAN in `receiver.bankAccountNumber`, or an account number of at most 16 digits together with a `receiver.bank` BIC.
* When a UAE IBAN is provided without `receiver.bank`, Acme derives the beneficiary BIC from the IBAN routing code. If that routing code is not recognised the payment is rejected, and `receiver.bank` must be supplied explicitly.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `AED` | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | UAE Purpose of Payment code | | M |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | Free text | 140 | M |
| receiver.bank | SWIFT BIC | 8–11 | M for the account-number form |
| receiver.bankAccountNumber | UAE IBAN, or at most 16 digits | | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## UAE_FTS [#uae_fts]
Funds Transfer System. A same-day high-value AED RTGS transfer.
* `currency` must be `AED`.
* Provide either a UAE IBAN in `receiver.bankAccountNumber`, or an account number of at most 16 digits together with a `receiver.bank` BIC.
* When a UAE IBAN is provided without `receiver.bank`, Acme derives the beneficiary BIC from the IBAN routing code. If that routing code is not recognised the payment is rejected, and `receiver.bank` must be supplied explicitly.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | `AED` | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | UAE Purpose of Payment code | | M |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | Free text | 140 | M |
| receiver.bank | SWIFT BIC | 8–11 | M for the account-number form |
| receiver.bankAccountNumber | UAE IBAN, or at most 16 digits | | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
## TT [#tt]
Telegraphic Transfer. A cross-border SWIFT transfer.
`receiver.bank` (SWIFT BIC) is required.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | ISO 4217 currency code | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | UAE Purpose of Payment code | | M |
| 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 |
## BKTR [#bktr]
Book Transfer. An intra-SCB transfer between two accounts at SCB UAE (`SCBLAEADXXX`).
* `receiver.bank` must not be provided. SCB routes the payment to itself.
* `bankChargeBearer` is always `SHARED` on this payment type.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| currency | ISO 4217 currency code | 3 | M |
| customerReference | SWIFT | 16 | M |
| paymentDetails | SWIFT | 140 | O |
| purposeCode | UAE Purpose of Payment code | | M |
| receiver.name | Free text | 140 | M |
| receiver.bankAccountNumber | UAE IBAN, or at most 16 digits | | M |
| receiver.address.city | SWIFT | 35 | M |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
# Acme UOB Singapore Payments (https://docs.tryacme.com/guides/uob-sg-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
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 [#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
## General notes [#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](https://www.iso.org/iso-3166-country-codes.html)) e.g. `SG`, `MY`, `AU`, `US`, etc.
## FAST [#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 [#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 [#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 [#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 [#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 [#tt]
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | SWIFT | 20 | M |
| instructionForSenderBank | SWIFT | 140 | O |
| outgoingPurposeCode | Alphanumeric | 10 | O (TT only) |
| paymentDetails | SWIFT | 140 | O |
| bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED` | | O |
| receiver.name | SWIFT | 35 (140 on CBPR+) | 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 on CBPR+ |
| receiver.address.city | SWIFT | 35 | M on CBPR+ |
| receiver.address.country | Uppercase ISO country code | 2 | M |
For organizations onboarded to UOB's CBPR+ update, `receiver.address.line1` and
`receiver.address.city` are mandatory. City is emitted as the structured town
name rather than as part of `receiver.address`, so it does not count against
the 3 x 35 address-line limit above. `receiver.name` also accepts up to 140
characters instead of 35.
# Acme UOB Malaysia Payments (https://docs.tryacme.com/guides/uob-my-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going through UOB Malaysia. 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
* BIC11:
* 11-character Bank Identifier Code
## General notes [#general-notes]
* The beneficiary country (`payments[N].receiver.address.country`) is mandatory for all payment types, and must be a valid, uppercase 2-letter ISO country code ([ISO 3166 Alpha-2](https://www.iso.org/iso-3166-country-codes.html)) e.g. `MY`, `SG`, `AU`, `US`, etc.
* The format for BIC (used in `payments[N].receiver.bank`) 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)).
* Payment date (`paymentDate`) cannot be in the past (validated against Malaysia time zone * Asia/Kuala_Lumpur).
* All payments require:
* `payments[N].receiver.transactorRelationship`: Must be `RELATED` or `NOT_RELATED`
* `payments[N].receiver.residencyStatus`: Must be `RESIDENT` or `NON_RESIDENT`
## TT [#tt]
* Payment details (`payments[N].paymentDetails`) is **mandatory**. Refer to [UOB additional payment details](https://uniservices1.uobgroup.com/secure/forms/business/BIBPlus_clearing_codes.html#bc2) for details.
* Purpose code (`payments[N].purposeCode`) is **mandatory**. Please contact the bank for the latest BNM purpose codes.
* Purpose of payment (`payments[N].purposeOfPayment`) is **mandatory**.
* Address is **mandatory** including country and city fields.
* Clearing code (`payments[N].receiver.localRoutingIdentifier`) may be required for TT payments to certain countries or currencies. Refer to [UOB clearing codes](https://uniservices1.uobgroup.com/secure/forms/business/BIBPlus_clearing_codes.html#bc2) for details.
* Extra allowed characters: `+` `'` `-` `.` `,` `(` `)` `/` `:` `?` `#` `$` `%` `&` `*` `=` `_` `` ` `` `{` `|` `}` `"` `;` `<` `>` `@` `[` `\` `]`
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].customerReference | SWIFT | 16 | M |
| payments[N].paymentDetails | SWIFT
See [UOB additional payment details](https://uniservices1.uobgroup.com/secure/forms/business/BIBPlus_clearing_codes.html#bc2).
Details will appear on the payment advice email. | 140 | M |
| payments[N].purposeCode | Alphanumeric Example: 00001
Please contact the bank for the latest BNM purpose codes. | 5 | M |
| payments[N].bankChargeBearer | `SENDER` or `RECEIVER` or `SHARED`. Default to `SHARED` if not provided. | | O |
| payments[N].purposeOfPayment | SWIFT | 60 | M |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | Alphanumeric | 35 | C (Required for certain countries/currencies. See [UOB clearing codes](https://uniservices1.uobgroup.com/secure/forms/business/BIBPlus_clearing_codes.html#bc2).) |
| payments[N].receiver.intermediaryBank | Alphanumeric | 11 | O |
| payments[N].receiver.address.line1 | SWIFT | 35 | M |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | M |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| payments[N].receiver.transactorRelationship | RELATED or NOT_RELATED | | M |
| payments[N].receiver.residencyStatus | RESIDENT or NON_RESIDENT | | M |
## MY_RENTAS [#my_rentas]
* Currency must be **MYR only**.
* Purpose code (`payments[N].purposeCode`) is **mandatory**. Please contact the bank for the latest BNM purpose codes.
* Purpose of payment (`payments[N].purposeOfPayment`) is **mandatory**.
* Address is **mandatory** including country field.
* Extra allowed characters: `/` `-` `?` `:` `( )` `.` `,` `'` `+` `#` `$` `%` `&` `*` `=` `_` `` ` `` `{` `|` `}` `"` `;` `<` `>` `@` `[` `\` `]`
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].currency | MYR only | 3 | M |
| payments[N].customerReference | SWIFT | 35 | M |
| payments[N].paymentDetails | SWIFT
Details will appear on the payment advice email. | 140 | O |
| payments[N].purposeCode | Alphanumeric Example: 00001
Please contact the bank for the latest BNM purpose codes. | 5 | M |
| payments[N].purposeOfPayment | SWIFT | 60 | M |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | Alphanumeric | 35 | O |
| payments[N].receiver.intermediaryBank | Alphanumeric | 11 | O |
| payments[N].receiver.address.line1 | SWIFT | 35 | M |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | O |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| payments[N].receiver.transactorRelationship | RELATED or NOT_RELATED | | M |
| payments[N].receiver.residencyStatus | RESIDENT or NON_RESIDENT | | M |
## MY_IBG [#my_ibg]
* Currency must be **MYR only**.
* Purpose code (`payments[N].purposeCode`) is **mandatory**. Please contact the bank for the latest BNM purpose codes.
* Purpose of payment (`payments[N].purposeOfPayment`) is **mandatory**.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].currency | MYR only | 3 | M |
| payments[N].customerReference | SWIFT | 30 | M |
| payments[N].paymentDetails | SWIFT
Details will appear on the payment advice email. | 140 | O |
| payments[N].purposeCode | Alphanumeric Example: 00001
Please contact the bank for the latest BNM purpose codes. | 5 | M |
| payments[N].purposeOfPayment | SWIFT | 60 | M |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 20 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.transactorRelationship | RELATED or NOT_RELATED | | M |
| payments[N].receiver.residencyStatus | RESIDENT or NON_RESIDENT | | M |
## MY_IAFT [#my_iaft]
* Currency must be **MYR only**.
* Purpose code (`payments[N].purposeCode`) is **mandatory**. Please contact the bank for the latest BNM purpose codes.
* Purpose of payment (`payments[N].purposeOfPayment`) is **mandatory**.
* Both sender and receiver accounts must be **with UOB Malaysia** (book transfer).
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].currency | MYR only | 3 | M |
| payments[N].customerReference | SWIFT | 30 | M |
| payments[N].paymentDetails | SWIFT
Details will appear on the payment advice email. | 140 | O |
| payments[N].purposeCode | Alphanumeric Example: 00001
Please contact the bank for the latest BNM purpose codes. | 5 | M |
| payments[N].purposeOfPayment | SWIFT | 60 | M |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 20 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.transactorRelationship | RELATED or NOT_RELATED | | M |
| payments[N].receiver.residencyStatus | RESIDENT or NON_RESIDENT | | M |
## MY_DUITNOW [#my_duitnow]
* Currency must be **MYR only**.
* Use `payments[N].receiver.proxyType` + `payments[N].receiver.proxyValue` instead of bank account numbers.
* Purpose code (`payments[N].purposeCode`) is **conditionally mandatory** if `payments[N].receiver.residencyStatus = NON_RESIDENT`.
* Purpose of payment (`payments[N].purposeOfPayment`) is **conditionally mandatory** if `payments[N].receiver.residencyStatus = NON_RESIDENT`.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].currency | MYR only | 3 | M |
| payments[N].customerReference | Alphanumeric | 40 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric Example: 00001
Please contact the bank for the latest BNM purpose codes. | 5 | C (required if `payments[N].receiver.residencyStatus = NON_RESIDENT`) |
| payments[N].purposeOfPayment | SWIFT | 60 | C (required if `payments[N].receiver.residencyStatus = NON_RESIDENT`) |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 100 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.proxyType | `NRIC` or `PASSPORT` or `ARMY` or `MOBILE` or `BUSINESS_REG` | M | |
| payments[N].receiver.proxyValue
for NRIC | NRIC / Malaysian Identification Number | 34 | M |
| payments[N].receiver.proxyValue
for PASSPORT | Passport Number + Alpha-3 country code of the country of issuance. E.g: given a passport number E394029340V and country code of Singapore (SGP), the value will be E394029340VSGP. | 34 | M |
| payments[N].receiver.proxyValue
for ARMY | Army Number | 34 | M |
| payments[N].receiver.proxyValue
for MOBILE | + followed by 7 to 34 digits
Example: `+60121234567` | 34 | M |
| payments[N].receiver.proxyValue
for BUSINESS_REG | Business Registration Number (BRN)
Example: `202201234565` | 34 | M |
| payments[N].receiver.transactorRelationship | RELATED or NOT_RELATED | | M |
| payments[N].receiver.residencyStatus | RESIDENT or NON_RESIDENT | | M |
## MY_IBFT [#my_ibft]
* Currency must be **MYR only**.
* Proxy identifiers are **NOT supported**, use bank account number instead.
* Purpose code (`payments[N].purposeCode`) is **conditionally mandatory** if `payments[N].receiver.residencyStatus = NON_RESIDENT`.
* Purpose of payment (`payments[N].purposeOfPayment`) is **conditionally mandatory** if `payments[N].receiver.residencyStatus = NON_RESIDENT`.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| payments[N].currency | MYR only | 3 | M |
| payments[N].customerReference | Alphanumeric | 40 | M |
| payments[N].paymentDetails | SWIFT | 140 | O |
| payments[N].purposeCode | Alphanumeric Example: 00001
Please contact the bank for the latest BNM purpose codes. | 5 | C (required if `payments[N].receiver.residencyStatus = NON_RESIDENT`) |
| payments[N].purposeOfPayment | SWIFT | 60 | C (required if `payments[N].receiver.residencyStatus = NON_RESIDENT`) |
| payments[N].paymentAdviceEmails[N] | Valid email address
Example: ["[finance@company.com](mailto:finance@company.com)"] | 100 per email (max 5 emails) | O |
| payments[N].receiver.name | SWIFT | 140 | M |
| payments[N].receiver.bank | BIC11 | 11 | M |
| payments[N].receiver.bankAccountNumber | Numeric | 34 | M |
| payments[N].receiver.transactorRelationship | RELATED or NOT_RELATED | | M |
| payments[N].receiver.residencyStatus | RESIDENT or NON_RESIDENT | | M |
# Acme Zand Bank UAE Payments (API) (https://docs.tryacme.com/guides/zand-ae-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes validations / allowed data formats for Acme payments going
through Zand Bank UAE. These will be validated by Acme and further validated by
the bank. These rules may be stricter than what the bank requires.
See [Acme Zand Bank UAE Transactions](/guides/zand-ae-transactions) for [Transactions API](/reference/get-transactions) `transactionType` categorization.
## Common Definitions [#common-definitions]
* BIC8 / BIC11:
* Bank Identifier Code, 8 to 11 characters (uppercase letters + digits).
* Required for international (TT) transfers.
* IBAN:
* 23-character International Bank Account Number starting with the `AE` country prefix.
* Required for all domestic transfers (BKTR, UAE_FTS, UAE_IBFT).
* `customerReference`:
* Must be 16–40 characters (alphanumeric + hyphen).
* If value is null or shorter than 16, Acme generates a 16 characters UUID and replaces it.
* Allowed currencies: `AED`, `BHD`, `CNY`, `EUR`, `GBP`, `HKD`, `INR`, `QAR`, `SAR`, `SGD`, `USD`.
## General notes [#general-notes]
* For domestic transfers, Zand auto-selects and routes the underlying rail by amount:
* **FTS** for amounts > 50,000 AED (high value)
* **IPI** for amounts ≤ 50,000 AED (low value)
* The `purposeCode` is required for all payment types and defaults to `FIS` if not supplied.
Refer to the list from [Central Bank UAE](https://www.centralbank.ae/media/ipaifsll/bop-purposeofpaymentcodestable-en-18092017.pdf).
## BKTR [#bktr]
Book Transfer — intra-Zand. Same-bank transfer between two Zand accounts.
* Currency must be one of the 11 allowed currencies (typically AED).
* `customerReference` must be 16–40 characters.
* Receiver IBAN must be a valid UAE IBAN (23 chars, `AE` prefix).
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric + hyphen | 16–40 | M |
| paymentDetails | Free text | 100 | M |
| purposeCode | 3-letter code (defaults to `FIS`) | 3 | O |
| receiver.name | Free text | 75 | M |
| receiver.iban | UAE IBAN (`AE` + 21 chars) | 23 | M |
Example Request:
```json
{
"type": "BKTR",
"amount": 100000,
"currency": "AED",
"customerReference": "1234567890ABCDEF",
"paymentDetails": "Invoice INV-12345",
"purposeCode": "FIS",
"senderAccountId": "intacc_0H3BQNT7HBW2W",
"receiver": {
"name": "Test Receiver Name",
"iban": "AE360961000061010000012"
}
}
```
## UAE_FTS [#uae_fts]
UAE Interbank Fund Transfer Service via the domestic API. Used for high-value transfers
(> 50,000 AED).
* Currency must be one of the 11 allowed currencies (typically AED).
* `customerReference` must be 16–40 characters.
* Receiver IBAN must be a valid UAE IBAN (23 chars, `AE` prefix).
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric + hyphen | 16–40 | M |
| paymentDetails | Free text | 100 | M |
| purposeCode | 3-letter code (defaults to `FIS`) | 3 | O |
| receiver.name | Free text | 75 | M |
| receiver.iban | UAE IBAN (`AE` + 21 chars) | 23 | M |
Example Request:
```json
{
"type": "UAE_FTS",
"amount": 250000,
"currency": "AED",
"customerReference": "1234567890ABCDEF",
"paymentDetails": "Invoice INV-12345",
"purposeCode": "FIS",
"senderAccountId": "intacc_0H3BQNT7HBW2W",
"receiver": {
"name": "Test Receiver Name",
"iban": "AE070331234567890123456"
}
}
```
## UAE_IBFT [#uae_ibft]
UAE Interbank Immediate Payment Instruction (IPI) via the domestic API. Used for low-value
transfers (≤ 50,000 AED).
* Currency must be one of the 11 allowed currencies (typically AED).
* `customerReference` must be 16–40 characters.
* Receiver IBAN must be a valid UAE IBAN (23 chars, `AE` prefix).
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric + hyphen | 16–40 | M |
| paymentDetails | Free text | 100 | M |
| purposeCode | 3-letter code (defaults to `FIS`) | 3 | O |
| receiver.name | Free text | 75 | M |
| receiver.iban | UAE IBAN (`AE` + 21 chars) | 23 | M |
Example Request:
```json
{
"type": "UAE_IBFT",
"amount": 5000,
"currency": "AED",
"customerReference": "1234567890ABCDEF",
"paymentDetails": "Invoice INV-12345",
"purposeCode": "FIS",
"senderAccountId": "intacc_0H3BQNT7HBW2W",
"receiver": {
"name": "Test Receiver Name",
"iban": "AE220211234567890123456"
}
}
```
## TT [#tt]
Telegraphic Transfer — Cross-border International SWIFT transfer
* `customerReference` minimum 16 characters. Total 16–40 characters.
* Receiver BIC required, 8–11 characters.
* Receiver postal address required (line1, city, country).
* Country must be ISO 3166-1 alpha-2 (2 chars).
* `receiver.beneficiaryType` must be `INDIVIDUAL` or `COMPANY`.
| field | pattern / charset | max length | mandatory/optional |
| --- | --- | --- | --- |
| customerReference | Alphanumeric + hyphen | 16–40 | M |
| paymentDetails | Free text | 100 | M |
| purposeCode | 3-letter code (defaults to `FIS`) | 3 | O |
| receiver.name | Free text | 75 | M |
| receiver.bank | BIC8 / BIC11 | 8–11 | M |
| receiver.iban | Beneficiary account IBAN | — | M |
| receiver.address.line1 | Free text | — | M |
| receiver.address.line2 | Free text | — | O |
| receiver.address.city | Free text | — | M |
| receiver.address.state | Free text | — | O |
| receiver.address.country | ISO 3166-1 alpha-2 | 2 | M |
| receiver.address.postalCode | Free text | — | O |
| receiver.beneficiaryType | `INDIVIDUAL` or `COMPANY` | — | O |
Example Request:
```json
{
"type": "TT",
"amount": 10000,
"currency": "USD",
"customerReference": "1234567890ABCDEF",
"paymentDetails": "Invoice INV-12345",
"purposeCode": "FIS",
"senderAccountId": "intacc_0H3BQNT7HBW2W",
"receiver": {
"name": "Test Receiver Name",
"bank": "CHASUS33XXX",
"iban": "GB29NWBK60161331926819",
"address": {
"line1": "123 Main Street",
"city": "London",
"country": "GB",
"postalCode": "EC1A 1BB"
},
"beneficiaryType": "COMPANY"
}
}
```
## Payment Statuses [#payment-statuses]
| Zand Status | Terminal? | Acme Payment Status |
| --- | --- | --- |
| `INITIATED` | No | `SUBMITTED` (workflow in progress) |
| `PROCESSED` | Yes | `COMPLETED` (FTS/IBFT success) |
| `COMPLETED` | Yes | `COMPLETED` |
| `REJECTED` | Yes | `FAILED` |
| `REVERSED` | Yes | `FAILED` (reversed by beneficiary bank — FTS/IBFT only) |
Possible result codes for `FAILED` payments:
| resultCode | Description |
| --- | --- |
| `PAYMENT_REJECTED` | Payment rejected. |
| `PAYMENT_CANCELLED` | Payment aborted or cancelled by user. |
| `PAYMENT_EXPIRED` | Payment expired. |
| `REJECTED_BY_APPROVER` | Payment rejected by authorizer. |
| `REJECTED_BY_SENDING_BANK` | Payment rejected by sending bank. |
| `REJECTED_BY_RECEIVING_BANK` | Payment rejected by receiving bank. |
| `RETURNED` | Payment returned (maps from Zand `REVERSED`). |
| `PROCESSING_ERROR` | Processing error encountered. |
| `OTHERS` | Default resultCode if status code returned is not a known status code. |
# Acme DBS Singapore Receiving Party Purpose Codes (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
Country-specific purpose codes for outgoingPurposeCode on DBS Singapore TT payments, one page per corridor.
`outgoingPurposeCode` on [Acme DBS Singapore Payments (API)](/guides/dbs-sg-api-payments) and [Acme DBS Singapore Payments (H2H)](/guides/dbs-sg-payments) accepts a country-specific purpose code used for purpose code reporting for the receiving party. It applies to `TT` only, and is **mandatory** when the payment currency or beneficiary country falls into one of the corridors below — otherwise it is optional.
## Country-specific purpose codes [#country-specific-purpose-codes]
For the corridors listed under [MEPS and TT - SWIFT ISO20022 Payment data changes](/guides/dbs-sg-api-payments#meps-and-tt---swift-iso20022-payment-data-changes), DBS may require a country-specific purpose code. Source: DBS Receiving Party Purpose Code (RPPC) list.
* The code **value** is not validated by Acme or by DBS as the sending bank — Acme validates the format only (`TT` only, max 10 characters). DBS validates the value only for payments into Malaysia; for every other corridor validation is subject to the beneficiary bank.
* The beneficiary country (the "paying into" location) takes precedence over the currency when a payment matches more than one corridor. For example, an `MYR` payment to a beneficiary in the UAE uses the UAE purpose code list below, not Malaysia's.
Each corridor's code list is on its own page:
* [CNH and CNY](/guides/dbs-sg-receiving-party-purpose-codes/cnh-cny): Payment in CNH or CNY, any beneficiary country, 5 codes.
* [Myanmar (MM)](/guides/dbs-sg-receiving-party-purpose-codes/mm): Beneficiary in Myanmar, any currency, 71 codes.
* [United Arab Emirates (AE)](/guides/dbs-sg-receiving-party-purpose-codes/ae): Beneficiary in the United Arab Emirates, any currency, 107 codes.
* [Malaysia (MY)](/guides/dbs-sg-receiving-party-purpose-codes/my): Beneficiary in Malaysia or payment in MYR, 105 codes.
* [India (IN)](/guides/dbs-sg-receiving-party-purpose-codes/in): Beneficiary in India or payment in INR, 88 codes.
* [Kuwait (KW)](/guides/dbs-sg-receiving-party-purpose-codes/kw): Beneficiary in Kuwait or payment in KWD, 140 codes.
* [Bahrain (BH)](/guides/dbs-sg-receiving-party-purpose-codes/bh): Beneficiary in Bahrain or payment in BHD, 67 codes.
* [Qatar (QA)](/guides/dbs-sg-receiving-party-purpose-codes/qa): Beneficiary in Qatar or payment in QAR, 85 codes.
* [Thailand (TH)](/guides/dbs-sg-receiving-party-purpose-codes/th): Beneficiary in Thailand or payment in THB, 8 codes.
* [Jordan (JO)](/guides/dbs-sg-receiving-party-purpose-codes/jo): Beneficiary in Jordan or payment in JOD, 65 codes.
* [Philippines (PH)](/guides/dbs-sg-receiving-party-purpose-codes/ph): Beneficiary in the Philippines or payment in PHP, 23 codes.
* [Kenya (KE)](/guides/dbs-sg-receiving-party-purpose-codes/ke): Beneficiary in Kenya or payment in KES, 125 codes.
* [Kyrgyzstan (KG)](/guides/dbs-sg-receiving-party-purpose-codes/kg): Beneficiary in Kyrgyzstan or payment in KGS, 449 codes.
* [Angola (AO)](/guides/dbs-sg-receiving-party-purpose-codes/ao): Beneficiary in Angola or payment in AOA, 300 codes.
* [Pakistan (PK)](/guides/dbs-sg-receiving-party-purpose-codes/pk): Beneficiary in Pakistan or payment in PKR, 265 codes.
# CNH and CNY (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/cnh-cny)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Payment in CNH or CNY, any beneficiary country.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Payment in CNH or CNY, any beneficiary country. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `GOD` | Goods trade |
| `STR` | Service trade |
| `CTF` | Capital transfer |
| `OCA` | Other Transfer |
| `RMT` | Transfers to personal current accounts for personal income, family maintenance, donation |
# Myanmar (MM) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/mm)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Myanmar, any currency.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Myanmar, any currency. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `1100` | Exports |
| `1200` | Imports |
| `2110` | Freight services - Sea transport |
| `2120` | Freight services - Air transport |
| `2130` | Freight services - Other transport |
| `2210` | Passenger services - Sea transport |
| `2220` | Passenger services - Air transport |
| `2230` | Passenger services - Other transport |
| `2310` | Other transport services - Sea transport |
| `2320` | Other transport services - Air transport |
| `2330` | Other transport |
| `2340` | Other transport services - Postal and courier services |
| `2510` | Travel services - Business travel |
| `2520` | Travel services - Personal travel |
| `3100` | Manufacturing services |
| `3200` | Maintenance and repair services |
| `3310` | Construction abroad |
| `3320` | Construction in Myanmar |
| `3410` | Insurance premiums |
| `3420` | Insurance claims |
| `3430` | Financial services fees |
| `3500` | Charges for use of intellectual property (royalties and lisence fees) |
| `3610` | Telecommunication |
| `3620` | Computer services |
| `3630` | Information service |
| `3710` | Research and development services |
| `3720` | Professional and management consulting services |
| `3725` | Operating lease (rental of equipment) |
| `3730` | Technical, trade-related, and other business services |
| `3740` | Audiovisual and related services |
| `3750` | Personal, cultural, and recreational services |
| `3800` | Services to government not included elsewhere |
| `4100` | Dividends |
| `4300` | Interest |
| `4400` | Taxes |
| `4500` | Subsidies |
| `4600` | Rent |
| `4700` | Compensation of employees |
| `5200` | Workers' remittances |
| `5300` | Other personal transfers |
| `5400` | Grants for infrastructure and purchase of capital goods |
| `5500` | Development assistance |
| `5600` | Other current transfers |
| `7100` | Equity |
| `7200` | Debt between affiliated enterprises |
| `7310` | Long-term debt securities |
| `7320` | Short-term debt securities |
| `7400` | Options, futures, warrants, swaps, etc. |
| `7510` | Loans, long-term |
| `7520` | Loans, short-term |
| `7530` | Trade credits and advances, long-term |
| `7540` | Trade credits and advances, short-term |
| `7600` | Deposits |
| `7800` | Other |
| `8100` | Equity |
| `8200` | Debt between affiliated enterprises |
| `8250` | Payments of local expenses of resident affiliates by their parent companies |
| `8310` | Long-term debt securities |
| `8320` | Short-term debt securities |
| `8400` | Options, futures, warrants, swaps, etc |
| `8510` | Loans, long-term |
| `8520` | Loans, short-term |
| `8530` | Trade credits and advances, long-term |
| `8540` | Trade credits and advances, short-term |
| `8600` | Deposits |
| `8800` | Other |
| `9000` | Transfer of funds between residents' account |
| `9100` | Transfer of funds between banks resident in Myanmar |
| `9200` | Transfer of funds of resident banks with banks abroad |
| `9300` | Deposits in and withdrawals from residents' accounts |
| `9400` | Purchase and sale of foreign currency between residents and resident banks |
# United Arab Emirates (AE) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/ae)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in the United Arab Emirates, any currency.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in the United Arab Emirates, any currency. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `ACM` | Agency Commission |
| `AES` | Advance payment against EOS |
| `ALW` | Allowances |
| `ATS` | Air transport |
| `BON` | Bonus |
| `CCP` | Corporate Card Payment |
| `CHC` | Charitable Contributions |
| `CIN` | Commercial Investments |
| `COM` | Commission |
| `COP` | Compensation |
| `CRP` | Credit Card Payments |
| `DCP` | Pre-Paid Reloadable & Personalized Debit Card Payments |
| `DIV` | Dividend Payouts |
| `DOE` | Dividends on equity not intra group |
| `EDU` | Educational Support |
| `EMI` | Equated Monthly Instalments |
| `EOS` | End of Service |
| `FAM` | Family Support |
| `FIS` | Financial services |
| `GMS` | Processing repair and maintenance services on goods |
| `GOS` | Government goods and services embassies etc |
| `GRI` | Government related income taxes tariffs capital transfers etc |
| `IFS` | Information services |
| `IGD` | Intra group dividends |
| `IGT` | Inter group transfer |
| `IID` | Intra group interest on debt |
| `INS` | Insurance services |
| `IPC` | Charges for the use of intellectual property royalties |
| `IPO` | IPO Subscriptions |
| `IRP` | Interest rate swap payments |
| `IRW` | Interest rate unwind payments |
| `ISH` | Income on investment funds shares |
| `ISL` | Interest on securities more than a year |
| `ISS` | Interest on securities less than a year |
| `ITS` | Computer services |
| `LAS` | Leave Salary |
| `LIP` | Loan Interest Payments |
| `LNC` | Loan Charges |
| `MCR` | Monetary Claim Reimbursements Medical Insurance or Auto Insurance etc. |
| `MWI` | Mobile Wallet cash in |
| `MWO` | Mobile Wallet cash out |
| `MWP` | Mobile Wallet payments |
| `OAT` | Own account transfer |
| `OTS` | Other modes of transport |
| `OVT` | Overtime |
| `PEN` | Pension |
| `PIN` | Personal Investments |
| `PIP` | Profits on Islamic products |
| `PMS` | Professional and management consulting services |
| `PRP` | Profit rate swap payments |
| `PRR` | Profits or rents on real estate |
| `PRS` | Personal cultural audio visual and recreational services |
| `PRW` | Profit rate unwind payments |
| `RDS` | Research and development services |
| `RNT` | Rent Payments |
| `SAA` | Salary Advance |
| `SAL` | Salary |
| `SCO` | Construction |
| `STR` | Travel |
| `STS` | Sea transport |
| `SVI` | Stored value card cash-in |
| `SVO` | Stored value card cash-out |
| `SVP` | Stored value card payments |
| `TCS` | Telecommunication services |
| `TKT` | Tickets |
| `TOF` | Transfer of funds between persons Normal and Juridical |
| `TTS` | Technical trade-related and other business services |
| `UTL` | Utility Bill Payments |
| `AFA` | Receipts or payments from personal residents bank account or deposits abroad |
| `AFL` | Receipts or payments from personal N-resident bank account in the UAE |
| `CEA` | Equity for the establishment of new company from residents abroad, equity of merger or acquisition of companies abroad from residents, and participation to capital increase of related company abroad |
| `CEL` | Equity for the establishment of new company in the UAE from n-residents, equity of merger or acquisition of companies in the UAE from n-residents, participation to capital increase of related companies |
| `DLA` | Purchases and sales of foreign debt securities more than a year in the related companies |
| `DLL` | Purchases and sales of securities issued by residents more than a year in the related companies |
| `DSA` | Purchases and sales of foreign debt securities less than a year in the related companies |
| `DSL` | Purchases and sales of securities issued by residents less than a year in the related companies |
| `FDA` | Financial derivatives foreign |
| `FDL` | Financial derivatives in the UAE |
| `FIA` | Investment fund shares foreign |
| `FIL` | Investment fund shares in the UAE |
| `FSA` | Equity other than investment fund shares in the related companies abroad |
| `FSL` | Equity other than investment fund shares in the related companies in the UAE |
| `LEA` | Leasing abroad |
| `LEL` | Leasing in the UAE |
| `LLA` | Loans - Drawings or Repayments on loans extended to n-residents - long term |
| `LLL` | Loans - Drawings or Repayments on foreign loans extended to residents - long term |
| `PPA` | Purchase of real estate abroad from residents |
| `PPL` | Purchase of real estate in the UAE from n-residents |
| `RFS` | Repos on foreign securities |
| `RLS` | Repos on securities issued by residents |
| `SLA` | Loans - Drawings or Repayments on loans extended to n-residents - short term |
| `SLL` | Loans - Drawings or Repayments on foreign loans extended to residents - short term |
| `TCP` | Trade credits and advances payable |
| `TCR` | Trade credits and advances receivable |
| `DLF` | Debt instruments intragroup loans, deposits foreign (above 10% share) |
| `DSF` | Debt instruments intragroup foreign securities |
| `GDE` | Goods sold (exports in fob value) |
| `GDI` | Goods bought (imports in cif value) |
| `LDL` | Debt instruments intragroup loans, deposits in the UAE (above 10% share) |
| `LDS` | Debt instruments intragroup securities in the UAE |
| `RDA` | Reverse debt instruments abroad |
| `RDL` | Reverse debt instruments in the UAE |
| `REA` | Reverse equity share abroad |
| `REL` | Reverse equity share in the UAE |
| `UFP` | Unclaimed funds placement |
| `TAX` | Tax Payment |
| `XAT` | Tax Refund |
# Malaysia (MY) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/my)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Malaysia or payment in MYR.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Malaysia or payment in MYR. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `00000` | Food and live animals |
| `01000` | Beverages and tobacco |
| `02000` | Crude materials, inedible, except fuels |
| `03000` | Mineral fuels, lubricants and related materials |
| `04000` | Animal and vegetable oils, fat and waxes |
| `05000` | Chemicals and related products, not classified elsewhere |
| `06000` | Manufactured goods |
| `07000` | Machinery, non-customised packaged software and transport equipment |
| `07100` | Power lines, pipelines and undersea communication cables |
| `08000` | Miscellaneous manufactured articles |
| `09000` | Commodities and miscellaneous transactions not classified elsewhere |
| `09001` | Goods (broad classification) Services Manufacturing Services |
| `09100` | Refunds relating to goods transactions |
| `09700` | Non-monetary gold |
| `10010` | Manufacturing services on physical inputs that owned by others (goods for processing) |
| `11110` | Freight by air |
| `11120` | Freight by sea |
| `11130` | Freight by other modes of transportation |
| `11210` | Passenger fare by air |
| `11220` | Passenger fare by sea |
| `11230` | Passenger fare by other modes of transportation |
| `12110` | Airport services |
| `12120` | Port services |
| `12130` | Other terminal facilities |
| `12140` | Postal and courier services |
| `12210` | Charter of aircraft (with crew) |
| `12220` | Charter of ships and vessels (with crew) |
| `12230` | Charter of other modes of transport (with crew) |
| `12310` | Rentals/operating leasing of aircraft (without crew) |
| `12320` | Rentals/operating leasing of ships and vessels (without crew) |
| `12330` | Rentals/operating leasing of other transport equipment (without crew) |
| `12400` | Fees for salvage operations |
| `12500` | Maintenance and repair of aircraft, ships and other transport equipment |
| `13110` | Goods and services purchased by travellers |
| `13210` | Goods and services purchased through business and official travel |
| `13220` | Goods and services purchased by short term workers |
| `13300` | Travel for pilgrimage and religious observances |
| `13400` | Travel for medical treatment |
| `13500` | Education-related |
| `14110` | Direct investment income |
| `14120` | Portfolio investment income |
| `14210` | Interest paid to/received from related non-resident company relating to loan obligations, including non-participating preference shares and financial leases |
| `14220` | Interest paid to/received from non-related non-resident company relating to loan obligations, including non-participating preference shares and financial leases |
| `14310` | Wages and salaries in cash |
| `14320` | Wages and salaries in kind/benefits attributable to employees |
| `14330` | Employer's social contributions |
| `14410` | Taxes on products and productions |
| `14420` | Subsidies on products and productions |
| `14430` | Rental on natural resources |
| `15100` | Malaysian government offices abroad and foreign offices in Malaysia |
| `15200` | International organisations |
| `15300` | Trade missions |
| `15400` | Commission & other charges relating to loan obligations of the Malaysian government |
| `15500` | The Bank minting of coins and printing of notes |
| `16100` | Telecommunication services |
| `16210` | Construction and installation services in Malaysia |
| `16220` | Construction and installation services abroad |
| `16311` | Premium paid/received on high risk insurance/takaful relating to fire, marine, aviation, etc. |
| `16312` | Premiums paid/received on other general insurance/takaful |
| `16313` | Premium paid/received on life insurance/takaful |
| `16314` | Premiums paid/received on reinsurance/retakaful |
| `16315` | Premium paid/received on insurance/takaful on goods |
| `16321` | Claims settlements on high risk insurance/takaful relating to fire, marine, aviation, etc. |
| `16322` | Claims settlements on other general insurance/takaful |
| `16323` | Claims settlements on life insurance/takaful |
| `16324` | Claims paid/received on reinsurance/retakaful |
| `16325` | Claims paid/received on insurance/takaful on goods |
| `16332` | Auxiliary insurance services |
| `16510` | Computer services |
| `16520` | Information services |
| `16610` | Charges associated with intellectual property rights |
| `16620` | License fees to reproduce and distribute intellectual property |
| `16711` | Merchanting trade in Malaysia |
| `16712` | Merchanting trade abroad |
| `16720` | Sharing of administrative expenses |
| `16730` | Research and development services |
| `16740` | Architectural, engineering, and other technical services |
| `16750` | Agricultural, mining, and on-site processing |
| `16760` | Advertising, market research and public opinion polling services |
| `16771` | Legal services |
| `16772` | Accounting services |
| `16773` | Management consulting services |
| `16780` | Rentals/operating leasing of dwellings, other buildings and machinery |
| `16791` | Trade-related services |
| `16792` | Waste treatment services |
| `16793` | Other business services |
| `16810` | Audio-visual and artistic related services |
| `16820` | Health services |
| `16830` | Education services |
| `16840` | Heritage and recreational services |
| `16850` | Other personal services |
| `16910` | Refunds relating to services transactions |
| `21110` | Grants, aid, donations and unclaimed monies (to MY govt) |
| `21120` | Pension and gratuity (to MY govt) |
| `21131` | Taxes on income, wealth and other taxable assets (to MY govt) |
| `21132` | Fines and penalties (to MY govt) |
| `21133` | Social contributions and benefits (to MY govt) |
| `21140` | Compensation and pledging (to MY govt) |
| `21210` | Grants and gifts |
| `21220` | Workers' remittances |
| `21230` | Legacies, compensations and prizes |
| `21241` | Taxes on income, wealth and other taxable assets |
| `21242` | Fines and penalties |
| `21245` | Net premiums on non-life insurance and standardised guarantees |
| `21246` | Non-life insurance claims and calls under standardised guarantees |
# India (IN) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/in)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in India or payment in INR.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in India or payment in INR. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `P1002` | Trade related services - commission on exports / imports |
| `P1003` | Operational leasing services (other than financial leasing) without operating crew, including charter hire - Airlines companies |
| `P1004` | Legal services |
| `P1005` | Accounting, auditing, book keeping services |
| `P1006` | Business and management consultancy and public relations services |
| `P1007` | Advertising, trade fair service |
| `P1008` | Research & Development services |
| `P1009` | Architectural services |
| `P1010` | Agricultural services like protection against insects & disease, increasing of harvest yields, forestry services |
| `P1011` | Inward remittance for maintenance of offices in India |
| `P1013` | Environmental Services |
| `P1014` | Engineering Services |
| `P1015` | Tax consulting services |
| `P1016` | Market research and public opinion polling service |
| `P1017` | Publishing and printing services |
| `P1019` | Commission agent services |
| `P1020` | Wholesale and retailing trade services |
| `P1021` | Operational leasing services (other than financial leasing) without operating crew, including charter hire - Shipping companies |
| `P1022` | Other Technical Services including scientific/space services |
| `P0099` | Other capital receipts not included elsewhere |
| `P0901` | Franchises services |
| `P0902` | Receipts for use, through licensing arrangements, of produced originals or prototypes (such as manuscripts and films), patents, copyrights, trademarks, industrial processes, franchises etc. |
| `P0501` | Receipts on account of services relating to cost of construction of projects in India |
| `P0502` | Receipts on account of construction works carried out abroad by Indian Companies |
| `P0101` | Value of export bills negotiated / purchased/discounted etc. (covered under GR/PP/SOFTEX/EC copy of shipping bills etc.) - Other than Nepal and Bhutan |
| `P0102` | Realisation of export bills (in respect of goods) sent on collection (full invoice value) - Other than Nepal and Bhutan |
| `P0103` | Advance receipts against export contracts, which will be covered later by GR/PP/SOFTEX/SDF - other than Nepal and Bhutan |
| `P0108` | Goods sold under merchanting / Receipt against export leg of merchanting trade |
| `P0011` | Repayment of loans extended to Non-Residents |
| `P0701` | Financial intermediation except investment banking - Bank charges, collection charges, LC charges, etc. |
| `P0702` | Investment banking - brokerage, under writing commission etc. |
| `P0703` | Auxiliary services - charges on operation & regulatory fees, custodial services, depository services etc. |
| `P0003` | Repatriation of Indian Direct investment abroad (by branches & wholly owned subsidiaries and associates) in equity shares |
| `P0004` | Repatriation Indian Direct investment abroad (by branches & wholly owned subsidiaries and associates) in debt instruments |
| `P0005` | Repatriation of Indian investment abroad in real estate |
| `P0006` | Foreign Direct Investment made by overseas Investors in India in equity shares |
| `P0007` | Foreign Direct Investment made by overseas Investors in India in debt instruments |
| `P0008` | Foreign Direct Investment made by overseas Investors in India in real estate |
| `P0602` | Freight insurance - relating to import & export of goods |
| `P0603` | Other general insurance premium including reinsurance premium; and term life insurance premium |
| `P0607` | Insurance claim Settlement of non-life insurance; and life insurance (only term insurance) |
| `P0609` | Standardised guarantee services |
| `P1601` | Receipts on account of maintenance and repair services rendered for Vessels, Ships, Boats, Warships, etc. |
| `P1602` | Receipts of maintenance and repair services rendered for aircrafts, Space shuttles, Rockets, military aircrafts, etc. |
| `P1701` | Receipts on account of processing of goods |
| `P1201` | Maintenance of foreign embassies in India |
| `P1501` | Refunds / rebates on account of imports |
| `P1502` | Reversal of wrong entries, refunds of amount remitted for non imports |
| `P1101` | Audio-visual and related services like motion picture and video tape production, distribution and projection services |
| `P1103` | Radio and television production, distribution and transmission services |
| `P1104` | Entertainment services |
| `P1105` | Museums, library and archival services |
| `P1106` | Recreation and sporting activity services |
| `P1107` | Educational services (e.g. fees received for correspondence courses offered to non-resident by Indian institutions) |
| `P1108` | Health Service (receipts on account of services provided by Indian hospitals, doctors, nurses, paramedical and similar services etc. rendered remotely or on-site) |
| `P1109` | Other Personal, Cultural & Recreational services |
| `P1306` | Receipts / Refund of taxes |
| `P1401` | Compensation of employees |
| `P1403` | Inward remittance towards interest on loans extended to non residents (ST/MT/LT loans) |
| `P1409` | Inward remittance of dividends (on equity and investment fund shares) by Indian FDI Enterprises, other than branches, operating abroad |
| `P1410` | Inward remittance on account of interest payment by Indian FDI enterprises operating abroad to their Parent company in India |
| `P1411` | Inward remittance of interest income on account of Portfolio Investment made abroad by India |
| `P1412` | Inward remittance of dividends on account of Portfolio Investment made abroad by India on equity and investment fund shares |
| `P1499` | Other income receipts |
| `P0801` | Hardware consultancy/implementation |
| `P0802` | Software consultancy/implementation (other than those covered in SOFTEX form) |
| `P0803` | Data base, data processing charges |
| `P0804` | Repair and maintenance of computer and software |
| `P0805` | News agency services |
| `P0806` | Other information services - subscription to newspapers, periodicals, etc. |
| `P0807` | Off-site Software Exports |
| `P0808` | Telecommunication services including electronic mail services and voice mail services |
| `P0809` | Satellite services including space shuttle and rockets, etc. |
| `P0202` | Receipts on account of operating expenses of Foreign shipping companies operating in India |
| `P0208` | Receipt on account of operating expenses of Foreign Airlines companies operating in India |
| `P0214` | Receipts on account of other transportation services (stevedoring, demurrage, port handling charges etc.) (shipping companies) |
| `P0215` | Receipts on account of other transportation services (stevedoring, demurrage, port handling charges etc.) (airlines companies) |
| `P0216` | Receipts of freight fare - shipping companies operating abroad |
| `P0217` | Receipts of passenger fare by Indian shipping companies operating abroad |
| `P0218` | Other receipts by shipping companies |
| `P0219` | Receipts of freight fare by Indian airlines companies operating abroad |
| `P0220` | Receipts of passenger fare - airlines |
| `P0221` | Other receipts by airlines companies |
| `P0224` | Postal & courier services by air |
| `P0225` | Postal & courier services by sea |
| `P0226` | Postal & courier services by others |
| `P0302` | Business travel |
| `P0306` | Other travel receipts |
# Kuwait (KW) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/kw)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Kuwait or payment in KWD.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Kuwait or payment in KWD. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `BKIP` | Bank Loan Accrued Interest Payment |
| `BKPP` | Bank Loan Principal Paydown |
| `BKFE` | Bank Loan Fees |
| `SLON` | Social Loan |
| `ACCT` | Account Management |
| `DEPT` | Deposit |
| `CASH` | Cash Management Transfer |
| `PERS` | Person to Person Payment |
| `COLL` | Collection Payment |
| `INTC` | Intra Company Payment |
| `INTP` | Intra Party Payment |
| `MGSC` | Futures Initial Margin Client Owned Segregated Cash Collateral |
| `EXTD` | Exchange Traded Derivatives |
| `FIXI` | Fixed Income |
| `SBSC` | Securities Buy Sell Sell BuyBack |
| `ISUK` | Sukuk Issuance |
| `RSUK` | Sukuk Redemption |
| `ITBL` | Treasury Bills Issuance |
| `RTBL` | Treasury Bills Redemption |
| `SCVE` | Purchase Sale Of Services |
| `BEXP` | Business Expenses |
| `COMC` | Commercial Payment |
| `GDDS` | Purchase Sale Of Goods |
| `GDSV` | Purchase Sale Of Goods And Services |
| `SERV` | Service Charges |
| `SUBS` | Subscription |
| `SUPP` | Supplier Payment |
| `TRAD` | Commercial Transaction |
| `MP2B` | Mobile P2B Payment |
| `ROYA` | Royalties |
| `CHAR` | Charity Payment |
| `COMT` | Consumer Third Party Consolidated Payment |
| `DELG` | Government Delegation Transfers |
| `KEMB` | Kuwaiti Embassies Transfers |
| `IEMB` | International Embassies Transfers |
| `HLRP` | Housing Loan Repayment |
| `HLST` | Home Loan Settlement |
| `INPC` | Insurance Premium Car |
| `INTE` | Interest |
| `LIFI` | Life Insurance |
| `PPTI` | Property Insurance |
| `INPR` | Insurance Premium Refund |
| `INSC` | Payment Of Insurance Claim |
| `INSU` | Insurance Premium |
| `LOAN` | Loan |
| `LOAR` | Loan Repayment |
| `RINP` | Recurring Installment Payment |
| `PENO` | Payment Based On Enforcement Order |
| `RELG` | Rental Lease General |
| `TRFD` | Trust Fund |
| `FORW` | Forward Foreign Exchange |
| `ADVA` | Advance Payment |
| `BCDM` | Bearer Cheque Domestic |
| `BCFG` | Bearer Cheque Foreign |
| `CCRD` | Credit Card Payment |
| `DCRD` | Debit Card Payment |
| `EDUC` | Education |
| `CFEE` | Cancellation Fee |
| `CORT` | Trade Settlement Payment |
| `REBT` | Rebate |
| `FEES` | Payment Of Fees |
| `GIFT` | Gift |
| `IHRP` | Instalment Hire Purchase Agreement |
| `INSM` | Installment |
| `IVPT` | Invoice Payment |
| `REFU` | Refund |
| `FAML` | Family Support |
| `MSVC` | Multiple Service Types |
| `LEGE` | Legal Expense |
| `LEGC` | Legal case |
| `GOVT` | Government Payment |
| `BRKF` | Brokerage Fee |
| `BDKD` | Bulk Deposit by Participant Bank |
| `BWKD` | Bulk Withdrawal by Participant Bank |
| `FCYB` | Forex currency Buy by Participant Bank |
| `FCYS` | Forex currency Sell by Participant Bank |
| `CDCD` | Normal Deposit by Participant Bank |
| `CWCD` | Normal Withdrawal by Participant Bank |
| `CHTR` | Onus Inter account Transfer |
| `DEDU` | Deductions |
| `FORM` | Form |
| `STMP` | Stamp |
| `DISC` | Discounts |
| `FISU` | Financial support |
| `INST` | Installment |
| `CONT` | Contract |
| `DUES` | Dues |
| `TEND` | Tender |
| `TECO` | Terminate contract |
| `BOAL` | Book allowance |
| `CCST` | Cash custody |
| `IBAL` | Increase balance |
| `INMM` | Money Market |
| `INTQ` | MM Islamic |
| `ICBD` | CBK Bonds Issuance |
| `RCBD` | CBK Bonds Redumption |
| `ECTQ` | Related Tawarruq CBK Bonds excution |
| `SCTQ` | Related Tawarruq CBK Bonds settlement |
| `ANNI` | Annuity |
| `CMDT` | Commodity Transfer |
| `DERI` | Derivatives |
| `PRME` | Precious Metal |
| `DIVD` | Dividend |
| `FREX` | Foreign Exchange |
| `INVS` | Investment And Securities |
| `SECU` | Securities |
| `TREA` | Treasury Payment |
| `SAVG` | Savings |
| `IRES` | Investment in Real Estate |
| `MDCS` | Medical Services |
| `HLTI` | Health Insurance |
| `ITBD` | Treasury Bonds Issuance |
| `RTBD` | Treasury Bonds Redemption |
| `EPDT` | Public Debt Tawarruq excution |
| `SPDT` | Public Debt Tawarruq settlement |
| `ALLW` | Allowance |
| `BONU` | Bonus Payment |
| `COMM` | Commission |
| `PENS` | Pension Payment |
| `SSBE` | Social Security Benefit |
| `SALA` | Salary Payment |
| `SPSP` | Salary Pension Sum Payment |
| `BENE` | Unemployment Disability Benefit |
| `EOFS` | End Of Service Payment |
| `OTPT` | Overtime Payment |
| `LEPT` | Leave encashment |
| `SADJ` | Salary Adjustment |
| `TRCO` | Training course |
| `EXWO` | Excellent work |
| `TICK` | Travel tickets |
| `RSIG` | Resignation |
| `OFMI` | Official mission |
| `TEAM` | Work teams |
| `TFLG` | Trade finance - Letter of guarantee |
| `TFLC` | Trade finance - Letter of credit |
| `TAXS` | Tax Payment |
| `INTX` | Income Tax |
| `AIRB` | Air |
| `UBIL` | Utilities |
| `PHON` | Telephone Bill |
# Bahrain (BH) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/bh)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Bahrain or payment in BHD.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Bahrain or payment in BHD. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `GDE` | Goods sold (exports in fob value) |
| `GDI` | Goods bought (imports in cif value) |
| `STS` | Sea transport |
| `ATS` | Air transport |
| `OTS` | Other methods of transport (including postal and courier services) |
| `STR` | Travel |
| `GMS` | Processing repair and maintenance services on goods |
| `SCO` | Construction |
| `INS` | Insurance services |
| `FIS` | Financial services |
| `IPC` | Charges for the use of intellectual property royalties |
| `TCS` | Telecommunications services |
| `ITS` | Computer services |
| `IFS` | Information services |
| `RDS` | Research and development services |
| `PMS` | Professional and management services |
| `TTS` | Technical, trade-related and other business services |
| `PRS` | Personal, cultural, audiovisual and recreational services |
| `IGD` | Dividends intragroup |
| `IID` | Interest on debt intragroup |
| `PIP` | Profits on Islamic products |
| `PRR` | Profits on rents or real estate |
| `DOE` | Dividends on equity not intragroup |
| `ISH` | Income on investment funds shares |
| `ISL` | Interest on securities more than a year |
| `ISS` | Interest on securities less than a year |
| `IOL` | Income on loans |
| `IOD` | Income on deposits |
| `GOS` | Government goods and services, embassies, etc. |
| `GRI` | Government-related income taxes, tariffs, capital transfers, etc. |
| `CHC` | Charitable contributions (charity and aid) |
| `FAM` | Family support (workers' remittances) |
| `SAL` | Salary (compensation of employees) |
| `PPA` | Purchase of real estate abroad from residents |
| `PPL` | Purchase of real estate in Bahrain from nonresidents |
| `CEA` | Equity and investment fund shares for the establishment of new company from residents abroad, equity of merger or acquisition of companies abroad from residents, and participation to capital increase of related companies abroad |
| `DSF` | Debt instruments intragroup foreign securities |
| `REL` | Reverse equity share in Bahrain |
| `RDL` | Reverse debt instruments in Bahrain |
| `FSA` | Equity other than investment fund shares in non-related companies abroad |
| `FIA` | Investment fund shares foreign |
| `DSA` | Purchases and sales of foreign debt securities in non-related companies - less than a year / more than a year |
| `DLA` | Purchases and sales of foreign debt |
| `FDA` | Financial derivatives foreign |
| `DLF` | Debt instruments, intragroup loans, deposits foreign (above 10% share) |
| `AFA` | Receipts or payments from personal residents bank accounts or deposits abroad |
| `SLA` | Loans - Drawings or repayments on loans extended to nonresidents - short-term |
| `LLA` | Loans - Drawings or repayments on loans extended to nonresidents - long-term |
| `LEA` | Leasing abroad |
| `RFS` | Repos on foreign securities |
| `TCR` | Trade credits and advances receivable |
| `CEL` | Equity and investment fund shares for the establishment of new company in Bahrain from nonresidents, equity of merger or acquisition of companies in Bahrain from non-residents and participation to capital increase of related companies from non-residents in Bahrain |
| `LDS` | Debt instruments intragroup securities in Bahrain |
| `REA` | Reverse equity share abroad |
| `RDA` | Reverse debt instruments abroad |
| `FSL` | Equity other than investment fund shares in not-related companies in Bahrain |
| `FIL` | Investment fund shares in Bahrain |
| `DSL` | Purchases and sales of securities issued by residents in non-related companies - less than a year |
| `DLL` | Purchases and sales of securities issued by residents in non-related companies - more than a year |
| `FDL` | Financial derivatives in Bahrain |
| `LDL` | Debt instruments, intragroup loans, deposits in Bahrain (above 10% share) |
| `AFL` | Receipts or payments from personal nonresidents bank account in Bahrain |
| `SLL` | Loans - Drawings or repayments on foreign loans extended to residents - short-term |
| `LLL` | Loans - Drawings or repayments on foreign loans extended to residents - long-term |
| `LEL` | Leasing in Bahrain |
| `RSL` | Repos on securities issued by residents |
| `TCP` | Trade credits and advances payable |
# Qatar (QA) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/qa)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Qatar or payment in QAR.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Qatar or payment in QAR. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `A1A01` | Value of export bills negotiated/purchased/discounted, etc. |
| `A1A02` | Realization of export bills (in respect of goods) sent on collection (full invoice value) |
| `A1A03` | Advance receipts against export contracts (export of goods only) |
| `A2A01` | Inward remittance on account of surplus freight/passenger fare by Qatari shipping companies operating abroad |
| `A2A02` | Operating expenses of foreign shipping companies operating in Qatar |
| `A2A04` | Freight on exports - shipping companies |
| `A2A05` | Receipt toward operational leasing (with crew) shipping companies |
| `A2A07` | Inward remittance of surplus freight/passenger fare by Qatari airlines companies operating abroad |
| `A2A08` | Receipts on account of operating expenses of foreign airlines companies operating in Qatar |
| `A2A10` | Freight on exports - airlines companies |
| `A2A11` | Receipts toward operational leasing (with crew) airlines companies |
| `A2A13` | Receipts toward other transportation services (stevedoring, demurrage, port handling charges, etc.) |
| `A2B01` | Inward remittance toward business travel, includes purchases of foreign occurrences notes, etc. over the counter by hotels, hospitals, emporium |
| `A2B08` | FC surrendered by the returning Qatari resident tourists |
| `A2C01` | Receipts on account of life insurance premium |
| `A2C02` | Receipts on account of freight insurance relating to import & export goods |
| `A2C03` | Receipts of other general insurance premium |
| `A2C04` | Receipts on account of reinsurance premium |
| `A2C05` | Receipts on account of auxiliary services (commission on insurance) |
| `A2C06` | Receipts on account of settlement of claims |
| `A2D01` | Inward remittance toward meeting the cost of construction of projects in Qatar |
| `A2E01` | Receipts on account of hardware consultancy |
| `A2E02` | Receipts on account of software implementation |
| `A2E03` | Receipts on account of database data processing charges |
| `A2E04` | Receipts on account of repair and maintenance of computer and software |
| `A2E05` | Receipts on account of provision of news agency services |
| `A2E06` | Receipts on account of other information services - subscription to newspapers, periodicals, etc. |
| `A2F01` | Receipts on account of financial intermediation except investment banking - bank charges, collection charges, LC charges, cancellation of forward |
| `A2F02` | Receipts on account of investment banking services - brokerage, under writing commission, etc. |
| `A2F03` | Receipts on account of auxiliary financial services - charges on operation & regulatory fees, custodial services, depository services, etc. |
| `A2G01` | Inward remittance received for maintenance of foreign embassies in Qatar |
| `A2G03` | Inward remittance for maintenance of offices of international institutions (such as IMF, IBRD (World Bank), UNICEF, UNESCO, WHO, etc.) in Qatar |
| `A2G07` | Incoming remittances on account of government services |
| `A2H01` | Receipts for audio-visual and related services and associated fees related to production of motion pictures, rentals, fees received |
| `A2H02` | Receipts toward personal cultural services such as those related to museums, libraries, archives and sporting activities, also includes fees |
| `A2J01` | Merchanting services - net receipt (from sale & purchase of goods without crossing the border) |
| `A2J02` | Trade related services - commission on exports/imports |
| `A2J03` | Receipts toward dry operational leasing services (other than financial leasing and without operating crew) including charter hire |
| `A2J04` | Receipts toward legal services |
| `A2J05` | Receipts for providing accounting, auditing, book keeping and tax consulting services |
| `A2J06` | Receipts for provision of business and management consultancy and public relations services |
| `A2J07` | Receipts for advertising, trade fair, market research and public opinion polling service |
| `A2J08` | Receipts toward research & development services |
| `A2J09` | Receipts for providing architectural, engineering and other technical services |
| `A2J10` | Receipts for agricultural, mining and onsite processing services, protection against insects & disease, increasing of harvest yields, forestry |
| `A2J11` | Inward remittance for maintenance of offices in Qatar |
| `A2J12` | Inward remittance toward distribution services |
| `A2J13` | Inward remittance toward environmental services |
| `A2J19` | Receipts for other services not included elsewhere |
| `A2K01` | Receipts on account of settlement of claims for postal services |
| `A2K02` | Receipts on account of settlement of claims for courier services |
| `A2K03` | Receipts on account of settlement of claims for telecommunication services |
| `A2R01` | Receipts on account of franchises services - use of patents, copyright trademarks, industrial processes, franchises, etc. |
| `A2R02` | Receipts for use through licensing arrangements of produced originals or prototypes (such as manuscripts and films) |
| `A3A03` | Inwards remittance toward interest on loans extended to nonresidents (short-, medium-, long-term loans) |
| `A3A04` | Inwards remittance of interest on debt securities debentures/bonds/frns, etc. |
| `A3A05` | Inwards remittance toward interest receipts of ads on their own account (on investments) |
| `A3A06` | Remittance toward repatriation of profits to Qatar |
| `A3A07` | Remittance toward receipt of dividends by Qatari residents |
| `A4A01` | Inward remittance from the Qatari nonresidents toward family maintenance and savings |
| `A4B02` | Inward remittance toward personal gifts and donations |
| `A4B03` | Donations to religious & charitable institutions in Qatar |
| `A4B04` | Inward remittance toward grants and donations to government and charitable institution established by the governments |
| `A4B06` | Receipts toward receipts/refund of taxes |
| `A4B07` | Compensation of employees (short term) |
| `A5A17` | Purchases toward sale of intangible assets (patents, copyrights, trademarks, etc.) by Qatari companies |
| `A6A03` | Repatriation of Qatari investment abroad in branches |
| `A6A04` | Repatriation of Qatari investment abroad in subsidiaries & associates |
| `A6A05` | Repatriation of Qatari investment abroad in real estate |
| `A6A06` | Foreign direct investment in Qatar in equity |
| `A6A07` | Foreign direct investment in Qatar in debt securities including debt funds |
| `A6A08` | Foreign direct investment in Qatar in real estate |
| `A6B01` | Repatriation of Qatari investment abroad in equity capital (shares) |
| `A6B02` | Repatriation of Qatari investment abroad in debt securities |
| `A6B09` | Foreign portfolio investment in Qatar in equity shares |
| `A6B10` | Foreign portfolio investment in Qatar in debt securities including debt funds |
| `A6C11` | Repayment of loans extended to nonresidents |
| `A6C12` | Loans from nonresidents to Qatar |
| `A6C13` | Short-term loans with original maturity up to 1 year from nonresidents to Qatar |
| `A6C14` | Receipts on account of nonresidents deposits |
| `A6C15` | Receipts from bank own account abroad |
| `A6C18` | Other capital receipts (not included elsewhere) |
| `A7A01` | Refund/rebates on account of imports |
| `A7B02` | Reversal of wrong entries, refunds of amount remitted for non-imports |
| `A7C03` | Receipts by residents from residents |
# Thailand (TH) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/th)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Thailand or payment in THB.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Thailand or payment in THB. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `318012` | For payments of travel expenses |
| `318013` | For payments of education-related student expenses |
| `318015` | Healthcare-related expenses, such as medical fees |
| `318017` | Expense from the use of debit/credit card |
| `318030` | Other fee and commissions |
| `318040` | Repatriation of foreign income |
| `318052` | Gifts / Grant of private sector |
| `318231` | Payments for exported and imported goods |
# Jordan (JO) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/jo)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Jordan or payment in JOD.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Jordan or payment in JOD. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `101` | Invoice Payment and Purchase |
| `102` | Utility Bill Payment |
| `103` | Prepaid Cards Recharging |
| `104` | Standing Orders |
| `105` | Personal Donations |
| `106` | Family Assistance and Expenses |
| `107` | Individual Social Security Subscription |
| `108` | Associations Subscriptions |
| `109` | Saving and Funding Account |
| `110` | Heritance |
| `111` | End of Service Indemnity |
| `201` | Public Sector Employees Salaries |
| `202` | Laborers Salaries |
| `203` | Private Sector Staff Salaries |
| `204` | Jordanian Diplomatic Staff Salaries |
| `205` | Foreign Diplomatic Salaries |
| `206` | Overseas Incoming Salaries |
| `207` | Civil/Military Retirement Salaries |
| `208` | Social Security Retirement Salaries |
| `209` | Establishment Social Security Subscription |
| `701` | Religious Communities Aid |
| `702` | International Communities Aid |
| `703` | Arab Communities Aid |
| `704` | UN Aid |
| `705` | Charity Communities Aid |
| `801` | Telecommunication Services |
| `802` | Financial Services |
| `803` | Information Technology Services |
| `804` | Consulting Services |
| `805` | Construction Services |
| `806` | Maintenance and Assembling Services |
| `807` | Marketing and Media Services |
| `808` | Mining Services |
| `809` | Medical and Health Services |
| `810` | Cultural, Educational and Entertainment Services |
| `811` | Rental Expenses |
| `812` | Real Estate |
| `813` | Taxes |
| `814` | Fees |
| `815` | Commissions |
| `816` | Franchise and License Fees |
| `817` | Cheque Collection |
| `818` | Membership Fees |
| `901` | Municipality Funds |
| `902` | Government Funds |
| `903` | Private Sector Funds |
| `904` | External Incoming Funds |
| `1001` | International Communities and Embassies Remittances |
| `1002` | Permanent Diplomatic Missions |
| `1003` | Temporary Diplomatic Missions |
| `1004` | Jordanian Embassies Income |
| `1101` | Long-Term Loans Installments/Public Sector |
| `1102` | Long-Term Loans Interest Installments/Public Sector |
| `1103` | Short-Term Loans Installments/Public Sector |
| `1104` | Short-Term Loans Interest Installments/Public Sector |
| `1105` | Long-Term Loans Installments/Private Sector |
| `1106` | Long-Term Loans Interest Installments/Private Sector |
| `1107` | Short-Term Loans Installments/Private Sector |
| `1108` | Short-Term Loans Interest Installments/Private Sector |
| `1109` | Loans Installments Against Governmental Guarantee |
| `1110` | Loans Interest Installments Against Governmental Guarantee |
| `1111` | Credit Card Payment |
| `1112` | Personal Loan Payment |
| `1201` | Rerouting |
| `1202` | Scientific Research Support |
# Philippines (PH) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/ph)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in the Philippines or payment in PHP.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in the Philippines or payment in PHP. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `1` | Allotment |
| `2` | Business |
| `3` | Personal |
| `4` | Bills / Tax Payment |
| `5` | Gift / Donation |
| `6` | Others |
| `19` | Amortization / Loan Payment |
| `20` | Business – set up |
| `21` | Education |
| `22` | Home Improvement |
| `23` | Insurance |
| `24` | Investment |
| `25` | Medical Expense |
| `26` | Payment of Goods |
| `27` | Real Estate Purchase |
| `28` | Savings |
| `29` | Taxes |
| `30` | Vehicle |
| `31` | Allowance |
| `32` | Financial Support |
| `33` | Mortgage Payment |
| `34` | School Allowance |
| `35` | Vacation Money |
# Kenya (KE) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/ke)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Kenya or payment in KES.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Kenya or payment in KES. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `512` | National Industrial Training Authority |
| `1001` | Import Duty - Oil |
| `1002` | Import Duty |
| `1101` | Excise Duty - Oils |
| `1102` | Excise Duty |
| `1201` | VAT Oils |
| `1202` | VAT Imports |
| `1206` | VAT Oils - 8% |
| `1501` | Alteration Fee |
| `1518` | Concession Fees |
| `1519` | Registration fees |
| `1527` | Transhipment Fee |
| `1801` | IDF Fees (2.0%) |
| `1802` | IDF/PIF Oil |
| `1908` | Customs Warehouse Rent |
| `2101` | Road Maintenance Levy (RML) |
| `2301` | Petroleum Regulatory Levy (PRL) |
| `2501` | Gross Payment - Petroleum Development Fund (PDF) |
| `2901` | Income Tax - PAYE |
| `3001` | Income Tax - Company |
| `3100` | Income Tax - Resident Individual |
| `3101` | Monthly Rental Income Tax |
| `3103` | Witholding Rental Income |
| `3200` | Income Tax - Withholding |
| `3304` | Motor Vehicle Advance Tax |
| `3509` | VAT - Withholding |
| `3514` | Value Added Tax (VAT) |
| `3801` | Standards Levy |
| `4103` | Stamp Duty |
| `4301` | State Department for Fisheries, Aquaculture and the Blue Economy |
| `4601` | Import Health Certificate |
| `4702` | Nuts and Oils Import Declaration Form |
| `6001` | Kenya Railway Development Levy (RDL) |
| `6002` | Kenya Railway Development Levy (RDL) - Oils |
| `6101` | Sale of single Number Plate |
| `6102` | Sale of pair of Number Plates |
| `6301` | Transfer Fees for Motor Vehicle Registration |
| `6401` | Merchant Shipping Superitendent Levy |
| `6402` | Merchant Shipping Superintendent (MSS) Levy - Oils |
| `6501` | Road Safety fund |
| `6601` | SHMV purchase tax |
| `ADTX` | Advance Tax |
| `AIRB` | Air transport |
| `ARTX` | Agency Revenue |
| `BECH` | Child Benefit |
| `BSD` | Banking Supervision Department |
| `BTTX` | Betting Tax |
| `CCMC` | Cash Collateral Margin Calls |
| `BUSB` | Bus |
| `CERE` | Ceremonies |
| `CFR` | Cost And Freight |
| `CGTX` | Capital Gains Tax (CGT) |
| `CHC` | Charitable Contributions (Charity and Aid) |
| `CLOT` | Clothing |
| `COMU` | Community Development |
| `CONS` | Construction Activities |
| `CORT` | Trade Settlement Payment |
| `COTX` | Corporate Tax Identification |
| `CSDK` | Central Security Depository Payments |
| `DIVD` | Dividend Payments |
| `EDTX` | Excise Duty |
| `EDUC` | Education expenses |
| `FARM` | Farming |
| `FOEX` | Foreign Exchange |
| `FUEL` | Fuel expenses |
| `GOKX` | Government related Payments and Transfers |
| `GOVT` | Government Payment |
| `HLFD` | Purchase of food and household goods |
| `HLTI` | Health Insurance |
| `HOLI` | Holiday |
| `IBLD` | Interbank loan/deposit Repayments |
| `INPC` | Insurance Premium Car |
| `INSU` | Insurance Premium |
| `INTE` | Interest |
| `INTX` | Income Tax |
| `INVS` | Investment And Securities |
| `ISTX` | Installment Tax |
| `LICF` | License Fee |
| `LIFI` | Life Insurance |
| `LOAN` | Loan |
| `MACH` | Machinery related |
| `MAFC` | Medical Aid Fund Contribution |
| `MDCS` | Medical Services |
| `MERC` | Manufactured goods and merchandise |
| `PAYE` | Pay As You Earn |
| `PENA` | Penalties |
| `PL39` | Licence Fees For Commercial Banks |
| `PL40` | Licence Fees Deposit Micro Institutions |
| `PL41` | Licence Fees Forex Bureaus |
| `PL42` | Licence Fees Credit Reference Bureaus |
| `PL43` | Licence Fees Mortgage Financial Institutions |
| `PL44` | Applications Fees For Commercial Banks |
| `PL45` | Application Fees For Mortgage Financial Institutions |
| `PL46` | Applications Fees Deposit Taking Institutions |
| `PL47` | Application Fees Forex Bureaus |
| `PL48` | Application Fees Credit Reference Bureaus |
| `PL49` | Penalties Commercial Banks |
| `PL50` | Penalties Mortgage Financial Institutions |
| `PL51` | Penalties Deposit Taking Micro Institutions |
| `PL52` | Penalties Forex Bureaus |
| `PL53` | Penalties Credit Reference Bureaus |
| `PPTI` | Property Insurance |
| `PRPY` | Purchase of property |
| `PSCO` | Professional service/commission earned |
| `REFU` | Refund |
| `RELG` | Religious activities |
| `RENT` | Rent |
| `RITX` | Rental Income Tax |
| `RLWY` | Railway |
| `SALA` | Salary Payment |
| `SAVG` | Savings |
| `SCHO` | School Fees |
| `SDTX` | Stamp Duty |
| `SHIP` | Shipping |
| `SWLF` | Sweeps/Liquidity funding |
| `TAXR` | Tax Refund |
| `TAXS` | Tax Payment |
| `TBIL` | Telecommunications Bill |
| `TITH` | Tithes and Offerings |
| `TOTX` | Turnover Tax |
| `TRAC` | Removed From Tracking |
| `UBIL` | Utilities |
| `VATX` | Value Added Tax Payment |
| `VIPN` | Vehicle Identification Plate Number |
| `WHLD` | With Holding |
# Kyrgyzstan (KG) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/kg)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Kyrgyzstan or payment in KGS.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Kyrgyzstan or payment in KGS. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `11111100` | Income tax, paid by tax agent |
| `11111200` | Income tax as per unified tax declaration |
| `11112100` | Income Tax of KR non-residents |
| `11113100` | Tax for benefit |
| `11113200` | Tax for interest |
| `11113300` | Tax on income of mining companies |
| `11121100` | Unified tax for individual entrepreneur |
| `11122100` | Tax based on obligatory patent |
| `11122200` | Tax based of free patent |
| `11131100` | Gross income tax |
| `11311100` | Tax for immovable property non used for entrepreneur's activities |
| `11311200` | Tax for immovable property used for entrepreneur's activities, second group |
| `11311300` | Tax for immovable property used for entrepreneur's activities, 3rd group |
| `11312110` | Tax for transport of legal entities |
| `11312120` | Tax for transport of physical entities |
| `11321100` | Land tax for usage of homestead land and lawn-and-garden land |
| `11321200` | Land tax for usage of agricultural grounds |
| `11321300` | Land tax for usage of built-up area lands and non-agricultural grounds |
| `11411100` | VAT for goods and services, produced on the territory of the KR |
| `11411200` | VAT for goods, imported to the territory of KR |
| `11412100` | Sales tax |
| `11413100` | Tax for using with motor roads |
| `11414100` | Assessments for control and liquidation of emergency situations |
| `11611000` | Other taxes and fees |
| `12110100` | Insurance premium of workers |
| `12110200` | Insurance premiums of workers on principal debt to the State Accumulative Pension Fund |
| `12110300` | Insurance premiums, workers' deferred debt to the State Accumulative Pension Fund |
| `12110400` | Insurance premiums of workers on successive debt to the State Accumulative Pension Fund |
| `12120100` | Insurance premium of employers |
| `12120200` | Insurance premiums of employers and workers on the principal debt (except the State pension fund) |
| `12120300` | Insurance premiums of employers and employees on a deferred debt (except the State pension fund) |
| `12120400` | Insurance premiums of employers and workers on successive debt (except the State pension fund) |
| `12130100` | Insurance premiums of persons engaged with individual labor activity |
| `12140100` | Insurance premiums not distributed on categories |
| `12150100` | Insurance premiums from agricultural producer |
| `12210100` | Dues/assessments of employees |
| `12220100` | Dues/assessments of employers |
| `12230100` | Other dues/assessments |
| `12310100` | Other incomes of Social fund |
| `12310200` | Payment of capitalized amounts |
| `12310300` | Payments on regressive claims |
| `12310400` | Interest for deferment |
| `12320100` | Percents by Social Fund Income |
| `14321100` | Penalties on the main debt |
| `14321200` | Penalties on the delayed debt |
| `14321300` | Penalties on successive debt |
| `11421110` | Ethyl drinking alcohol and refined ethyl alcohol |
| `11421120` | Vodka and liqueur products |
| `11421130` | Fortified drinks, juices and balsams |
| `11421140` | Wines |
| `11421150` | Cognacs |
| `11421160` | Champagnes |
| `11421170` | Beer pre-packed |
| `11421180` | Beer not pre-packed |
| `11421190` | Wine materials |
| `11421210` | Tobacco with filter |
| `11421220` | Tobacco without filter |
| `11421230` | Sigars |
| `11421290` | Other products containing tobacco, excepting fermented tobacco |
| `11421310` | Petrol, light and medium distillates and other petrol |
| `11421320` | Reactive fuel |
| `11421330` | Diesel oil |
| `11421340` | Mazut |
| `11421350` | Oils and gas condensate |
| `11421360` | Crude oil and crude oil products, obtained from bituminous materials |
| `11421410` | Jewel made from gold, platinum and silver |
| `11421420` | Other |
| `11422110` | Ethyl drinking alcohol and refined ethyl alcohol |
| `11422120` | Vodka and liqueur products |
| `11422130` | Fortified drinks, juices and balsams |
| `11422140` | Wines |
| `11422150` | Cognacs |
| `11422160` | Champagnes |
| `11422170` | Beer pre-packed |
| `11422180` | Beer not pre-packed |
| `11422190` | Wine materials |
| `11422210` | Tobacco with filter |
| `11422220` | Tobacco without filter |
| `11422230` | Sigars |
| `11422290` | Other products containing tobacco, excepting fermented tobacco |
| `11422310` | Petrol, light and medium distillates and other petrol |
| `11422320` | Reactive fuel |
| `11422330` | Diesel oil |
| `11422340` | Mazut |
| `11422350` | Oils and gas condensate |
| `11422360` | Crude oil and crude oil products, obtained from bituminous materials |
| `11422410` | Other under excise goods |
| `11441110` | Crude oil |
| `11441120` | Gases inflammable |
| `11441130` | Coals |
| `11441190` | Other inflammable minerals |
| `11441210` | Noble metals |
| `11441220` | Mercury |
| `11441230` | Antimony |
| `11441240` | Tin, tungsten |
| `11441290` | Other metals, not classified above |
| `11441310` | Facing stones |
| `11441320` | Construction sand |
| `11441330` | Gypsum |
| `11441340` | Limestone, construction stone |
| `11441350` | Semi-precious stone |
| `11441390` | Other non-metal, not classified above |
| `11441510` | Mineral and fresh water for pouring as drinking water |
| `11441520` | Mineral water for treatment |
| `11441530` | Thermal water for heating |
| `11441540` | Drinking water and technical water |
| `11442110` | Crude oil |
| `11442120` | Gases inflammable |
| `11442130` | Coals |
| `11442190` | Other inflammable minerals |
| `11442210` | Noble metals |
| `11442220` | Mercury |
| `11442230` | Antimony |
| `11442240` | Tin, tungsten |
| `11442290` | Other metals, not classified above |
| `11442310` | Facing stones |
| `11442320` | Construction sand |
| `11442330` | Gypsum |
| `11442340` | Limestone, construction stone |
| `11442350` | Semi-precious stone |
| `11442390` | Other non-metal, not classified above |
| `11442410` | Mineral and fresh water for pouring as drinking water |
| `11442420` | Mineral water for treatment |
| `11442430` | Thermal water for heating |
| `11442440` | Drinking water and technical water |
| `11442490` | Other groundwater |
| `11511100` | Customs import duty |
| `11511200` | Import season customs duty |
| `11511300` | Special duty |
| `11511400` | Antidumping duty |
| `11511500` | Compensation duty |
| `11511600` | Customs payment on single rate of customs duties, taxes |
| `11511700` | Aggregate customs payment |
| `11512100` | Export customs duty |
| `11512200` | Export season customs duty |
| `11513100` | Fees from foreign vehicle-carriers |
| `11513200` | Fees for customs registration |
| `11514100` | Other customs fees and payments |
| `13111100` | Current transfers |
| `13111200` | Capital transfers |
| `13121100` | Current transfers |
| `13121200` | Capital transfers |
| `13311100` | Categorical grants |
| `13311200` | Leveling grants |
| `13311300` | Stimulant grants |
| `13321100` | Funds transferred by mutual settlements on salary increases |
| `13321200` | Other funds transferred by mutual settlements from the national budget |
| `13321300` | Other funds transferred by mutual settlements from the national budget |
| `13321400` | Funds transferred by mutual settlements from the local budget |
| `13321500` | Funds transferred between levels of local budgets |
| `14111100` | Interests on deposits of government, with National Bank of the KR |
| `14112100` | Interests on issued budget loans and grants |
| `14121100` | Dividends, calculated to state security set |
| `14122100` | Assessments from profit of NBKR |
| `14222000` | State enterprises income |
| `14151100` | Payment for development of mineral deposit or fossil fuel |
| `14151200` | The fee for holding the license for subsoil use |
| `14152100` | Rent for land in the settlements |
| `14152200` | Rent for pasture |
| `14152300` | Rent for village pastures |
| `14152400` | Rent for pasture areas of intensive use |
| `14152500` | Rent for summer pastures |
| `14152600` | Rent for land, Land Redistribution Fund |
| `14152700` | Charges for the use of forest resources |
| `14152800` | Fee for water use |
| `14152900` | Other payments for using of natural assets |
| `14153100` | Rental payment for constructions and buildings |
| `14153200` | Rental payment for constructions and buildings |
| `14153900` | Payment for other property |
| `14221100` | Payment for issuance of licenses |
| `14221200` | Payment for issuance of certificates and other permitting documents |
| `14221300` | Payment for right of lottery activity realizing |
| `14221400` | Payment for registration and re-registration of means of transport |
| `14221500` | Fee for alternative service and the mobilization of military reserves |
| `14221900` | Other payments and fees |
| `14231100` | The fee for the provision of advisory and diagnostic assistance on an outpatient basis |
| `14231200` | Payment for therapeutic measures on an outpatient basis |
| `14231300` | The fee for the provision of medical care in statsionarnozameschayuschih offices |
| `14231400` | The fee for the provision of medical care in specialized hospitals |
| `14231500` | Co-payment for the provision of health services |
| `14231600` | The fee for the provision of dental care |
| `14231700` | Fees for pest and rodent control measures |
| `14231800` | The fee for the provision of high-tech medical care (in excess of the quota) |
| `14231900` | Payment for medical services not classified |
| `14232100` | The fee for the provision of education in schools (college, vocational school, BMS) |
| `14232200` | Payment for testing of final-year students of general not specialized schools – pretenders for receiving of special documents |
| `14232300` | Earnings from educational activity of students, payment for dwelling in dormitories and hotels |
| `14232400` | Payment for additional services for infant schools and schools |
| `14232500` | Payment for organization and training programs, courses, seminars and conferences implementation |
| `14232600` | The fee for the provision of pre-university, postgraduate and further education |
| `14232700` | Fee for show theater |
| `14232800` | The fee for the provision of halls and rooms, as well as equipment, inventory cultural institutions |
| `14232900` | Fee for unclassified educational and cultural services |
| `14233100` | Fee for assistance in job placement abroad |
| `14233200` | The fee for the issuance of permits for foreign labor and work permits |
| `14233300` | The fee for the publication of scientific articles in the online magazine |
| `14233400` | The fee for the provision of rooms for meetings |
| `14233900` | Fee for unclassified social services |
| `14234100` | The fee for the issuance of the certificate of conformity of the equipment and communication services |
| `14234200` | The fee for issuance of duplicate military and military service records, military and emergency services contract |
| `14234300` | The fee for the issuance of a diploma / certificate, nostrification documents to award academic degrees and conferring academic degrees |
| `14234400` | The fee for the issuance of certificates, licenses, duplicate, powers of attorney and policy |
| `14234500` | Fee for confirmation of the competence of laboratories, product certification bodies, personnel, etc. |
| `14234600` | The fee for the provision of certificates |
| `14234700` | Fee for state registration |
| `14234900` | The fee for non-classified services for registration, issuance of certificates, permits and other |
| `14235100` | Fee for oprobirovanie and marking jewelry and other household items made of precious metals |
| `14235200` | The fee for unscheduled work |
| `14235300` | Fee for examination and research |
| `14235400` | The fee for testing and evaluation of knowledge |
| `14235500` | The fee for the analysis and testing |
| `14235600` | The fee for veterinary and clinical examination |
| `14235900` | The fee for non-classified research services, analysis, evaluation and examination |
| `14236100` | Fees for providing information on the thesis abstract and dissertations |
| `14236200` | The fee for conducting statistical surveys, statistical information |
| `14236300` | Fees for search, selection and provision of information |
| `14236400` | The fee for the organization of various activities |
| `14236500` | The fee for the issuance of documents for temporary use |
| `14236600` | Processing fee and documentation of citizens |
| `14236900` | The fee for non-classified information provision services and printing |
| `14237100` | Fee for chemical and biological treatments against pests |
| `14237200` | Fee for disinfection of regulated products, tools and facilities |
| `14237300` | The fee for maintenance of the animals in the quarantine isolation |
| `14237400` | Fee for customs escort of goods and means of transport |
| `14237500` | The fee for the preparation, reception and storage of documents |
| `14237600` | The fee for the safety and security of the objects on contracts |
| `14237700` | The fee for maintenance of flammable, strong, poisonous substances |
| `14237900` | Fee for unclassified security services and storage |
| `14238100` | The fee for the supply of water to water users |
| `14238200` | The fee for the site visit protected areas |
| `14238300` | Fee for the implementation of timber and planting material |
| `14238400` | The fee for the classification of topics on the International Patent Classification |
| `14238500` | Fee for indexing theses |
| `14238600` | Fee for the development of circuit card for the installation and operation of cage structures |
| `14238700` | The fee for organizing and conducting underwater engineering, diving and scuba diving |
| `14238900` | Fee for unclassified other services |
| `14221600` | Duties for testing for right of receiving driving license and transport inspection |
| `14221700` | Due payments for rubbish removal |
| `14221800` | Due payment for auto parking |
| `14221900` | Other payments and due payments |
| `14222100` | The state fee charged by registration authorities |
| `14222200` | State due taxable by justice agencies |
| `14222300` | State due taxable by court agencies |
| `14222400` | Other state dues |
| `14239100` | Contributions in excess of the sale price charged by the privatization |
| `14239200` | Deductions for razbronirovanii gosmatrezervov |
| `14239300` | Deductions on previously issued loans budget |
| `14239400` | Miscellaneous income |
| `14311100` | Administrative fines |
| `14311200` | Earnings from selling of revealed contraband |
| `14311300` | Earnings from selling of forfeited property |
| `14311400` | Earnings from control-supervision measures |
| `14311500` | Compensation of damnification on economic crime |
| `14411100` | Current aid from legal entities |
| `14412100` | Capital aid from legal entities |
| `14511100` | Incomes inverted for benefit of state |
| `14511200` | Other non tax incomes |
| `14511300` | Rate income/loss |
| `14511400` | Allocations for infrastructure development and maintenance of local importance |
| `41011000` | Purchasing of certified seeds |
| `41012000` | Purchasing of gardening and vegetable-growing production |
| `41013000` | Purchasing of animals (productive and plough cattle) |
| `41014000` | Purchasing of production of animal breeding (meat, milk) |
| `41015000` | Purchasing of hunting production |
| `41016000` | Purchasing of other production of agriculture |
| `41020000` | Payments for production of forestry, timber cutting |
| `41030000` | Payments for production of fishery |
| `41040000` | Payments for minerals industry and quarry mining (coal, mineral oil, mineral) |
| `41051000` | Payments for foodstuff, drinks, tobacco, chilled water and ice for cooling |
| `41052000` | Payments for textile, clothes, fur, leather |
| `41053000` | Payments for wood, cellulose, paper, information carrier |
| `41054000` | Payments for coke, crude oil refining production and nuclear fuel |
| `41055000` | Payments for chemical substances, products and fibers; rubber and plastic goods; mineral and nonmetal goods |
| `41056000` | Payments for basic metals and finished metal articles |
| `41057000` | Payments for machinery and equipment, not included in to other grouping; electrical and optical equipment |
| `41058000` | Payments for transport equipment |
| `41059000` | Payments for other industrial production (furniture, sport wares, toys) |
| `41061000` | Hot water |
| `41062000` | Electric power |
| `41063000` | Gas |
| `41071000` | Medical supplies and bandage means |
| `41072000` | Foodstuffs |
| `41073000` | Equipment |
| `41074000` | Sewing and repair of goods and other uniforms and special outfits |
| `41075000` | Petrol, diesel and other fuel |
| `41076000` | Spare parts |
| `41079000` | Other materials for current household aims |
| `41900000` | Payment for other production (goods) |
| `43112000` | Purchasing of flats |
| `43130000` | Purchasing of houses |
| `43140000` | Purchasing of other constructions and accommodations |
| `43210000` | Purchasing of cars |
| `43220000` | Purchasing of buses |
| `43230000` | Purchasing of lorries |
| `43240000` | Purchasing of other transports |
| `43311000` | Purchasing of production machineries and equipment |
| `43312000` | Purchasing of agricultural machineries and equipment |
| `43313000` | Purchasing of other machineries and equipment |
| `43411000` | Purchasing of furniture |
| `43412000` | Purchasing of computer equipment |
| `43413000` | Purchasing of tools |
| `43414000` | Purchasing of other furniture and equipment |
| `42111100` | Transport charges |
| `42111200` | Hotel expenses |
| `42111300` | Costs per day |
| `42111900` | Other expenses |
| `42112100` | Transport charges |
| `42112200` | Hotel expenses |
| `42112300` | Costs per day |
| `42112900` | Other expenses |
| `42159100` | Administrative expenses |
| `44001000` | Salary payment |
| `44001200` | Advance payments as per agreement |
| `44001300` | Extra payment |
| `44001400` | Additional payments and compensations |
| `44001900` | Other payments |
| `45001000` | Pension of non-governmental pension fund |
| `42121100` | Payment for water and sewerage (system) |
| `42121200` | Payment for electric power |
| `42121300` | Payment for heat-and-power |
| `42121400` | Payment for gas |
| `42121500` | Payment for lift |
| `42121600` | Payment for garbage disposal |
| `42121700` | Payment for technical maintenance of habitation |
| `42122100` | Telephone and facsimile communication services |
| `42122200` | Cellular communications services |
| `42122300` | Communication by courier services |
| `42122400` | Mail services |
| `42122900` | Other communication services |
| `42131100` | Leasing of buildings and accommodations |
| `42131200` | Leasing of equipments and inventors |
| `42131300` | Leasing of transport means |
| `42131900` | Leasing of other property |
| `42141100` | Payments for services of overland transport |
| `42141200` | Payments for services of water transport |
| `42141300` | Payments for services of air transport |
| `42141400` | Payments for auxiliary transport services, tourist agencies and tourist operator services |
| `42141500` | Maintenance of means of transport |
| `42141600` | Current repair of transport |
| `42141900` | Other transport services |
| `42151100` | Legal services |
| `42151200` | Consulting services |
| `42151300` | Services of off-departmental guard |
| `42151400` | Services in sphere of IT |
| `42151500` | Banking services |
| `42151600` | Auditing services |
| `42151700` | Accounting services |
| `42151800` | Insurance services |
| `42151900` | Other services, rendered on contract |
| `42152100` | Current repairs of buildings and accommodations |
| `42152200` | Current repairs of constructions |
| `42152300` | Current repairs of equipment and inventory |
| `42152900` | Other current repair |
| `42153100` | Sanitary services in maintenance of buildings and accommodations |
| `42153200` | Restoration of monuments |
| `42153900` | Other services in maintenance of buildings, accommodations and other property |
| `42154101` | Teaching of personnel of private institutions |
| `42154200` | Payment for education in state educational institutions |
| `42154210` | Payment for education in private high-educational institutions |
| `42154300` | Payment for education in municipal schools |
| `42154310` | Payment for education in private schools |
| `42154400` | Payment for visiting of municipal child institutions |
| `42154410` | Payment for visiting of private child institutions |
| `42154900` | Payment for other services in field of education |
| `42156100` | Payment for medical, stomatological services in private clinics |
| `42157100` | Basic repair of living constructions |
| `42157110` | Basic repair of flats |
| `42157120` | Basic repair of houses |
| `42157130` | Basic repair of constructions and accommodations |
| `42157200` | Basic repair of cars |
| `42157210` | Basic repair of buses |
| `42157220` | Basic repair of lorries |
| `42157230` | Basic repair of other transports |
| `42157310` | Basic repair of agricultural machineries and equipment |
| `42157320` | Basic repair of other machineries and equipment |
| `46001000` | For mass media services |
| `46001200` | Printing works services |
| `46001300` | Advertising-publishing services |
| `46001900` | Other services |
| `42158100` | Payment of executive documents on decision of court |
| `42159120` | Other expenses, not related to other articles |
| `51311200` | On payment of interest on deposits of organizations |
| `51311300` | On withdrawal of deposits of organizations |
| `51311900` | Other on deposits of organizations |
| `52132000` | On paying off of principal sum on other loans |
| `52133000` | Repayment of interest on other loans |
| `52134000` | Others on issuance of other loans |
| `52312000` | On repayment of interests on loans of organizations |
| `52313000` | On repayment of principal sum on loans of organizations |
| `52319000` | Other operations on loans of operations |
| `52412000` | On repayment of interests on mortgage loans to organizations |
| `52413000` | On repayment of principal sum on mortgage loans to organizations |
| `52419000` | Other operations on mortgage loans to organizations |
| `52430000` | Other operation on loans |
| `53311000` | On purchase and sale of security in foreign currency |
| `53319000` | Other operations with security in foreign currency |
| `54301300` | Operations on purchase and selling of state securities (settlements) on secondary market |
| `54301900` | Other operations with state securities (settlements) |
| `54401300` | Operations on purchase and selling of other state securities on secondary market |
| `54401600` | Other operations with other state securities |
| `54401700` | Operations with State Securities on primary market, placed through Kyrgyz stock exchange |
| `54401800` | Paying off of State Securities, placed through Kyrgyz stock exchange |
| `54401900` | Operations with State Securities on secondary market, placed through Kyrgyz stock exchange |
| `54501100` | Purchasing of other securities on primary market |
| `54501200` | Paying off of other securities |
| `54501300` | Payment of interests on other securities |
| `54501400` | Dividends on shares |
| `54501500` | Operations on purchase and selling of other securities on secondary market |
| `54501900` | Other operations with other state securities |
| `54601100` | Purchasing of other securities on primary market |
| `54601200` | Paying off of other securities |
| `54601300` | Payment of interests on other securities |
| `54601400` | Dividends on shares |
| `54601500` | Operations on purchase and selling of other securities on secondary market |
| `54601900` | Other operations with other state securities |
| `54710000` | Securities issued abroad |
| `54721000` | Securities providing participation in capital, bonds, debt instruments, securities of money market, except STB, ST bonds and other securities issued by governments of foreign countries |
| `54722000` | STB, ST bonds and other securities issued by governments of foreign countries, derivative or secondary financial instruments |
| `54723000` | Other securities, issued abroad |
| `54800000` | Other operations with other state securities |
| `55101000` | Humanitarian aid payments |
| `55102000` | Charitable aiding |
| `55103000` | Branches and representatives financing |
| `55104000` | Refund by branches and representatives |
| `55107000` | Guarantee fee |
| `55108000` | Refund of guarantee fee |
| `55109000` | Issue of loans for individual house-building, utility rooms and operations of pawn-shop |
| `55110000` | Return of issued loans |
| `55111000` | Return of excess transferred amount of customers' money |
| `55112000` | Transfer of balance of one settlement account to another one (of assignee) at closing (liquidation) of institution |
| `55113000` | Transfer of compensation, pension and sick benefit to social fund by institution |
| `55114000` | POL, using in production |
| `55120000` | Other transfers |
| `55501000` | Other specific payments |
| `55201000` | Interbank transfers |
| `55202000` | Replenishment |
| `55203000` | Payment for account servicing |
| `55204000` | Payment for currency encashment |
| `55209000` | Return of excess transferred amount of monetary funds |
| `55212000` | Investments to subsidiary companies |
| `55220000` | Other interbank payments and transfers |
| `55303000` | Cash deposit into the cash desk |
| `55304000` | Withdrawal of cash from cash desk |
| `55305000` | Cash shortage at recalculation in cash desk |
| `55306000` | Excess of cash money at recalculation in cash desk |
| `55401000` | Fines |
| `55402000` | Penalty |
| `55403000` | Forfeit |
| `55410000` | Other financial sanctions |
# Angola (AO) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/ao)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Angola or payment in AOA.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Angola or payment in AOA. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `A01.01` | Platinum |
| `A01.02` | Crude Oil |
| `A01.03` | Refined petroleum products |
| `A01.04` | Diamonds |
| `A01.05` | Steel |
| `A01.06` | Coal |
| `A01.07` | Iron Ore |
| `A01.08` | Copper |
| `A01.09` | Metals |
| `A01.10` | Processed Mineral Products |
| `A01.11` | Electricity |
| `A01.12` | Water |
| `A01.13` | Unprocessed animal products |
| `A01.99` | Raw materials and supplies - Others |
| `A02.01` | Processed Crops and Agricultural Products |
| `A02.02` | Unprocessed crops and agricultural products |
| `A02.03` | Livestock |
| `A02.04` | Processed and unprocessed meat and fish |
| `A02.05` | Beverages |
| `A02.99` | Food products - Others |
| `A03.01` | Capital goods |
| `A04.01` | Medicines |
| `A04.02` | Chemicals (including sulfuric acid, soap, detergent powder, uranium oxide, etc.) |
| `A04.99` | Medicines or related products - others |
| `A05.01` | Goods exported via the country's Post Office |
| `A05.02` | Scrap metal |
| `A05.99` | Parts and Accessories - Others |
| `A06.01` | Triangular Trade Goods - Triangular trade purchase |
| `A06.02` | Triangular trade goods - Triangular trade sale |
| `A06.03` | Shipping supplies - In ports |
| `A06.04` | Shipping supplies - At airports |
| `A06.05` | Shipping supplies - Others |
| `A06.06` | Non-monetary gold |
| `A06.99` | Others |
| `B01.01` | Public Sector |
| `B01.02` | Private Sector |
| `B01.99` | Others |
| `B02.01` | Health Travel |
| `B02.02` | Travel for Educational or Scientific Purposes |
| `B03.01` | Accommodation |
| `B03.02` | Local transport |
| `B03.03` | Other Services |
| `B03.04` | Package tours with international travel included |
| `B03.05` | Cruise ships |
| `B03.99` | Others |
| `B04.01` | Credit Card |
| `B04.02` | Debit card |
| `B04.03` | Pre-paid card |
| `B04.99` | Others |
| `C01.01` | Embassies and Consulates |
| `C01.02` | Maintenance of Angolan Embassies, Consulates and Representations Abroad |
| `C01.03` | Remittances from Angolan Embassies, Consulates and Representations Abroad |
| `C01.04` | Maintenance of Embassies, Foreign Consulates and Representations of International Institutions in Angola |
| `C01.05` | Remittances from Embassies, Foreign Consulates and Representations of International Institutions in Angola |
| `C01.06` | Military Expenses |
| `C01.99` | Government - Others |
| `C02.01` | Sea, River and Lake Transports - Passenger |
| `C02.02` | Sea, River and Lake Transports - Freight |
| `C02.03` | Sea, river and lake transports - chartering with crew |
| `C02.04` | Sea, River and Lake Transports - Supporting and auxiliary services |
| `C02.05` | Air Transport - Passenger |
| `C02.06` | Air Transport - Freight of goods |
| `C02.07` | Air transport - chartering with crew |
| `C02.08` | Air transport - Supporting and auxiliary services |
| `C02.09` | Railway Transport - Passenger |
| `C02.10` | Railway transport - freight of goods |
| `C02.11` | Railway transport - chartering with crew |
| `C02.12` | Railway transport - Supporting and auxiliary services |
| `C02.13` | Road Transport - Passenger |
| `C02.14` | Road transport - Freight of goods |
| `C02.15` | Road transport - chartering with crew |
| `C02.16` | Road transport - Supporting and auxiliary services |
| `C02.99` | Transport - Others |
| `C03.01` | Telecommunications Services |
| `C03.02` | Postal and Courier Services |
| `C03.03` | Computer Services |
| `C03.04` | Information services - Information services provided by news agencies |
| `C03.05` | Information services - Database and other information services |
| `C03.99` | News or information services - Others |
| `C04.01` | Overseas construction |
| `C04.02` | Construction in Angola |
| `C04.99` | Construction - Others |
| `C05.01` | Insurance Goods - Premiums |
| `C05.02` | Goods insurance - indemnity |
| `C05.03` | Direct Insurance |
| `C05.04` | Insurance Reinsurance - Premiums |
| `C05.05` | Insurance Reinsurance - Indemnity |
| `C05.06` | Auxiliary Insurance Services |
| `C06.01` | Banking and other financial intermediation services - Banking intermediation services |
| `C06.02` | Banking and other financial intermediation services - Financial leasing services |
| `C06.03` | Banking and other financial intermediation services - Financial intermediation services - others |
| `C06.04` | Services auxiliary to financial intermediation - Financial market management |
| `C06.05` | Services auxiliary to financial intermediation - Brokerage and related services |
| `C06.06` | Services auxiliary to financial intermediation - Others |
| `C06.99` | Financial Services - Others |
| `C07.01` | Investigation services and development |
| `C07.02` | Professional and management consulting for business services - Legal services |
| `C07.03` | Professional and management consulting for business services - Accounting and auditing services |
| `C07.04` | Professional and management consulting for business services - Management consulting services |
| `C07.05` | Professional and management consulting for business services - Advertising services |
| `C07.06` | Professional and management consulting for business services - Market research and public opinion polling services |
| `C07.07` | Professional and management consulting for business services - Public relations services |
| `C07.99` | Professional and management consulting for business services - Others |
| `C08.01` | Commercial intermediation |
| `C08.02` | Operational Leasing Services |
| `C08.03` | Rental of Vessels |
| `C08.04` | Aircraft Rental |
| `C08.05` | Renting of Railway Equipment |
| `C08.06` | Renting of Other Transport Equipment |
| `C08.07` | Other Rental Services |
| `C08.08` | Agricultural services |
| `C08.09` | Mining Services |
| `C08.10` | Industrial services |
| `C08.11` | Environmental/Ecological Treatment Services |
| `C08.12` | Architectural and Urban Planning Services |
| `C08.13` | Engineering services |
| `C08.14` | Technical Consultancy Services |
| `C08.15` | Technical assistance |
| `C08.16` | Prospecting services or Specialised studies |
| `C08.99` | Technical services - Others |
| `C09.01` | Audiovisual and related services |
| `C09.99` | Personal, cultural, sporting and recreational services - Others |
| `C10.01` | Intellectual Property Rights |
| `C10.02` | Intellectual property distribution rights - Distribution rights arising from franchising, marketing, investigation and development |
| `C10.03` | Distribution rights of intellectual property - Reproduction and/or distribution rights of software |
| `C10.04` | Distribution rights of intellectual property - Reproduction and/or distribution rights of audiovisuals |
| `C10.05` | Distribution rights of Intellectual Property - temporary rights of use of natural resources |
| `C10.99` | Distribution rights of intellectual property - royalties - others |
| `C11.01` | Processing fees made to materials (except gold, platinum, crude oil, refined petroleum products, precious stones, steel, coal, copper and iron ore) |
| `C11.02` | Fees for gold processing |
| `C11.03` | Processing fees made from platinum |
| `C11.04` | Processing fees made to crude oil |
| `C11.05` | Processing fees made to refined petroleum products |
| `C11.06` | Processing fees for precious stones |
| `C11.07` | Processing fees made from steel |
| `C11.08` | Charges for processing made from coal |
| `C11.09` | Fees for processing made from iron ore |
| `C11.10` | Processing charges made to copper (processed and unprocessed copper, including copper wire, electrical cables, etc.) |
| `C11.11` | Fees for processing made to metals (including cobalt, nickel, manganese ore/concentrate, zinc, zinc concentrate, etc.) |
| `C11.12` | Processing fees - Processed crops and agricultural products (including sugar, peanut butter, maize meal, cotton yarn, etc.) |
| `C11.13` | Fees for processing done to unprocessed agricultural crops and products (including vegetables, fruit, soya beans, maize, wheat, meslin, cotton lint, etc.) |
| `C11.14` | Charges for processing made to chemicals (including sulphuric acid, soap, washing powder, uranium oxide, etc.) |
| `C11.15` | Processing fees - Processed mineral products (including cement, lime, etc.) |
| `C11.16` | Charges for processing done on unprocessed animal products (including hides, raw hides, leather, etc.) purchased by nonresidents where there will be no physical export other than commercial transactions |
| `C11.17` | Processing fees for scrap metal |
| `C11.18` | Fees for processing done to farm animals (including cattle, sheep, goats, horses, ostriches, small animals, chickens, pigs, etc) |
| `C11.19` | Fees for processing done to processed and unprocessed meat and fish (including sausages, scallops, meat parts, seafood, lobster, crab, etc.) |
| `C11.20` | Processing charges for beverages, both alcoholic and nonalcoholic (including beer, wine, spirits, soft drinks, juices, etc.) |
| `C11.99` | Processing Charges - Others |
| `C12.01` | Maintenance and repair services n.i.e. |
| `C99.01` | Other Business Services |
| `C99.02` | Purchase and Sale and Other Services |
| `C99.03` | Operational leasing |
| `D01.01` | Maintenance of individuals (family support) |
| `D01.02` | Emigrants' remittances |
| `D01.03` | Emigrants' remittances |
| `D01.04` | Health |
| `D01.05` | Education |
| `D01.06` | Contributions to class entities |
| `D01.07` | Other current transfers |
| `D01.08` | Current taxes on income and wealth |
| `D01.09` | Social contribution |
| `D01.10` | Social benefits |
| `D01.11` | Non-life insurance premium |
| `D01.12` | Non-life insurance indemnity |
| `D01.13` | Current international cooperation |
| `D01.99` | Bursary |
| `E01.01` | Wages and other remuneration paid by residents to nonresidents |
| `E01.02` | Wages and other remuneration paid by nonresidents to residents |
| `E01.99` | Compensation of employees - Others |
| `E02.01` | Direct Investment Income - Profit and Dividends - Income from equity and investment fund shares |
| `E02.02` | Direct Investment Income - Profits and dividends |
| `E02.03` | Direct Investment Income - Profits and dividends - Direct investor in direct investment enterprises |
| `E02.04` | Direct Investment Income - Profits and dividends - Direct investment enterprises in the direct investor |
| `E02.05` | Direct Investment Income - Profits and dividends - Between relative or related enterprises |
| `E02.06` | Direct Investment Income - Reinvested earnings |
| `E02.07` | Direct Investment Income - Interest |
| `E02.08` | Direct Investment Income - Interest - Direct investor in direct investment enterprises |
| `E02.09` | Direct investment income - Interest - Direct investment enterprises in the direct investor (reverse investment) |
| `E02.10` | Direct Investment Income - Interest - Between relative or related enterprises |
| `E03.01` | Investment income on equity and investment fund shares |
| `E03.02` | Dividends on equity excluding investment fund shares |
| `E03.03` | Investment income attributable to investment fund shareholders |
| `E03.04` | Reinvested earnings |
| `E03.05` | Dividends |
| `E03.06` | Interest |
| `E04.01` | Real estate investment |
| `E04.02` | Income from real estate investments |
| `E05.01` | Current taxes on income and wealth |
| `E05.02` | Social contribution |
| `E05.03` | Social benefits |
| `E05.04` | Current international cooperation |
| `E05.05` | Bursary |
| `E05.06` | Current diverse transfers from the general government |
| `E06.01` | Taxes on production and output |
| `E06.02` | Subsidies on product and production |
| `E06.03` | Rental |
| `E06.04` | Other investment |
| `E06.05` | Interest on deposits |
| `E06.06` | Interest from Deposits - Interest from deposits and investments, with maturity <= 1 year |
| `E06.07` | Interest from deposits and applications, with maturity > 1 year |
| `E06.08` | Interest on Central Administration Loans |
| `E06.09` | Other Sectors Loan Interest |
| `E06.98` | Profit and dividends |
| `E06.99` | Other income from financial applications |
| `F01.01` | Acquisition or disposal of assets non-financial non-produced |
| `F02.01` | Government - Debt Forgiveness |
| `F02.02` | Government - Investment Donation |
| `F02.03` | Government - Other capital transfers |
| `F02.04` | Other Sectors - Debt Forgiveness |
| `F02.05` | Other Sectors - Investment Grant |
| `F02.06` | Other Sectors - Inheritance |
| `F02.07` | Other Sectors - Donations |
| `F02.08` | Other Sectors - Other capital transfers |
| `F02.09` | Acquisition of Real Estate/Real Estate Assets |
| `F02.10` | Life insurance benefit |
| `F02.11` | Blocked Funds |
| `F02.12` | Personal capital transfers |
| `F02.99` | Capital Transfers - Others |
| `G01.01` | Equity and investment fund shares |
| `G01.02` | Company Formation Capital (Includes Partial Realisation) |
| `G01.03` | Increase in capital |
| `G01.04` | Merger and acquisition |
| `G01.05` | Acquisition or disposal of Shares and Participations between Resident and Non-Resident Investors |
| `G01.06` | Acquisition abroad of Shares and Participations by Resident Investors (> 10%) |
| `G01.07` | Acquisition of Shares and Stakes in Angola by Non Resident Investors (> 10%) |
| `G01.08` | Offshore Sale of Shares and Participations by Resident Investors (>10%) |
| `G01.09` | Sale of Shares and Participations by Non Resident Investors in Angola (>10%) |
| `G01.10` | Company Liquidation or Extinction |
| `G01.11` | Reinvestment of Profits (Includes Reserves Held within the Company) |
| `G01.12` | Debt instruments - Loans |
| `G01.13` | Debt instruments - Loans granted to the direct investor by the direct investment company |
| `G01.14` | Debt instruments - Loans obtained by the direct investment company from the direct investor |
| `G01.99` | Others |
| `G02.01` | Equity and investment fund shares |
| `G02.02` | Company Formation Capital (Includes Partial Realisation) |
| `G02.03` | Increase of Capital |
| `G02.04` | Acquisition or disposal of Shares and Participations between Resident and Non-Resident Investors |
| `G02.05` | Acquisition abroad of Shares and Participations by Resident Investors (< 10%) |
| `G02.06` | Acquisition in Angola of Shares and Stakes by Non Resident Investors (< 10%) |
| `G02.07` | Disposal abroad of Shares and Participations by Resident Investors (<10%) |
| `G02.08` | Disposal of Shares and Participations by Non-resident Investors in Angola (<10%) |
| `G02.09` | Company Liquidation or Extinction |
| `G02.10` | Reinvestment of Profits (Includes Reserves Held within the Company) |
| `G02.11` | Debt securities - Loans |
| `G02.12` | Debt securities - Loans granted to the portfolio investor by the portfolio investment company |
| `G02.13` | Debt securities - Loans obtained by the portfolio investment company from the portfolio investor |
| `G02.99` | Others |
| `G03.01` | Currencies and Deposits |
| `G03.02` | Deposits and investments abroad by residents, with maturity <= 1 year |
| `G03.03` | Deposits and investments abroad by residents, with a maturity > 1 year |
| `G03.04` | Deposits and investments in Angola by non-residents, with maturity <= 1 year |
| `G03.05` | Deposits and investments in Angola by non-residents, with a maturity > 1 year |
| `G03.06` | Insurance, pension schemes and standardised guarantee mechanisms |
| `G03.07` | Commercial credits |
| `G03.08` | Disinvestment - liquidation product from investment |
| `G03.09` | Repurchase agreements |
| `G03.10` | Real estate investment |
| `G03.11` | Angola's real estate investment abroad |
| `G03.12` | Foreign real estate investment in Angola |
| `G03.13` | Other investment |
| `G03.14` | Other Capital Participations |
| `G03.15` | Other forms of participation in the capital of non-resident entities |
| `G03.16` | Other forms of participation in the capital of resident entities |
| `G03.99` | Other investment |
| `G04.01` | Financial derivatives (that do not constitute reserves) and employee stock options |
| `G04.02` | Share options granted to employees (employees stock options) |
| `G04.03` | Share options granted to suppliers |
| `G05.01` | Reserved assets |
| `G06.01` | Disbursement of loans granted/received |
| `G06.02` | Repayment of loans granted/received |
| `G07.01` | Execution of bank guarantee |
| `G08.01` | Repatriation of capital |
| `H01.01` | Sales to Exchange Bureaus |
| `H01.02` | Remittance of Values |
| `H01.03` | Opening and Operation of Accounts with Financial Institutions Abroad |
| `H01.04` | Resident Transfers Received from a Resident's Overseas Account, to a Resident |
| `H01.05` | Foreign Payments to a Non-Resident from the Account of another Non-Resident (Transactions between Non-Residents) |
| `H01.06` | Purchase or Sale of Foreign Currency between Banks (against local currency) |
| `H01.07` | Foreign Currency Conversions between Banks (FC to FC) |
| `H01.08` | Borrowing and lending of foreign currency |
| `H01.09` | Foreign Currency Deposits |
| `H01.10` | Account to Account Transfers - "Nostro" Accounts |
| `H01.11` | "Nostro" Accounts Transfer to "Nostro" Accounts |
| `H01.12` | Transfers between Special Accounts |
| `H01.13` | Banks' Provisioning |
| `H01.14` | Bank-to-Bank Transfers |
| `H01.15` | Transfers between accounts at the Central Bank |
| `H01.16` | Forex Currency Transactions |
| `H01.17` | Forex Gold Transactions |
| `H01.18` | Compensation between central Banks |
| `H02.01` | International payment cards |
| `H02.02` | Credit operations |
| `H02.03` | Remittance of values |
| `H02.04` | Merchandise |
| `H02.05` | Importing of banknotes |
| `H02.06` | Invisibles |
| `H02.07` | Capitals |
| `H02.08` | Credit line |
| `H02.09` | Others |
# Pakistan (PK) (https://docs.tryacme.com/guides/dbs-sg-receiving-party-purpose-codes/pk)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
DBS Singapore receiving party purpose codes. Beneficiary in Pakistan or payment in PKR.
Purpose codes for `outgoingPurposeCode` on DBS Singapore `TT` payments when the corridor is: Beneficiary in Pakistan or payment in PKR. The rules for when a code is mandatory, and how corridors are matched, are on [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes).
| code | description |
| --- | --- |
| `9010` | Earnings of Pakistani shipping companies |
| `9011` | Charter of Pakistani ships with crew |
| `9012` | Supply of bunker oil to foreign ships |
| `9013` | Repair & maintenance of foreign ships & salvage earnings |
| `9014` | Remittances received by foreign shipping companies / agents |
| `9015` | Refund of payments on account of various items for sea transportations |
| `9016` | Earnings of Pakistani air companies |
| `9017` | Charter of Pakistani aircrafts with crew |
| `9018` | Supply of aviation fuel to foreign aircrafts |
| `9019` | Repair & maintenance of foreign aircrafts |
| `9020` | Remittances received by foreign airlines / agents |
| `9021` | Refund of payment on account of various items for air transportations |
| `9022` | Remittances received by recruiting agents for passage cost |
| `9023` | Earnings of Pakistani road companies |
| `9024` | Earnings of Pakistan railways |
| `9025` | Earnings of liquid fuel transport through pipelines across borders |
| `9026` | Refund of payment for other transportations (excluding sea, air, land) |
| `9027` | Remittances received by freight forwarders & clearing agents for sea transportation |
| `9028` | Remittances received by freight forwarders & clearing agents for air transportation |
| `9029` | Remittances received by freight forwarders & clearing agents for land transportation |
| `9030` | Earning through charges of electricity transmissions |
| `9009` | Other transport services |
| `9091` | Postal services |
| `9092` | Courier services |
| `9031` | Foreign government & semi-government employees on official travel to Pakistan |
| `9032` | Officials of international organizations on official travel to Pakistan |
| `9033` | Surrender of unspent balance by officials on their return from foreign tour |
| `9041` | Business travel on behalf of nonresident enterprises |
| `9051` | Self employed nonresidents for business purposes |
| `9052` | Surrender of unspent balance by nonofficials on their return from foreign tour |
| `9061` | Nonresidents seeking medical / health treatment in Pakistan |
| `9071` | Nonresidents students studying in Pakistan on account of education |
| `9072` | Training expenditure of foreign trainees in Pakistan |
| `9073` | Foreign students & trainees receiving education/training from Pakistan |
| `9081` | Purchase of foreign currency / rupee denominated instruments from Pakistani nationals |
| `9082` | Purchase of instruments from foreign nationals coming to Pakistan as tourists |
| `9083` | Religious travel |
| `9084` | Surrender of Pakistani nationals of unutilized amount of foreign exchanges on their return |
| `9085` | Surrender of Pakistani hajjis of unutilized foreign exchanges on their return |
| `9086` | Surrender of Pakistani Zairin of unutilised foreign exchange released for Umrah, Ziarat |
| `9111` | Construction Services |
| `9121` | Life insurance & pension services |
| `9124` | Refund of insurance & pension services |
| `9141` | Nonlife insurance services |
| `9146` | Refund of other direct insurance (nonlife) payments |
| `9151` | Life reinsurance |
| `9152` | Nonlife reinsurance |
| `9161` | Services auxiliary to insurance (incl. brokerage & agency services) |
| `9171` | Bank commission & charges |
| `9172` | Remittances for guarantees involved |
| `9173` | Non-bank financial services (incl. investment banking, mergers, acquisition etc.) |
| `9174` | Refund of financial services |
| `9101` | Telecommunication services |
| `9102` | Services provided by call centers |
| `9181` | Hardware consultancy services |
| `9182` | Software consultancy services |
| `9183` | Maintenance & repairs of computers & peripheral equipments |
| `9184` | Export of computer software (incl. design, development & programming of customised system) |
| `9185` | Other computer services not specified elsewhere |
| `9186` | Freelance of computer & information systems services |
| `9191` | Earnings of journalists & writers |
| `9192` | Subscription to domestic newspapers & periodicals by nonresidents abroad |
| `9193` | Remittances received by Pakistani news agents & correspondents from abroad |
| `9201` | Royalties & trade marks |
| `9202` | License fee |
| `9211` | Merchanting |
| `9212` | Other trade-related services such as commission |
| `9221` | Charter of ships without crew |
| `9222` | Charter of aircrafts without crew |
| `9230` | Waste treatment and depollution services |
| `9231` | Legal services |
| `9232` | Accounting auditing & tax consultancy services |
| `9233` | Business & management consultancy & public relations |
| `9234` | Agency commission |
| `9235` | Printing charges of currency notes, stamps and other securities documents |
| `9236` | Processing fees on goods owned by another economy |
| `9237` | Advertising, market research & public opinion polling |
| `9238` | Research & development |
| `9239` | Architecture, engineering & technical services |
| `9241` | Agriculture, mining & on-site processing |
| `9242` | Refund & rebate in respect to imports |
| `9243` | Receipt of security with tenders submitted to rice & other export corporations |
| `9244` | Services in medicine exports |
| `9247` | Miscellaneous other business services not classified in items |
| `9248` | Refund of payments on account of various items of miscellaneous services |
| `9249` | Other freelance services (excl. computer & information system services) |
| `9250` | Maintenance & repair work on goods that are owned by nonresidents |
| `9251` | Audiovisual & related services |
| `9261` | Earnings of professional artists |
| `9262` | Other personal, cultural & recreational services |
| `9271` | Remittances received by foreign missions in Pakistan |
| `9272` | Military units & agencies |
| `9273` | Other government services not specified elsewhere |
| `9281` | Remittances received by international organisations & bodies |
| `9291` | Compensation of employees (wages, salaries, and other benefits) |
| `9301` | Profits earned by branches/and other unincorporated enterprises of Pakistani investment companies operating abroad |
| `9302` | Dividends earned by Pakistani investments companies operating abroad |
| `9122` | Surplus funds received from overseas branches/agencies of Pakistani life insurance companies operating abroad |
| `9303` | Income on investment fund shares (dividends) |
| `9311` | Interest on intercompany debt to direct investor from associated enterprises abroad |
| `9312` | Interest on other financial instruments abroad |
| `9322` | Dividends received by govt. and govt. controlled enterprises in enterprises in which they have less than 10% of shares |
| `9323` | Dividends received by banks in enterprises in which they have less than 10% of shares |
| `9324` | Dividends received by private sector enterprises and individuals in enterprises in which they have less than 10% of shares |
| `9331` | Receipt of dividends by general government on account of Investment Fund Shares |
| `9332` | Receipt of dividends by banks on account of Investment Fund Shares |
| `9333` | Receipts of dividends by other sectors on account of Investment Fund Shares |
| `9341` | Receipts of interest for bonds, debentures, notes etc by govt & govt controlled enterprises |
| `9351` | Receipts of interest on account of bonds, debentures, notes etc by banks |
| `9361` | Receipts of interest on account of bonds, debentures, notes etc by other sectors |
| `9381` | Receipt of profit/interest by govt and govt controlled enterprises on money market instruments and short term notes by other sectors |
| `9391` | Receipt of profit/interest by govt and govt controlled enterprises on money market instruments and short term notes by banks |
| `9401` | Receipt of profit/interest by banks on money market instruments and short term notes by other sectors |
| `9412` | Interest on deposit |
| `9414` | Discount |
| `9421` | Refund of interest, service & commitment charges on foreign loan & credit chargeable to debt servicing |
| `9422` | Other receipts by government & government controlled enterprises |
| `9423` | Refund of interest on short-/long-term borrowings by govt & govt controlled enterprises |
| `9426` | Rent on natural resources |
| `9431` | Interest on bank's deposits abroad |
| `9432` | Interest on foreign currency trade loans |
| `9433` | Discount on trade bills etc. |
| `9434` | Other receipt by banks |
| `9435` | Refund of interest on short-/long-term borrowings by banks |
| `9441` | Interest on private sector enterprises & individuals' deposits abroad |
| `9442` | Discount on trade bills etc. |
| `9443` | Rent of property |
| `9444` | Other investment income not specified elsewhere |
| `9445` | Refund of interest on short-/long-term borrowings by other than banks |
| `9448` | Remittances of premium received on financial derivatives |
| `9451` | Taxes and duties |
| `9452` | Custom duty on Gold |
| `9453` | Official donations (Budgetary grant) |
| `9454` | Official donations (Aids and relief related) |
| `9455` | Official donations (Military) |
| `9456` | Official transfers (Regular - made as a matter of policy) |
| `9457` | Official transfers (Technical) |
| `9458` | Receipts on account of Zakat from abroad |
| `9459` | Receipts on account of Sadaqat from abroad |
| `9461` | Other official transfers not specified elsewhere |
| `9462` | Reverse of unrequited official transfers |
| `9463` | Social contributions to general government |
| `9468` | Net premiums on nonlife insurance and standardised guarantees |
| `9469` | Nonlife insurance claims and calls under standardised guarantees |
| `9470` | Social contributions |
| `9471` | Remittances received from Pakistani workers living abroad for one year or more for family maintenance in Pakistan |
| `9472` | Remittances received through postal authorities |
| `9473` | Private donations |
| `9474` | Placement of non-monetary gold value into separate foreign currency account |
| `9475` | Purchases from kerb market |
| `9476` | Other private transfers not specified elsewhere |
| `9477` | Pension transactions |
| `9478` | Utility bills and other agency fee & payments etc. |
| `9479` | Remittances received by real estate builders/developers and housing societies for purchase of residential property |
| `9481` | Receipts of investment grants in cash by Pakistan for the purposes of fixed capital formation |
| `9482` | Receipts of grants by Pakistan for structures such as airfields, docks, roads, hospitals etc used by military |
| `9483` | Receipts on account of taxes levied by the government on capital transfers |
| `9484` | Other capital transfers (government entities) not specified elsewhere |
| `9491` | Receipts of investment grants in cash by nongovernmental organizations of Pakistan for fixed capital formation |
| `9492` | Receipts of legacies, gifts by residents or donations received by non-govt institutions for financing gross fixed capital formation |
| `9493` | Receipts on account of liabilities of the migrants who migrated from Pakistan |
| `9494` | Receipts for other capital transfers (non-governmental entities) not specified elsewhere |
| `9501` | Sale of land to a foreign government for establishment of embassy or missions |
| `9502` | Sale of intangible, nonfinancial assets such as patents & copyrights etc. |
| `9503` | Sale of marketing assets such as franchises or trademarks |
| `9521` | Receipts of short term capital on general government account banks |
| `9522` | Borrowings of less than one year maturity by banks from sources abroad |
| `9523` | Borrowings of <1 year maturity by other than banks from sources abroad (other than direct investors) |
| `9524` | Borrowings of <1 year maturity by banks from other banks in Pakistan paid against the balances held in foreign currency accounts |
| `9525` | Withdrawals in Pakistani rupees from foreign currency accounts - residents individuals other than workers' remittances |
| `9526` | Withdrawals in Pakistani rupees from foreign currency accounts - residents enterprises (direct investment) |
| `9527` | Withdrawals in Pakistani rupees from foreign currency accounts - residents enterprises (portfolio) |
| `9528` | Withdrawals in Pakistani rupees from foreign currency accounts - residents enterprises (other purpose) |
| `9529` | Withdrawals in Pakistani rupees from foreign currency accounts - public residents (general govt sector enterprises) |
| `9530` | Withdrawals from special foreign currency accounts opened by private sector enterprises with banks in Pakistan |
| `9531` | Withdrawals converted into Pakistani rupees from foreign currency accounts - nonresidents |
| `9532` | Foreign currency accounts of residents individuals maintained in Pakistan |
| `9533` | Foreign currency accounts of public sector enterprises in Pakistan |
| `9534` | Credit to foreign currency accounts of private sector enterprises maintained in Pakistan other than special FCA |
| `9535` | Foreign currency accounts of nonresidents maintained in Pakistan |
| `9536` | Issuance of certificates of investment (COI) mobilised under foreign currency accounts |
| `9537` | Short-term SWAPs - interbank |
| `9538` | Short-term SWAPs - abroad |
| `9539` | Withdrawal of placement of funds with banks within Pakistan or with SBP for a period of <1 yr maturity |
| `9541` | Withdrawal of placements of funds with banks abroad for a period of <1 yr maturity |
| `9542` | Withdrawal of foreign currency from the balance held with SBP in the account of CRR/SCRR |
| `9543` | Purchase of FX from the SBP or interbank for settlement of foreign settlement of FX loan (pre-shipment) to exporters |
| `9544` | Purchase of FX from the SBP or interbank for settlement of FX loan (post-shipment) to exporters |
| `9545` | Purchases of FX from interbank on behalf of importer to replenish the foreign currency account balance |
| `9546` | Amounts received from abroad on account of employees stock options |
| `9547` | Amounts received from abroad on account of repatriation of employee's stock options |
| `9548` | Receipts on account of financial derivatives (options and forwards) in Pakistan from abroad |
| `9549` | Receipts for repatriation of financial derivatives (options and forwards) from abroad |
| `9551` | Remittances received by public sector enterprises for repatriation of direct investment abroad |
| `9552` | Remittances received by Pakistani companies (excluding public sector enterprises) for repatriation of direct investment abroad |
| `9553` | Remittances received by public sector enterprises for repatriation of loans, debt securities etc |
| `9554` | Remittances received by Pakistani companies (excluding public sector enterprises) for repatriation of loans, debt securities etc |
| `9555` | Remittances received by public sector enterprises for repatriation of direct investment in investment fund shares abroad |
| `9556` | Remittances received by Pakistani companies for repatriation of direct investment in "investment fund shares" abroad |
| `9561` | Remittances received from abroad (direct investors) for equity participation and execution of contracts in public sector |
| `9562` | Remittances received from foreign companies for equity participation in Pakistani companies excl those of public sector |
| `9563` | Remittances received for loans, debt securities etc from direct investors abroad in favor of Pakistan's public sector enterprises |
| `9564` | Remittances received for short-term loans, debt securities etc in favor of Pakistani companies (excl. public sector) |
| `9565` | Remittances received for long-term loans, debt securities etc in favor of Pakistani companies (excl. public sector) |
| `9566` | Remittances received from abroad (direct investors) for participation in investment funds shares |
| `9572` | Remittances received by public sector enterprises for repatriation of portfolio investments in equity securities |
| `9573` | Remittances received by banks for repatriation of portfolio disinvestments in equity securities from abroad |
| `9574` | Remittances received by other sectors for portfolio disinvestments in shares, stocks, participation, etc abroad |
| `9582` | Remittances received by public sector enterprises for repatriation of portfolio investments in debt securities abroad |
| `9583` | Remittances received by banks for repatriation of portfolio investments in debt securities abroad |
| `9584` | Remittances received by other sectors for investments in debt securities abroad |
| `9592` | Remittances received by public sector enterprises for repatriation of portfolio investments in money market securities abroad |
| `9593` | Remittances received by banks for repatriation of portfolio investments in money market securities abroad |
| `9594` | Remittances received by other sectors for investments in money market securities abroad |
| `9595` | Remittances received by public sector enterprises for repatriation of investments in "investment fund shares" from abroad |
| `9596` | Remittances received by banks for repatriation of investments in "investment fund shares" from abroad |
| `9597` | Remittances received by other sectors for repatriation of investments in "investment fund shares" from abroad |
| `9602` | Remittances received by public sector enterprises in Pakistan for sale of equity securities |
| `9605` | Remittances received for sale of instruments of National Saving Schemes |
| `9606` | Remittances received by public sector for sale of other instruments of Portfolio Investment not specified elsewhere |
| `9607` | Remittances received by banks in Pakistan for sale of equity securities |
| `9608` | Remittances received by private sector enterprises in Pakistan for sale of equity securities |
| `9609` | Remittances received by private sector enterprises in Pakistan for sale of equity securities other than SCRA (Special convertible rupee accounts) |
| `9612` | Remittances received by public sector enterprises in Pakistan for sale of debt securities |
| `9613` | Remittances received by banks in Pakistan for sale of debt securities |
| `9614` | Remittances received by private sector enterprises in Pakistan for sale of debt securities |
| `9622` | Remittances received by public sector enterprises in Pakistan for sale of money market securities |
| `9623` | Remittances received by banks in Pakistan for sale of money market securities |
| `9624` | Remittances received by private sector enterprises in Pakistan for sale of money market securities |
| `9625` | Remittances received by investment fund shares for portfolio investment in Pakistan |
| `9637` | Receipt of long-term capital on official account not specified elsewhere |
| `9638` | Receipts for repayment on loans by foreign government |
| `9641` | Borrowings of maturity of >1 year by banks from sources abroad |
| `9642` | Receipt for borrowings by banks from other banks within Pakistan against balances of foreign currency accounts by the lender bank |
| `9643` | Long term SWAPs - interbank |
| `9644` | Long term SWAPs - abroad |
| `9645` | Withdrawal of placements of funds made within Pakistan for a maturity period of >1 year |
| `9646` | Withdrawal of placements of funds with banks abroad for a maturity period of >1 year |
| `9647` | Borrowings of maturity >1 year by other than banks from sources abroad |
| `9648` | Foreign currency accounts under special permission - equity portfolio investment |
| `9649` | Foreign currency accounts under special permission - equity direct investment |
| `9650` | Remittances received for short-term interco loans (investor's share in the company >= 10%) for credit to Special FCA |
| `9651` | Remittances received for loan from abroad for credit to foreign currency permission - private loans |
| `9652` | Receipt for Qarz-e-Hasna |
| `9653` | Investment by migrants abroad and managed by residents / relatives in Pakistan |
| `9654` | Remittances received for long-term interco loans (investor's share in the company >= 10%) for credit to Special FCA |
| `9668` | Net premiums on life insurance |
| `9669` | Life insurance claims |
| `9673` | Refund from Pakistan's Diplomatic Missions abroad |
| `9674` | Receipt on government account of foreign loans repayable in <1 year and chargeable to debt servicing |
| `9675` | Receipt for reimbursements under various long-term loans / credits chargeable to debt servicing for payments previously made |
| `9676` | Reversal entry for repayment of (principal only) long-term foreign loans / credits chargeable to debt servicing |
| `9677` | Receipt of foreign cash loans/credits repayable in >1 year and chargeable to debt servicing |
| `9678` | Reversal of remittances approved for special purposes |
| `9681` | Transaction in currency notes |
| `9682` | Back to back currency transactions |
| `9693` | Receipts of surplus earnings by freight forwarders and clearing agents |
| `9694` | Refunds of surplus funds as allowed on FP statements for foreign shipping companies or their agents in Pakistan |
| `9695` | Refunds of surplus funds as allowed on FP statements for foreign airlines or their agents in Pakistan |
| `9697` | Refunds in respect of suppliers credits not chargeable to debt servicing |
| `9698` | Funds received in Pakistan by enterprises from their offshore foreign currency accounts against Form R |
| `9699` | Funds received in onshore foreign currency accounts from permissible offshore foreign currency accounts of enterprises |
| `9703` | Receipts for cost of exports samples |
| `9707` | Remittances received for provision of goods under e-commerce |
| `9708` | Remittances received for provision of services under e-commerce |
# Acme webhooks (https://docs.tryacme.com/guides/webhooks)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
Acme webhooks allow you to receive real-time notification of important updates to the API objects
that you have created. For instance, you may want to be notified when a Hosted Payment has
succeeded.
## Initial setup [#initial-setup]
To get started with webhooks, provide Acme with a webhook endpoint URL for test mode API calls, and
another for live mode. We only support HTTPS endpoints, and webhooks are sent as POST requests.
Examples of valid webhook endpoint URLs:
* [https://rocketshop.com/payments/webhook](https://rocketshop.com/payments/webhook)
* [https://rocketshop.com/payments/webhook?id=abc123](https://rocketshop.com/payments/webhook?id=abc123)
Acme will issue you with one webhook signing key for test mode, and another for live mode. Webhook
signing keys must be stored securely. Do not store them in source control, web applications, or
mobile applications.
Example of a webhook signing key: `57INBTPuUP9htPQKBfZtJv`
## Webhook authentication [#webhook-authentication]
You must first authenticate the webhook to be certain that it originates from Acme and was not
modified in-transit. All webhook requests will contain an `Acme-Signature` HTTP header. This is a
hex-encoded HMAC-SHA256 (see: [RFC2104](https://datatracker.ietf.org/doc/html/rfc2104.html))
signature of the request.
In order to support zero-downtime key rotation in the future, there may be multiple signatures in
this header separated by commas. You should check each signature and accept the webhook only if one
of the signatures is verified successfully.
Example of an `Acme-Signature` HTTP header:
```
Acme-Signature: 3fdcc736f0bea59a11e6c3c0a7bb42256b1f82419e781f24b2e9f541d76649c1,ef7716a50b4b0d47a32d19c7effdd9ac19ffe228dc928fb6a8ee01f457569ea6
```
### Webhook signature algorithm [#webhook-signature-algorithm]
1. Obtain the Acme-Timestamp HTTP header value.
Example: `2023-09-20T12:03:47Z`
2. Construct the HMAC input as: `|`
Example: `2023-09-20T12:03:47Z|{"id":"wbh_0DN88RSVDZBTH",...}`
3. Calculate the HMAC-SHA256 signature with the appropriate webhook signing key.
```
HMAC-SHA256(key, input)
```
4. Hex-encode the signature.
Example: `3fdcc736f0bea59a11e6c3c0a7bb42256b1f82419e781f24b2e9f541d76649c1`
5. Reject the webhook request if the signature that you have calculated does not match one of the
signatures in the Acme-Signature HTTP header.
We also highly recommend that you reject the webhook request if the timestamp in the HTTP header is
more than 1 minute (or a tolerance acceptable to you) away from the current time. This will guard
against [replay attacks](https://en.wikipedia.org/wiki/Replay_attack). This requires your server
time to be synchronized with NTP to avoid false negatives.
Note that HTTP header names are case-insensitive. Your application's HTTP framework may change the
case of the header names (e.g: `acme-timestamp`).
## Message format [#message-format]
The webhook body is a JSON-formatted message describing the event and affected API object(s). If
there is only one object, it will be described under the `object` field. Some events may affect
multiple objects, and the objects will be described in a list under the `objects` field instead.
Example webhook body with a single API object:
```json
{
"id": "wbh_0EPX2GCPSEAX9",
"createdAt": "2024-01-03T01:12:11.632678370Z",
"mode": "LIVE",
"event": "transactions.created",
"object": {
"id": "txn_0EPX2HDTM277A",
"...": "..."
}
}
```
Example webhook body with multiple API objects:
```json
{
"id": "wbh_0FBV5V8G5SVJD",
"createdAt": "2024-01-03T02:27:40.172341716Z",
"mode": "LIVE",
"event": "transactions.created",
"objects": [
{
"id": "txn_0FBV5XNA50TA2",
"...": "..."
},
{
"id": "txn_0FBV62V1N2M44",
"...": "..."
}
]
}
```
### Fields [#fields]
* `id`: String - ID that uniquely identifies each webhook event. It remains the same between
retries.
* `event`: String - Name of the event that triggered the webhook.
* `mode`: String, `LIVE` or `TEST` - API mode of the event/affected object.
* `createdAt`: String - Creation time of the webhook event.
* `object`: Object - API object affected by the event. This follows the same format as the
corresponding API response in Acme API.
* `objects`: Array of objects - For an event affecting multiple API objects, they will be listed
under this field instead.
For example, when a Hosted Refund created via /v1/hosted-refunds changes its status from `PENDING`
to `SUCCEEDED`, this field will contain the same object as the response to GET
/v1/hosted-refunds/ (see Response section of
[/v1/hosted-refunds](/reference/get-hosted-refunds-id)).
Similarly, the `object` field of a `direct-debit-authorizations.succeeded` event will contain the
same object as the response to GET /v1/direct-debit-authorizations/ (see Response section of
[/v1/direct-debit-authorizations](/reference/get-direct-debit-authorizations-id)).
### Examples of webhook bodies [#examples-of-webhook-bodies]
The example below have been pretty-formatted for readability. The actual webhook body may be sent
in a more compact form.
More examples can be found at [Acme webhook examples](/guides/webhook-examples).
Credit transaction landed in bank account:
```json
{
"id": "wbh_0EPX2GCPSEAX9",
"createdAt": "2024-01-03T01:12:11.632678370Z",
"mode": "LIVE",
"event": "transactions.created",
"object": {
"id": "txn_0EPX2HDTM277A",
"dataSource": "ICN",
"transactionType": "PAYNOW",
"bankReference": "I103219508247000000000C829835617410",
"description": "Invoice 123",
"amount": 420,
"currency": "SGD",
"direction": "CREDIT",
"counterparty": {
"name": "JOHN DOE",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0EPX2QBAADQ2R",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1230007890"
},
"virtualAccountNumber": null,
"transactionDate": "2024-01-03",
"statementId": null,
"createdAt": "2024-01-03T01:12:11.628852029Z",
"updatedAt": "2024-01-03T01:12:11.628852029Z"
}
}
```
## Events [#events]
Acme API emits webhooks for the following events.
### Transactions [#transactions]
API: [/v1/transactions](/reference/get-transactions)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| transactions.created | An incoming transaction/credit notification from the bank has been received. | Only one under `object` field, or one or more under `objects` field. |
### Statements [#statements]
API: [/v1/statements](/reference/get-statements)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| statements.created | An end-of-day bank account statement has been processed, and the transactions are ready for retrieval. | Only one under `object` field. |
### Refunds [#refunds]
API: [/v1/refunds](/reference/get-refunds)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| refunds.succeeded | A Refund has succeeded, and its status has changed to `SUCCEEDED`. | Only one under `object` field. |
| refunds.failed | A Refund has failed, and its status has changed to `FAILED`. | Only one under `object` field. |
### Hosted Payments [#hosted-payments]
API: [/v1/hosted-payments](/reference/get-hosted-payments-id)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| hosted-payments.succeeded | The state of a Hosted Payment has changed to `SUCCEEDED`. | Only one under `object` field. |
| hosted-payments.failed | The state of a Hosted Payment has changed to `FAILED`. | Only one under `object` field. |
### Hosted Refunds [#hosted-refunds]
API: [/v1/hosted-refunds](/reference/get-hosted-refunds-id)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| hosted-refunds.succeeded | The state of a Hosted Refund has changed to `SUCCEEDED`. | Only one under `object` field. |
| hosted-refunds.failed | The state of a Hosted Refund has changed to `FAILED`. | Only one under `object` field. |
### Direct Debit Authorizations [#direct-debit-authorizations]
API: [/v1/direct-debit-authorizations](/reference/get-direct-debit-authorizations-id)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| direct-debit-authorizations.succeeded | The state of a Direct Debit Authorization has changed to `SUCCEEDED`. | Only one under `object` field. |
| direct-debit-authorizations.failed | The state of a Direct Debit Authorization has changed to `FAILED`. | Only one under `object` field. |
| direct-debit-authorizations.canceled | The state of a Direct Debit Authorization has changed to `CANCELED`. | Only one under `object` field. |
### Direct Debit Payments [#direct-debit-payments]
API: [/v1/direct-debit-payments](/reference/get-direct-debit-payments-id)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| direct-debit-payments.succeeded | The state of a Direct Debit Payment has changed to `SUCCEEDED`. | Only one under `object` field. |
| direct-debit-payments.failed | The state of a Direct Debit Payment has changed to `FAILED`. | Only one under `object` field. |
### Direct Debit Payment Batches [#direct-debit-payment-batches]
API: [/v1/direct-debit-payment-batches](/reference/get-direct-debit-payment-batches)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| direct-debit-payment-batches.submitted | The state of a Direct Debit Payment Batch has changed to `SUBMITTED` after being submitted to the bank successfully. | Only one under `object` field. |
| direct-debit-payment-batches.rejected | The state of a Direct Debit Payment Batch has changed to `FAILED` after being rejected by the bank. | Only one under `object` field. |
### Payments [#payments]
API: [/v1/payments](/reference/get-payments-id)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| payments.succeeded | The state of a Payment has changed to `COMPLETED`. | Only one under `object` field, or one or more under `objects` field. |
| payments.failed | The state of a Payment has changed to `FAILED`. | Only one under `object` field, or one or more under `objects` field. |
#### Maker-checker Payment Flow [#maker-checker-payment-flow]
API: [/v1/payments/:id/approve](/reference/post-payments-id-approve) and [/v1/payments/:id/reject](/reference/post-payments-id-reject)
* When an API key is covered by a maker-checker policy, newly created payments enter a `PENDING_APPROVAL` state and emit a `payments.pending-approval` webhook.
* A separate checker key must then approve or reject the Payment, which emits `payments.approved` or `payments.approval-rejected`.
* A approval window expiry can be defined in the maker-checker policy. If no action is taken before the approval window expires, `payments.approval-expired` will be emitted.
* Approved Payments continue through the normal lifecycle (`payments.succeeded` / `payments.failed`).
| Event | Scenario | Number of objects |
| --- | --- | --- |
| payments.pending-approval | A Payment was created under a maker-checker policy and is awaiting approval. Status is `PENDING_APPROVAL`. The payload includes a `review` object with `requestedBy` and `expiresAt`. | Only one under `object` field. |
| payments.approved | A pending Payment has been approved by a checker. The payload's `review` object includes `approvedBy` and `approvedAt`. Payment will subsequently transition to `SUCCEEDED` after settlement. | Only one under `object` field. |
| payments.approval-rejected | A pending Payment has been rejected by a checker. Status becomes `APPROVAL_REJECTED`. The payload's `review` object includes `rejectedBy`, `rejectedAt`, and `rejectionReason`. | Only one under `object` field. |
| payments.approval-expired | A pending Payment exceeded its approval window without action. Status becomes `APPROVAL_EXPIRED`. | Only one under `object` field. |
### Batch Payments [#batch-payments]
API: [/v1/batch-payments](/reference/get-batch-payments-id)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| payment-batches.submitted | The state of a Batch Payment has changed to `SUBMITTED`. | Only one under `object` field. |
| payment-batches.rejected | The state of a Batch Payment has changed to `FAILED`. | Only one under `object` field. |
Note: this webhook reports only the batch-level status. Each payment's outcome is delivered separately via the `payments.succeeded` and `payments.failed` webhooks , with multiple payments grouped under the objects array (up to 100 per webhook). Examples: [Multiple successful payments](/guides/webhook-examples#payments)
### Tracked QR Payments [#tracked-qr-payments]
API: [/v1/tracked-payment-qr-codes](/reference/list-tracked-payment-qr-codes)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| qr-payments.succeeded | The state of a Tracked QR Payment has changed to `SUCCEEDED`. | Only one under `object` field. |
| qr-payments.failed | The state of a Tracked QR Payment has changed to `FAILED`. | Only one under `object` field. |
### Virtual Accounts [#virtual-accounts]
API: [/v1/virtual-accounts](/reference/get-virtual-accounts)
| Event | Scenario | Number of objects |
| --- | --- | --- |
| virtual-accounts.succeeded | The state of a Virtual Account has changed to `SUCCEEDED`. | Only one under `object` field. |
| virtual-accounts.failed | The state of a Virtual Account has changed to `FAILED`. | Only one under `object` field. |
## Retries [#retries]
You should respond to webhook requests with HTTP 200 status code within 5 seconds. If your webhook
endpoint fails to respond with HTTP 200 within 5 seconds, it will be treated as a failed delivery
and the webhook delivery will be retried over a period of time.
Each subsequent retry will occur with an increasing time interval
([exponential backoff](https://en.wikipedia.org/wiki/Exponential_backoff)). Test mode webhooks will
be retried for up to 4 times over a span of approximately 1 hour and 20 minutes. Live mode webhooks
will be retried for up to 8 times over a span of approximately 5 days and 4 hours.
Due to the distributed nature of our systems and the Internet, we cannot guarantee exactly-once
delivery of our webhooks. That is, you may receive duplicate webhooks. The `id` field can be used
for de-duplication if necessary.
## Appendix [#appendix]
### Sample implementation of webhook signature calculation [#sample-implementation-of-webhook-signature-calculation]
This is a sample implementation of webhook signature calculation Python. You can use it to validate
your own implementation.
```python
import hashlib
import hmac
def calculate_webhook_signature(signing_key, timestamp, raw_body):
message = timestamp + "|" + raw_body
signature = hmac.new(signing_key.encode(), message.encode(), hashlib.sha256)
return signature.hexdigest()
```
Interactive Replit snippets:
* [Python](https://replit.com/@cheeliang-acme/EnchantingDelightfulSoftwareengineer)
* [TypeScript](https://replit.com/@cheeliang-acme/RecklessCuddlySquare)
### Webhook signature test case [#webhook-signature-test-case]
You can test your signature validation implementation with the following test inputs and expected
output.
* Signing key: `3JZqRZ6RvUOEBT92nmNLyA`
* Timestamp: `2023-09-20T12:55:36Z`
* Raw body:
```json
{
"id": "wbh_0EPWZ59TG83M1",
"createdAt": "2024-01-03T01:05:43.401984161Z",
"mode": "LIVE",
"event": "hosted-payments.succeeded",
"object": {
"id": "hpymt_0EPWZ776H01BP",
"status": "SUCCEEDED",
"resultCode": null,
"amount": 420,
"currency": "SGD",
"channel": "APP_IOS",
"method": "PAYLAH",
"returnUrl": "acme://return/123",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0EPWZ776H01BP/submit",
"referenceId": "239555816",
"tokenization": true,
"hostedPaymentMethodId": "hpm_0EPWZDF3FP4TX",
"customerProxy": "XXXX1234",
"createdAt": "2024-01-03T01:05:06.160976Z",
"updatedAt": "2024-01-03T01:05:43.398068573Z"
}
}
```
Expected signature: `e95a0ff6bddd36b309329cec7ca22145ea3c0c7825e089130ec158483aa2538d`
# Acme webhook examples (https://docs.tryacme.com/guides/webhook-examples)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
The examples below have been pretty-formatted for readability. The actual webhook body may be sent
in a more compact form.
## Transactions [#transactions]
Credit transaction landed in bank account:
```json
{
"id": "wbh_0F2J4CZ4D9FZD",
"createdAt": "2024-02-08T06:43:29.522388699Z",
"mode": "LIVE",
"event": "transactions.created",
"object": {
"id": "txn_0F2J4EEQ3SWZG",
"dataSource": "ICN",
"transactionType": "PAYNOW",
"bankReference": "20240208UOVBSGSGBRT8728204",
"description": "Invoice 123",
"customerReference": "Invoice 123",
"remittanceInformation": null,
"additionalInformation": null,
"amount": 420,
"currency": "SGD",
"direction": "CREDIT",
"counterparty": {
"name": "JOHN DOE",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0F2J4N1CTNB5R",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1000420001"
},
"virtualAccountNumber": null,
"transactionDate": "2024-02-08",
"statementId": null,
"createdAt": "2024-02-08T06:43:29.518610893Z",
"updatedAt": "2024-02-08T06:43:29.518610893Z"
}
}
```
Intraday statement received with one or more new transactions:
```json
{
"id": "wbh_0FBVBN8KS1547",
"createdAt": "2024-02-08T06:43:29.522388699Z",
"mode": "LIVE",
"event": "transactions.created",
"objects": [
{
"id": "txn_0FBVBQARMXEPX",
"dataSource": "CAMT052",
"transactionType": "MEPS",
"bankReference": "20240208UOVBSGSGBRT8728204",
"description": "Invoice 123",
"customerReference": "Invoice 123",
"remittanceInformation": null,
"additionalInformation": null,
"amount": 420,
"currency": "SGD",
"direction": "CREDIT",
"counterparty": {
"name": "JOHN DOE",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0F2J4N1CTNB5R",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1000420001"
},
"virtualAccountNumber": null,
"transactionDate": "2024-02-08",
"statementId": null,
"createdAt": "2024-02-08T06:43:29.518610893Z",
"updatedAt": "2024-02-08T06:43:29.518610893Z"
},
{
"id": "txn_0FBVC0JQC4EKE",
"dataSource": "CAMT052",
"transactionType": "GIRO",
"bankReference": "20240208UOVBSGSGBRT8728204",
"description": "Gym Feb 2024",
"customerReference": "Gym FEB 2024",
"remittanceInformation": null,
"additionalInformation": null,
"amount": 420,
"currency": "SGD",
"direction": "DEBIT",
"counterparty": {
"name": "STRONG GYM",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0F2J4N1CTNB5R",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1000420001"
},
"virtualAccountNumber": null,
"transactionDate": "2024-02-08",
"statementId": null,
"createdAt": "2024-02-08T06:43:29.518610893Z",
"updatedAt": "2024-02-08T06:43:29.518610893Z"
}
]
}
```
## Statements [#statements]
End-of-day statement has been processed and the transactions reported in it are now available at
[/v1/transactions](/reference/get-transactions):
```json
{
"id": "wbh_0F2J574HWE0T3",
"createdAt": "2024-02-08T01:30:24.145087173Z",
"mode": "LIVE",
"event": "statements.created",
"object": {
"id": "stmt_0F2J5860EFDGS",
"statementDate": "2024-02-07",
"type": "CAMT.053",
"bankAccount": {
"id": "intacc_0F2J4N1CTNB5R",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1000420001"
},
"createdAt": "2024-02-08T01:30:24.135764249Z",
"updatedAt": "2024-02-08T01:30:24.135764323Z"
}
}
```
## Refunds [#refunds]
Successful Refund:
```json
{
"id": "wbh_0JG1DNT3YJH9C",
"createdAt": "2025-01-13T09:50:25.426288002Z",
"mode": "LIVE",
"event": "refunds.succeeded",
"object": {
"id": "rfnd_0JG1DPYE5WFRE",
"transactionId": "txn_0JG1DQRY85S4F",
"amount": 1240,
"currency": "SGD",
"status": "SUCCEEDED",
"resultCode": null,
"createdAt": "2025-01-13T09:50:20.414585928Z",
"updatedAt": "2025-01-13T09:50:25.421203112Z"
}
}
```
Failed Refund:
```json
{
"id": "wbh_0JG1DT15Y615K",
"createdAt": "2025-01-13T09:50:58.068242142Z",
"mode": "LIVE",
"event": "refunds.failed",
"object": {
"id": "rfnd_0JG1DXBCEW7KW",
"transactionId": "txn_0JG1DY79RB7PK",
"amount": 150,
"currency": "SGD",
"status": "FAILED",
"resultCode": "REQUESTED_REFUND_AMOUNT_EXCEEDS_REFUNDABLE_AMOUNT",
"createdAt": "2025-01-13T09:50:53.053604294Z",
"updatedAt": "2025-01-13T09:50:58.059934341Z"
}
}
```
## Hosted Payments [#hosted-payments]
Successful Hosted Payment:
```json
{
"id": "wbh_0F2J5NXQ0SFT8",
"createdAt": "2024-02-08T06:51:58.806639732Z",
"mode": "LIVE",
"event": "hosted-payments.succeeded",
"object": {
"id": "hpymt_0F2J5PYEZJ09V",
"status": "SUCCEEDED",
"resultCode": null,
"amount": 1250,
"currency": "SGD",
"channel": "APP_ANDROID",
"method": "PAYNOW",
"returnUrl": "rocketshop://paid/12340001",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0F2J5PYEZJ09V/submit",
"referenceId": "12340001",
"tokenization": false,
"hostedPaymentMethodId": null,
"customerProxy": null,
"createdAt": "2024-02-08T06:51:27.967830Z",
"updatedAt": "2024-02-08T06:51:58.800309301Z"
}
}
```
Successful Hosted Payment (FPX):
```json
{
"id": "wbh_0F2J5NXQ0SFT8",
"createdAt": "2024-02-08T06:51:58.806639732Z",
"mode": "LIVE",
"event": "hosted-payments.succeeded",
"object": {
"id": "hpymt_0F2J5PYEZJ09V",
"status": "SUCCEEDED",
"resultCode": null,
"amount": 1250,
"currency": "MYR",
"channel": null,
"method": "FPX_ONLINEBANKING",
"returnUrl": "rocketshop://paid/12340001",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0F2J5PYEZJ09V/submit",
"referenceId": "0F2J5PYEZJ09V",
"tokenization": false,
"hostedPaymentMethodId": null,
"customerProxy": null,
"payer": {
"firstName": "John",
"lastName": "Doe",
"email": "test@gmail.com",
"phone": "+60125127643"
},
"paymentInformation": [
{
"itemReference": "ID-1",
"itemName": "DEPOSIT",
"unitAmount": 1250,
"numberOfUnits": 1,
"totalTaxAmount": 1250
}
],
"expiredAt": "2024-02-08T07:06:27.967830Z",
"createdAt": "2024-02-08T06:51:27.967830Z",
"updatedAt": "2024-02-08T06:51:58.800301Z"
}
}
```
## Hosted Refunds [#hosted-refunds]
Successful Hosted Refund:
```json
{
"id": "wbh_0F2J601GAHE4B",
"createdAt": "2024-02-08T06:44:36.366190544Z",
"mode": "LIVE",
"event": "hosted-refunds.succeeded",
"object": {
"id": "hrfnd_0F2J614SGZHVP",
"status": "SUCCEEDED",
"amount": 420,
"currency": "SGD",
"hostedPaymentId": "hpymt_0F2J633MQT94K",
"referenceId": "12340005",
"createdAt": "2024-02-08T06:44:34.233697504Z",
"updatedAt": "2024-02-08T06:44:36.353554901Z"
}
}
```
## Direct Debit Authorizations [#direct-debit-authorizations]
Successful Direct Debit Authorization:
```json
{
"id": "wbh_0F2J6ARSYY9JC",
"createdAt": "2024-02-07T13:06:58.325593865Z",
"mode": "LIVE",
"event": "direct-debit-authorizations.succeeded",
"object": {
"id": "dda_0F2J6BRASA16R",
"billReferenceNumber": "ROCKETCUST123",
"payerSwiftBic": "DBSSSGSGXXX",
"payerBankCode": null,
"payerSegment": "RETAIL",
"payerName": "JOHN DOE",
"payerBankAccountNumber": "9999429999",
"status": "SUCCEEDED",
"failureReason": null,
"underlyingErrorMessage" : null,
"startDate": "2024-02-07",
"maxAmount": 100000,
"maxAmountCurrency": "SGD",
"payerAuthorizedMaxAmount": 100000,
"endDate": null,
"authorizeUrl": "https://egiro.rocketbank.com/create?ref=123001"
"cancelUrl": null,
"returnUrl": "https://rocketshop.com/egiro-return",
"cancelReturnUrl": null,
"createdAt": "2024-02-07T13:03:36.065141Z",
"updatedAt": "2024-02-07T13:06:58.318189595Z"
}
}
```
## Direct Debit Payments [#direct-debit-payments]
Successful Direct Debit Payment:
```json
{
"id": "wbh_0F2J756ANHF1T",
"createdAt": "2024-01-31T05:49:56.143613113Z",
"mode": "LIVE",
"event": "direct-debit-payments.succeeded",
"object": {
"id": "dpymt_0F2J767QNWY48",
"type": "FAST",
"amount": 1250,
"currency": "SGD",
"directDebitAuthorizationId": "dda_0F2J7879XXDP1",
"customerReference": "FEBSUBFEE",
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorMessage": null,
"createdAt": "2024-01-31T05:49:54.557605921Z",
"updatedAt": "2024-01-31T05:49:56.135109989Z"
}
}
```
## Direct Debit Payment Batches [#direct-debit-payment-batches]
Direct Debit Payment Batch submitted:
```json
{
"id": "wbh_0GFWFD8Z10K4X",
"createdAt": "2026-05-29T02:20:07.288188Z",
"mode": "LIVE",
"event": "direct-debit-payment-batches.submitted",
"object": {
"id": "bddp_0GFWFD7V10GX9",
"type": "DIRECT_DEBIT",
"paymentDate": "2026-05-30",
"currency": "SGD",
"status": "SUBMITTED",
"metadata": {
"fileName": "ddp_batch_20260529.xml"
},
"createdAt": "2026-05-29T02:20:06.995Z",
"updatedAt": "2026-05-29T02:20:07.288097Z"
}
}
```
Direct Debit Payment Batch rejected:
```json
{
"id": "wbh_0GFWFD9R10K5Y",
"createdAt": "2026-05-29T02:25:11.402113Z",
"mode": "LIVE",
"event": "direct-debit-payment-batches.rejected",
"object": {
"id": "bddp_0GFWFD7V10GX9",
"type": "DIRECT_DEBIT",
"paymentDate": "2026-05-30",
"currency": "SGD",
"status": "FAILED",
"metadata": {
"fileName": "ddp_batch_20260529.xml"
},
"createdAt": "2026-05-29T02:20:06.995Z",
"updatedAt": "2026-05-29T02:25:11.401874Z"
}
}
```
## Payments [#payments]
For failed payments the event is `payments.failed`, the contents (Payment object) are the same.
Successful payment (single):
```json
{
"id": "wbh_0G4A8SKQ2W7T1",
"createdAt": "2026-05-25T10:00:00.000Z",
"mode": "LIVE",
"event": "payments.succeeded",
"object": {
"id": "pymt_0G4A8SE26W65V",
"type": "FAST",
"amount": 150000,
"currency": "SGD",
"customerReference": "INV-20260525-001",
"senderAccountId": "intacc_0CQ74R1XD8Y0Y",
"receiver": {
"name": "John Tan",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "7654321098",
"localRoutingIdentifier": null,
"proxyType": null,
"proxyValue": null,
"address": null
},
"paymentDate": null,
"bankChargeBearer": null,
"instructionForSenderBank": null,
"paymentDetails": "Payment for Invoice INV-001",
"currencyExchange": null,
"senderAccountCurrency": "SGD",
"status": "COMPLETED",
"resultCode": null,
"underlyingErrorMessage": null,
"paymentAdviceEmails": null,
"bankReference": "FT241290AB12345678",
"createdAt": "2026-05-25T09:59:50.000Z",
"updatedAt": "2026-05-25T10:00:00.000Z",
"review": null
}
}
```
Successful payments (batch) - Multiple Successful payments within an objects array :
* Batch payment webhooks are delivered with the objects array (plural), triggered when the bank's ACK file is processed.
* Each webhook carries up to 100 payments; batches larger than 100 are split across multiple webhooks.
* Partial settlements — where only some payments in a batch are confirmed in a given ACK cycle — updates for those payments will be delivered first, with the remainder arriving in subsequent webhooks as later ACK files are processed.
* All payments inside an objects array belong to the same batch, but you should still loop through the array and process each payment independently using its id rather than relying on order or position.
```json
{
"id": "wbh_0GFWFKQTD0HV0",
"createdAt": "2024-06-28T02:21:00.243432Z",
"mode": "LIVE",
"event": "payments.succeeded",
"objects": [
{
"id": "pymt_0G4A8SE26W65V",
"type": "FAST",
"amount": 150000,
"currency": "SGD",
"customerReference": "INV-20260525-001",
"senderAccountId": "intacc_0CQ74R1XD8Y0Y",
"receiver": {
"name": "John Tan",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "7654321098",
"localRoutingIdentifier": null,
"proxyType": null,
"proxyValue": null,
"address": null
},
"paymentDate": null,
"bankChargeBearer": null,
"instructionForSenderBank": null,
"paymentDetails": "Payment for Invoice INV-001",
"currencyExchange": null,
"senderAccountCurrency": "SGD",
"status": "COMPLETED",
"resultCode": null,
"underlyingErrorMessage": null,
"paymentAdviceEmails": null,
"bankReference": null,
"createdAt": "2026-05-25T09:59:50.000Z",
"updatedAt": "2026-05-25T10:00:00.000Z",
"review": null
},
{
"id": "pymt_0GFWFD7V90GQW",
"type": "FAST",
"amount": 100,
"currency": "SGD",
"customerReference": "CR0FWY9XQNZQ1N3",
"senderAccountId": "intacc_0GFWFD7T10GA9",
"receiver": {
"name": "OTHER PARTY",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "000000002",
"localRoutingIdentifier": null,
"proxyType": null,
"proxyValue": null,
"address": null
},
"paymentDate": null,
"bankChargeBearer": null,
"instructionForSenderBank": null,
"paymentDetails": "Payment for Invoice INV-001",
"currencyExchange": null,
"senderAccountCurrency": "SGD",
"status": "COMPLETED",
"resultCode": null,
"underlyingErrorMessage": null,
"paymentAdviceEmails": null,
"bankReference": null,
"createdAt": "2026-05-25T09:59:50.000Z",
"updatedAt": "2026-05-25T10:00:00.000Z"
}
]
}
```
Maker-checker Payment Flow - Payment pending approval:
```json
{
"id": "wbh_0H2K3L4M5N6P7",
"createdAt": "2026-05-29T03:41:28.376879Z",
"mode": "LIVE",
"event": "payments.pending-approval",
"object": {
"id": "pymt_0H2K3L3X5N5W6",
"type": "FAST",
"amount": 11000,
"currency": "SGD",
"customerReference": "INV-2026-0429",
"senderAccountId": "intacc_0CQ74R1XD8Y0Y",
"receiver": {
"name": "Undisclosed",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "123456789"
},
"senderAccountCurrency": "SGD",
"paymentDetails": "Invoice payment",
"status": "PENDING_APPROVAL",
"review": {
"requestedBy": "apik_0CQ74RAB9C2X1",
"expiresAt": "2026-05-30T03:41:26.929745Z",
"approvedAt": null,
"approvedBy": null,
"rejectedAt": null,
"rejectedBy": null,
"rejectionReason": null
},
"createdAt": "2026-05-29T03:41:26.929745Z",
"updatedAt": "2026-05-29T03:41:26.929745Z"
}
}
```
Maker-checker Payment Flow - Payment approved:
```json
{
"id": "wbh_0H2K4Q5R6S7T8",
"createdAt": "2026-05-29T04:12:55.110044Z",
"mode": "LIVE",
"event": "payments.approved",
"object": {
"id": "pymt_0H2K3L3X5N5W6",
"type": "FAST",
"amount": 11000,
"currency": "SGD",
"customerReference": "INV-2026-0429",
"senderAccountId": "intacc_0CQ74R1XD8Y0Y",
"receiver": {
"name": "Undisclosed",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "123456789"
},
"senderAccountCurrency": "SGD",
"paymentDetails": "Invoice payment",
"status": "PENDING_APPROVAL",
"review": {
"requestedBy": "apik_0CQ74RAB9C2X1",
"expiresAt": "2026-05-30T03:41:26.929745Z",
"approvedAt": "2026-05-29T04:12:54.882011Z",
"approvedBy": "apik_0CQ74RCD8E4Z3",
"rejectedAt": null,
"rejectedBy": null,
"rejectionReason": null
},
"createdAt": "2026-05-29T03:41:26.929745Z",
"updatedAt": "2026-05-29T04:12:54.882011Z"
}
}
```
Note: status remains `PENDING_APPROVAL` at this point. A separate `payments.succeeded` (or `payments.failed`) webhook will follow once the underlying transfer settles.
Maker-checker Payment Flow - Payment approval rejected:
```json
{
"id": "wbh_0H2K5U6V7W8X9",
"createdAt": "2026-05-29T04:30:12.554302Z",
"mode": "LIVE",
"event": "payments.approval-rejected",
"object": {
"id": "pymt_0H2K3L3X5N5W6",
"type": "FAST",
"amount": 11000,
"currency": "SGD",
"customerReference": "INV-2026-0429",
"senderAccountId": "intacc_0CQ74R1XD8Y0Y",
"receiver": {
"name": "Undisclosed",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "123456789"
},
"senderAccountCurrency": "SGD",
"paymentDetails": "Invoice payment",
"status": "APPROVAL_REJECTED",
"review": {
"requestedBy": "apik_0CQ74RAB9C2X1",
"expiresAt": "2026-05-30T03:41:26.929745Z",
"approvedAt": null,
"approvedBy": null,
"rejectedAt": "2026-05-29T04:30:12.231019Z",
"rejectedBy": "apik_0CQ74RCD8E4Z3",
"rejectionReason": "Beneficiary not on approved vendor list"
},
"createdAt": "2026-05-29T03:41:26.929745Z",
"updatedAt": "2026-05-29T04:30:12.231019Z"
}
}
```
Maker-checker Payment Flow - Payment approval expired:
```json
{
"id": "wbh_0H2L6Y7Z8A9B0",
"createdAt": "2026-05-30T03:41:30.001284Z",
"mode": "LIVE",
"event": "payments.approval-expired",
"object": {
"id": "pymt_0H2K3L3X5N5W6",
"type": "FAST",
"amount": 11000,
"currency": "SGD",
"customerReference": "INV-2026-0429",
"senderAccountId": "intacc_0CQ74R1XD8Y0Y",
"receiver": {
"name": "Undisclosed",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "123456789"
},
"senderAccountCurrency": "SGD",
"paymentDetails": "Invoice payment",
"status": "APPROVAL_EXPIRED",
"review": {
"requestedBy": "apik_0CQ74RAB9C2X1",
"expiresAt": "2026-05-30T03:41:26.929745Z",
"approvedAt": null,
"approvedBy": null,
"rejectedAt": null,
"rejectedBy": null,
"rejectionReason": null
},
"createdAt": "2026-05-29T03:41:26.929745Z",
"updatedAt": "2026-05-30T03:41:30.001284Z"
}
}
```
## Batch Payments [#batch-payments]
For rejected batches the event is `payment-batches.rejected`, the contents (Batch Payment object) are the same.
Batch payment submitted:
```json
{
"id": "wbh_0GFWFD8Z10K4X",
"createdAt": "2024-06-28T02:20:07.288188Z",
"mode": "LIVE",
"event": "payment-batches.submitted",
"object": {
"id": "bpmt_0GFWFD7V10GX9",
"type": "FAST",
"paymentDate": "2024-04-30",
"senderAccountId": "intacc_0GFWFD7T10GA9",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"status": "SUBMITTED",
"createdAt": "2024-06-28T02:20:06.995Z",
"updatedAt": "2024-06-28T02:20:07.288097Z"
}
}
```
## Tracked QR Payments [#tracked-qr-payments]
For failed tracked qr payments the event is `qr-payments.failed`, the contents (Tracked QR Payment object) are the same.
Successful Tracked QR Payment:
```json
{
"id": "wbh_0NB65NFCFJWH1",
"createdAt": "2025-10-23T07:34:31.779284847Z",
"mode": "LIVE",
"event": "qr-payments.succeeded",
"object": {
"id": "qrpymt_0NB3YB2P791T3",
"status": "SUCCEEDED",
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "100312345",
"amount": 10,
"currency": "SGD",
"expirySeconds": 900,
"transactionReference": "QR-123",
"amountEditable": false,
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/sample.png",
"bankReference": "1112127058552804C100000000000",
"statusSource": "txn_0NB3RNT8ZJE0V",
"createdAt": "2025-10-23T07:21:19.281Z",
"updatedAt": "2025-10-23T07:34:31.767Z"
}
}
```
## Virtual Account [#virtual-account]
For failed virtual account creation the event is `virtual-accounts.failed`, the contents (Virtual Accounts object) are the same.
Successful Virtual Account Creation:
```json
{
"id": "wbh_0NB61NFAFJWP1",
"createdAt": "2025-10-15T05:50:07.779284847Z",
"mode": "LIVE",
"event": "virtual-accounts.succeeded",
"object": {
"id": "vacc_0N8G124B1JMS9",
"virtualAccountNumber": "8859991234",
"virtualAccountName": "ACME VA 1",
"accountDetails": {
"alias": "acme-va1",
"type": "PERSONAL",
"idType": "PASSPORT",
"idNumber": "A30235519",
"idCountry": "MY",
"address": {
"line1": "1 Main St",
"line2": "Some Building",
"city": "Singapore",
"postalCode": "570308",
"state": "Singapore",
"country": "SG"
},
"dateOfIncorporation": null,
"countryOfIncorporation": null,
"nationality": "MY",
"dateOfBirth": "1991-02-01"
},
"status": "ACTIVE",
"resultCode": null,
"createdAt": "2025-10-15T05:50:07.441Z",
"updatedAt": "2025-10-15T05:50:09.149Z"
}
}
```
# Bank account transaction and statement notifications (https://docs.tryacme.com/guides/transaction-notifications)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
## Overview [#overview]
This table summarizes the key differences between the three sources of transaction information.
| | Transaction notifications | Intraday statements | End-of-day statements |
| --- | --- | --- | --- |
| Timeliness | Real-time (< 1 minute) or near real-time (< 1 hour) | Multiple times a day (e.g. hourly) | Once a day |
| Retrieve with [/v1/transactions](/reference/get-transactions) | Yes | Yes | Yes |
| `dataSource` field | DBS: `ICN`, `IDN`
Citibank: `CAMT054` | DBS: `CAMT052` | DBS: `CAMT.053`
Citibank: `CAMT053` |
| Number of webhooks | One per transaction | One or more per statement | One per statement |
| Webhook event name | `transactions.created` | `transactions.created` | `statements.created` |
| Webhook body | Single transaction under `object` field | Array of transactions under `objects` field | Statement ID under `object.id` field.
Retrieve transactions with `GET /v1/transactions` |
## Transaction notifications [#transaction-notifications]
Your bank may provide real-time or near real-time transaction notifications when new transactions
land in your bank accounts. If you are subscribed to transaction notifications, you can retrieve the
transaction details with [/v1/transactions](/reference/get-transactions).
New transactions are available in our API immediately after Acme has received and processed the
transaction notifications from your bank.
Transaction notifications are available for the following banks, and can be identified by the
`dataSource` field. These transaction notifications may not cover all transaction types. Reach out
to [Acme](mailto:support@tryacme.com) for more details.
* DBS: `dataSource=ICN` or `dataSource=IDN`
* Citibank: `dataSource=CAMT054`
### Retrieving transaction details [#retrieving-transaction-details]
You can retrieve transaction details with
[/v1/transactions](/reference/get-transactions).
Request example:
```
GET /v1/transactions?order=DESC&limit=10
```
Response example:
```json
{
"data": [
{
"id": "txn_0CQ8BSQEMZKBB",
"dataSource": "ICN",
"transactionType": "PAYNOW",
"bankReference": "20231011OCBCSGSGBRT1801732",
"description": "Invoice 123",
"customerReference": "Invoice 123",
"remittanceInformation": null,
"additionalInformation": null,
"amount": 4200,
"currency": "SGD",
"direction": "CREDIT",
"counterparty": {
"name": "John Doe",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0DW79C1K6Z2Y9",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "9876543210"
},
"virtualAccountNumber": null,
"transactionDate": "2023-06-19",
"statementId": null,
"createdAt": "2023-06-19T07:37:13.845549Z",
"updatedAt": "2023-06-19T07:37:13.845549Z"
}
],
"hasMore": false
}
```
Use the `after` query parameter with the last transaction ID to retrieve newer transactions, if
there are any.
Request example:
```
GET /v1/transactions?order=DESC&limit=10&after=txn_0CQ8BSQEMZKBB
```
If a credit transaction was sent to a Virtual Account number that you own, the Virtual Account
number will be set in the `virtualAccountNumber` field.
Response example:
```json
{
"id": "txn_0CQ8BSQEMZKBB",
"bankAccount": {
"id": "intacc_0DW79C1K6Z2Y9",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "9876543210"
},
"virtualAccountNumber": "885123000456",
"...": "..."
}
```
### Transaction webhooks [#transaction-webhooks]
If you have [registered a webhook endpoint](/guides/webhooks#initial-setup) with Acme, you will receive
webhooks for these transactions with the event name `transactions.created`.
Webhook body example:
```json
{
"id": "wbh_0DW0YCJGWHWH2",
"mode": "LIVE",
"event": "transactions.created",
"createdAt": "2023-10-11T08:41:56.673471Z",
"object": {
"id": "txn_0DW0Y1JXMJQR8",
"dataSource": "ICN",
"transactionType": "PAYNOW",
"bankReference": "20230911UOVBSGSGBRT3173409",
"description": "Invoice 123",
"customerReference": "Invoice 123",
"remittanceInformation": null,
"additionalInformation": null,
"amount": 2104,
"currency": "SGD",
"direction": "CREDIT",
"counterparty": {
"name": "John Doe",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0CSETTM8Y9SJ9",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "9876543210"
},
"virtualAccountNumber": null,
"transactionDate": "2023-10-11",
"statementId": null,
"createdAt": "2023-10-11T08:41:56.594852Z",
"updatedAt": "2023-10-11T08:41:56.594852Z"
}
}
```
## Intraday statements [#intraday-statements]
Your bank may provide intraday statements. These statements are available multiple times each day,
and each intraday statement covers new transactions since the previous intraday statement.
If you are subscribed to intraday statements, Acme will send webhooks for the **new** transactions
reported in the intraday statements. Transactions that have already arrived via transaction
notifications will not be processed again. These transactions will also be available at
[/v1/transactions](/reference/get-transactions).
Intraday statements are available for the following banks, and can be identified by the
`dataSource` field.
* DBS: `dataSourc=CAMT052`
Intraday statements may contain a large number of transactions. Instead of a single transaction
object in the webhook's `object` field, you will find one or more transaction objects under the
`objects` field. Each webhook will contain up to 10 transactions (this limit is subjected to future
changes). Hence you may receive multiple webhooks for each intraday statement that Acme processes.
Webhook body example:
```json
{
"id": "wbh_0DW0YCJGWHWH2",
"mode": "LIVE",
"event": "transactions.created",
"createdAt": "2023-10-11T08:41:56.673471Z",
"objects": [
{
"id": "txn_0DW0Y1JXMJQR8",
"dataSource": "CAMT052",
"...": "..."
},
{
"id": "txn_0EH0Y1NX8J6R0",
"dataSource": "CAMT.052",
"...": "..."
}
]
}
```
## End-of-day statements [#end-of-day-statements]
End-of-day statements (EOD) from your bank cover all new transactions in your bank since the
previous EOD statement. Each EOD statement typically covers one day's worth of transactions.
When Acme processes these EOD statements, only new transactions (not already received through
transaction notification or intraday statements) will be ingested. EOD statements are available for
the following banks, and can be identified by the `dataSource` field.
* DBS: `dataSourc=CAMT.053`
* Citibank: `dataSource=CAMT053`
### Retrieving new transactions [#retrieving-new-transactions]
New transactions from EOD statements can be retrieved at
[/v1/transactions](/reference/get-transactions). You can filter for them
using the `dataSource` query parameter.
Request example:
```
GET /v1/transactions?dataSource=CAMT.053
```
### Statement webhooks [#statement-webhooks]
If you have registered a webhook endpoint with Acme, you will receive a webhook with the event name
`statements.created` for each of your accounts when its statement has been processed. EOD statements
may contain a large number of transactions. Hence Acme does not send `transactions.created` webhooks
for these transactions.
Webhook body example:
```json
{
"id": "wbh_0DW112C6G4FWG",
"mode": "LIVE",
"event": "statements.created",
"createdAt": "2023-10-11T08:04:50.673471589Z",
"object": {
"id": "stmt_0DW113CKX3S0V",
"statementDate": "2023-10-10",
"type": "CAMT.053",
"bankAccount": {
"id": "intacc_0DW114DZWY7WJ",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1234567890"
},
"createdAt": "2023-10-11T08:04:50.943436Z",
"updatedAt": "2023-10-11T08:04:50.943436Z"
}
}
```
In response to this webhook, you can retrieve all the transactions reported in this statement
with [/v1/transactions](/reference/get-transactions) by filtering with the
`statementId` query parameter. Specify the statement ID found in the `object.id` field of the
webhook message.
Request:
```
GET /v1/transactions?statementId=stmt_0DW113CKX3S0V
```
The response will include transactions previously received through transactions notifications and
intraday statements. To exclude them, use the filter `dataSource=CAMT.053` for DBS or
`dataSource=CAMT053` for Citibank.
Request example:
```
GET /v1/transactions?statementId=stmt_0DW113CKX3S0V&dataSource=CAMT.053
```
### Statements API [#statements-api]
Use the [/v1/statements](/reference/get-statements-id) API to look up the
details of a statement.
Request example:
```
GET /v1/statements/stmt_0DW7JWV8A80EM
```
Response example:
```json
{
"id": "stmt_0DW7JWV8A80EM",
"statementDate": "2023-10-11",
"type": "CAMT.053",
"bankAccount": {
"id": "intacc_0DW114DZWY7WJ",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1234567890"
},
"createdAt": "2023-10-11T04:19:44.147038Z",
"updatedAt": "2023-10-11T04:19:44.147038Z"
}
```
You can retrieve the list of statements available to you with the /v1/statements API.
Request example:
```
GET /v1/statements?order=DESC&limit=10
```
Response example:
```json
{
"data": [
{
"id": "stmt_0DW7JWV8A80EM",
"statementDate": "2023-10-11",
"type": "CAMT.053",
"bankAccount": {
"id": "intacc_0CNMTDA6BS8BC",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "1234567890"
},
"createdAt": "2023-10-11T04:19:44.147038Z",
"updatedAt": "2023-10-11T04:19:44.147038Z"
}
],
"hasMore": false
}
```
The `statementDateSince` and `statementDateUntil` query parameters can be used to narrow down the
results.
Request example:
```
GET /v1/statements?statementDateSince=2023-09-15
```
## Deduplication across different data sources [#deduplication-across-different-data-sources]
The same transaction may be reported multiple times. For example, once as a transaction
notification, again in the next intraday statement, and finally in the EOD statement. The
transaction will only show up once in /v1/transactions, and Acme will only send one
`transactions.created` webhook for it.
Acme does this by identifying the same transactions across all data sources: transaction
notifications, intraday statements, and EOD statements.
It is not uncommon for transactions in statements to be missing important fields (e.g. customer
reference), or have certain fields altered (e.g. symbols may be replaced with spaces). In such
scenarios we may fail to match them with previously received transactions, and consequently
double-report them in /v1/transactions (as well as through webhooks). Please reach out to
Acme at [support@tryacme](mailto:support@tryacme.com) when you notice such duplicates, and we will
improve the deduplication logic where possible.
## Implementation guides [#implementation-guides]
### Combining multiple data sources [#combining-multiple-data-sources]
#### Transaction notifications and intraday statements [#transaction-notifications-and-intraday-statements]
You will receive one `transactions.created` webhook message for each new transaction from your
bank's transaction notifications.
If you are subscribed to intraday statements, you will also receive `transactions.created` webhooks
for new transactions in the intraday statements. This excludes transactions already reported by
transaction notifications.
1. Implement a webhook handler for `transactions.created` events.
2. Each webhook message contains either exactly one transaction in the `object` field, or multiple
transactions within an array in the `objects` field.
3. As webhooks are not guaranteed to be delivered once-and-only-once, use the transaction object IDs
(e.g. `txn_0FD6S8C7YD1H8`) to detect duplicate webhooks.
#### End-of-day statements [#end-of-day-statements-1]
When an end-of-day (EOD) statement has been processed by Acme, you will be notified by a
`statements.created` webhook. Use the /v1/transactions API to retrieve new transactions from this
EOD statement.
1. Implement a webhook handler for `statements.created` events.
2. Each webhook message contains exactly one statement object in the `object` field corresponding to
one EOD statement.
3. Use the statement object ID (e.g. `stmt_0FD6WQVHFM23Q`) to retrieve transactions in the EOD
statement via the /v1/transactions API. Use the `dataSource=CAMT.053` query parameter to exclude
transactions already reported by transaction notifications and intraday statements.
```
GET /v1/transactions?statementId=stmt_0FD6WQVHFM23Q&dataSource=CAMT.053&order=DESC&limit=10
```
### Enabling intraday statements [#enabling-intraday-statements]
If you are currently consuming only transaction notifications and EOD statements, and your bank has
enabled intraday statements, you can start consuming intraday statements by following the strategy
below.
1. **New**: Ensure that your code is able to handle a `dataSource` field with the new value
`CAMT052` (for DBS intraday statements).
2. In the webhook handler for `transactions.created` event:
1. If the webhook body has an `object` field, process it as a single transaction in the same way
as before.
2. **New**: If the webhook body has an `objects` field instead, iterate through the array and
process each transaction object.
3. In the webhook handler for `statements.created` event:
1. Retrieve all new transactions (not previously reported through notifications and intraday
statements) using:
```
GET /v1/transactions?statementId=stmt_...&dataSource=CAMT.053
```
2. **Optional**: Retrieve the transactions previously processed in Step 2b using:
```
GET /v1/transactions?statementId=stmt_...&dataSource=CAMT052
```
1. For each transaction, determine if it has already been successfully processed in Step 2b.
Otherwise process it.
2. This step can be removed once you are confident that Step 2b is correctly handling webhooks
containing multiple transactions.
4. Once the changes above are in place, contact Acme
([support@tryacme.com](mailto:support@tryacme.com)) to enable intraday statements for your
Acme API account.
# Acme Zand Bank UAE Transactions (https://docs.tryacme.com/guides/zand-ae-transactions)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
This describes how Acme categorizes transactions on Zand Bank UAE accounts in the
[Transactions API](/reference/get-transactions), and how the transaction `transactionType`
relates to the payment `type` you specify when [creating a payment](/guides/zand-ae-payments).
Zand Bank does not provide an explicit payment rail / transaction type on its transaction
notifications or account statements. Acme derives the `transactionType` of each transaction from
the information the bank does provide using the rules documented on this page.
## Payment Type vs Transaction Type [#payment-type-vs-transaction-type]
* **Payments API** (`POST /v1/payments`): you specify the payment `type` to choose the rail a
payment is sent through. For Zand, the allowed values are `BKTR`, `UAE_FTS`, `UAE_IBFT` and
`TT` — see [Acme Zand Bank UAE Payments (API)](/guides/zand-ae-payments).
* **Transactions API** (`GET /v1/transactions`): every transaction reported on your account retrieved from multiple sources including incoming credits, outgoing debits, and bank-generated entries such as fees and
interest — carries a `transactionType` describing the rail the money moved through.
The two map to each other as follows:
| Payment `type` (Payments API) | Transaction `transactionType` (Transactions API) | Underlying Payment Rails |
| --- | --- | --- |
| `BKTR` | `BKTR` | Book transfer between two Zand Bank accounts |
| `UAE_FTS` | `FTS` | The UAE Funds Transfer System (FTS) is the Central Bank of the UAE's core real-time gross settlement (RTGS) network. Zand automatically route the transaction to FTS if amount > 50,000 AED. |
| `UAE_IBFT` | `IBFT` | Instant Payment Platform (IPP) / Immediate Payment Instructions (IPI) or AANI. Zand autoamtically route the transaction to IPI if amount ≤ 50,000 AED |
| `TT` | `TT` | Telegraphic Transfer — cross-border international SWIFT transfer |
| — | `OTHERS` | Bank-generated entries (fees, VAT on fees, interest) and any record Acme cannot categorize as a specific rail. |
## Categorization rules [#categorization-rules]
The bank transactions reach Acme through two sources, and each source provides different information,
so the categorization rules differ.
### From Inbound Credit Notifications [#from-inbound-credit-notifications]
For credit transactions received through Zand's credit notifications webhook, the
`transactionType` is derived from the notification event type, the counterparty IBANs, and the
amount. The conditions are evaluated in order:
| `dataSource` | Condition | `transactionType` |
| --- | --- | --- |
| ICN | Both parties are Zand Bank accounts (IBAN bank code `096`) | `BKTR` |
| ICN | International event types `INCOMING_INTERNATIONAL_TRANSACTION_STATUS` | `TT` |
| ICN | Domestic inter-bank event types `INCOMING_DOMESTIC_TRANSACTION_STATUS` & amount > 50,000 AED | `FTS` |
| ICN | Domestic inter-bank event types `INCOMING_DOMESTIC_TRANSACTION_STATUS` & amount ≤ 50,000 AED | `IBFT` |
**Example payload**:
An Incoming book transfer from a credit notification, categorized as `BKTR`:
```json
{
"data": [
{
"id": "txn_0QN6ZF3MGNNQF",
"dataSource": "ICN",
"transactionType": "BKTR",
"transactionStatus": "BOOKED",
"bankReference": "D7811010XXXXXXXX",
"transactionReferences": [
{
"dataSource": "ICN",
"name": "channelRefId",
"value": "D7811010XXXXXXXX"
},
{
"dataSource": "ICN",
"name": "instructionIdentification",
"value": ""
}
],
"description": "Incoming Transfer within Zand Received",
"customerReference": "",
"remittanceInformation": "UUID",
"additionalInformation": "OpenFX - ",
"amount": 200000000,
"currency": "AED",
"direction": "CREDIT",
"counterparty": {
"name": "",
"bank": null,
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0PWZ0XWTR3S8Q",
"bank": "ZANDAEAAXXX",
"bankAccountNumber": "REDACTED"
},
"virtualAccountNumber": null,
"transactionDate": "2026-06-10",
"bookingDate": {
"date": "2026-06-10",
"time": "18:12:51.908"
}
}
]
}
```
### From Account Statement Inquiry [#from-account-statement-inquiry]
For transactions received through Zand's account statement inquiry, the `transactionType` is derived from
the statement record's description and the amount:
| `dataSource` | Transaction `description` | Transaction `amount` | `transactionType` |
| --- | --- | --- | --- |
| RECON | `Incoming transfer within Zand Bank`, `Incoming Transfer within Zand Received`, `Outgoing Transfer within Zand`, `Outgoing transfer within Zand Bank` | — | `BKTR` |
| RECON | `International Transfer`, `Outgoing AED Remittance`, `Incoming AED Remittance`, `Outgoing Foreign Currency Remittance` | — | `TT` |
| RECON | `Domestic Transfer`, `Local Transfer` | > 50,000 AED | `FTS` |
| RECON | `Domestic Transfer`, `Local Transfer`, `Instant Payment`, `Real-time Payment` | ≤ 50,000 AED | `IBFT` |
| RECON | `Outward Local Remittance Fee` | — | `OTHERS` |
| RECON | `{N}% VAT On Fee` (e.g. `5% VAT On Fee`) | — | `OTHERS` |
| RECON | null / blank / unrecognized (e.g. interest calculation) | — | `OTHERS` |
Records that Acme does not recognize are labelled `OTHERS` and logged on Acme side for review, so
new description patterns can be added to the categorization over time.
**Example payload**:
An outgoing cross-border transfer debitted from your account, categorized as `TT`:
```json
{
"data": [
{
"id": "txn_0QMT893PK4MP7",
"dataSource": "RECON",
"transactionType": "TT",
"transactionStatus": "BOOKED",
"bankReference": "C0261032XXXXXXXX",
"transactionReferences": [
{
"dataSource": "RECON",
"name": "channelRefId",
"value": "C0261032XXXXXXXX"
},
{
"dataSource": "RECON",
"name": "instructionIdentification",
"value": "C0261032XXXXXXXX"
},
{
"dataSource": "RECON",
"name": "partType",
"value": "Main"
},
{
"dataSource": "RECON",
"name": "Description",
"value": "Outgoing AED Remittance"
},
{
"dataSource": "RECON",
"name": "BeneficiaryDetails",
"value": " "
}
],
"description": "Outgoing AED Remittance",
"customerReference": "C0261032XXXXXXXX",
"remittanceInformation": null,
"additionalInformation": "Additional Info ",
"amount": 1090000,
"currency": "AED",
"direction": "DEBIT",
"counterparty": {
"name": "",
"bank": null,
"bankAccountNumber": ""
},
"bankAccount": {
"id": "intacc_0PWZ0XRXQ4WJ2",
"bank": "ZANDAEAAXXX",
"bankAccountNumber": "REDACTED"
},
"virtualAccountNumber": null,
"transactionDate": "2026-06-10",
"bookingDate": {
"date": "2026-06-10",
"time": "18:12:51.908"
}
}
]
}
```
Bank charges associated with the transaction above with a different `id` but the same `bankReference`, categorized as `OTHERS`:
```json
{
"data": [
{
"id": "txn_0QMT893R34DSW",
"dataSource": "RECON",
"transactionType": "TT",
"transactionStatus": "BOOKED",
"bankReference": "C0261032XXXXXXXX",
"transactionReferences": [
{
"dataSource": "RECON",
"name": "channelRefId",
"value": "C0261032XXXXXXXX"
},
{
"dataSource": "RECON",
"name": "instructionIdentification",
"value": "C0261032XXXXXXXX"
},
{
"dataSource": "RECON",
"name": "partType",
"value": "Main"
},
{
"dataSource": "RECON",
"name": "Description",
"value": "Outward International Remittance Fee"
},
{
"dataSource": "RECON",
"name": "BeneficiaryDetails",
"value": " "
}
],
"description": "Outward International Remittance Fee",
"customerReference": "C0261032XXXXXXXX",
"remittanceInformation": null,
"additionalInformation": "Outward International Remittance Fee",
"amount": 500,
"currency": "AED",
"direction": "DEBIT",
"counterparty": {
"name": null,
"bank": null,
"bankAccountNumber": null
},
"bankAccount": {
"id": "intacc_0PWZ0XRXQ4WJ2",
"bank": "ZANDAEAAXXX",
"bankAccountNumber": "REDACTED"
},
"virtualAccountNumber": null,
"transactionDate": "2026-06-10",
"bookingDate": {
"date": "2026-06-10",
"time": "18:12:51.908"
}
}
]
}
```
# Special Test Mode Values (https://docs.tryacme.com/guides/special-test-mode-values)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
In test mode, you may specify some special values to trigger some common scenarios.
## Payments [#payments]
In the test mode for the Payments (and Batch Payments) API, these account numbers for the receiver will trigger a payment failure.
| Account Number | Effect (non Batch) | Effect (Batch) |
| --- | --- | --- |
| `000000000` | Failure (immediate) | Failure(this single payment) |
| `000000001` | Failure (later) | Failure(this single payment) |
| `000000002` | Success | Failure (entire batch) |
## Direct Debit Authorizations [#direct-debit-authorizations]
In the test mode for the Direct Debit Authorizations API (Singapore only), a successful authorization returns `null` for `payerIdType` and `payerIdHash` by default. Create the authorization with this bill reference number to receive mock payer identification fields instead. The value must match exactly, including case: `s1234567d` is a valid bill reference number but returns `null` for both fields.
| Bill Reference Number | Effect |
| --- | --- |
| `S1234567D` | A successful authorization returns the mock payer identification fields below |
The mock values are hardcoded and not derived from a real payer ID. To verify the hash, uppercase `S1234567D`, SHA-256 it, and hex-encode the digest (64 characters). The result should match `payerIdHash`.
| Field | Value |
| --- | --- |
| `payerIdType` | `NRIC` |
| `payerIdHash` | `3578b829767388a631b999b7049e830827b3e99b7504581bcfefa72def689658` |
## Direct Debit Payments [#direct-debit-payments]
In the test mode for the Direct Debit Payments API, these customer references will trigger a payment failure.
| Customer Reference | Effect |
| --- | --- |
| `fail` | Failure |
## Hosted Payments [#hosted-payments]
In the test mode for the Hosted Payments API, these hosted payment method IDs will trigger specific scenarios.
| Hosted Payment Method ID | Effect |
| --- | --- |
| `hpm_TESTMODESUCCEEDED` | successful payment |
| `hpm_TESTMODEFAILED_PAYLAHWALLETDELINKED` | failure - customer has unlinked their PayLah! wallet |
| `hpm_TESTMODEPENDING_INSUFFICIENTFUNDSPENDINGTOPUP` | failure - there is insufficient balance in the customer's PayLah! wallet, and they have been prompted to top up. |
# API compatibility (https://docs.tryacme.com/guides/api-compatibility)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
## Backward Compatibility [#backward-compatibility]
Acme strives to maintain backward compatibility for all public API endpoints. This means we adhere
to these principles:
* Existing API endpoints will not be removed without proper deprecation notices
* New required request parameters will not be added to existing endpoints
* Non-optional fields will not be removed from response structures
* Field types and semantics will not be changed
In rare circumstances, we may need to make breaking changes to address critical security issues,
fix significant bugs, or implement essential infrastructure improvements. When these exceptional
situations arise, we will:
* Provide sufficient advance notice
* Clearly document the changes and migration paths
* Offer support during the transition period
## Handling API Changes [#handling-api-changes]
### Recommendations [#recommendations]
* **Be tolerant of unknown fields**: Your client should ignore any fields in responses that it
doesn't recognize
* **Don't depend on field order**: The order of fields in JSON responses may change
* **Accept new enum values**: Be prepared to handle new values in enumerated fields
### Field Types and Values [#field-types-and-values]
#### Enum Values [#enum-values]
* **Open enums**: Treat all enums as open (non-exhaustive) even if all current values are documented
* **Enum value stability**: Existing enum values will not change meaning, but new values may be
added
* **Enum deprecation**: Enum values may be deprecated but will continue to be accepted in requests
during the deprecation period
#### Field Type Considerations [#field-type-considerations]
* **Field value parsing**: Parse field values according to the documented field types. For example,
do not parse a field value as an integer when the documented type is a string, even if the value
appears numeric.
* **Set field values of correct type**: Use the correct, documented type for field values in your
requests. For example, use a string for a field value if the documented field type is a string,
even if the value appears numeric.
# Scheduled maintenance (https://docs.tryacme.com/guides/scheduled-maintenance)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
## Scheduled maintenance [#scheduled-maintenance]
Banks and the eGIRO Industry Aggregator may undergo scheduled maintenance downtimes.
During these downtimes, the affected Acme APIs will return HTTP status code 503 (Service Unavailable) with the following response body:
```json
{
"message": "Bank is under maintenance."
}
```
Please ensure that your applications and systems handle HTTP 503 errors appropriately.
# Acme's PGP public key (https://docs.tryacme.com/guides/acme-pgp-public-key)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
You may use PGP to encrypt sensitive or confidential information before sending it to Acme. Encrypt
with Acme's PGP public key found below, to ensure that only Acme is able to decrypt the data
successfully.
After importing our PGP public key, you should see the following details:
* Key ID: `62ED3283F9F7E413`
* User ID: `Acme Technology (Acme Technology - secure file sharing) `
* Key fingerprint: `FF73 91B5 8765 F43A E868 9CB7 62ED 3283 F9F7 E413`
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBGWfjUkBCACQ8X9tRoMzg5jOuP93FoAO5CVx+32MmwjrUj1UMlogdBSdY0/3
LQ7u7/JzIJamEpey7itHLU20tnYIveZxXlZRUVhjI/LAbWqrTLdwu1AALHFBLIio
LDU4zl4QOsfRIurbuTUsSXMVt90nkVRU8frwNo2/Vv4u5dzvbwkxOJxhPTuEZIVZ
2RJXSQQ6jImCl3tIyrqPPoT8hy8iLSSNqopsYkP6g1IRXtPcThToqeArk2V2/ddF
Hi7obyTAKzVoR4ojcdClfbaKGJHycFSLDekl3VPuV0BUDJyjyB1VL6QrNHIi2o/y
bl/eEk4kD9RJKxlDq9lpXGeG3TqZoc++iRZXABEBAAG0TUFjbWUgVGVjaG5vbG9n
eSAoQWNtZSBUZWNobm9sb2d5IC0gc2VjdXJlIGZpbGUgc2hhcmluZykgPHN1cHBv
cnRAdHJ5YWNtZS5jb20+iQFXBBMBCABBFiEE/3ORtYdl9DroaJy3Yu0yg/n35BMF
AmWfjUkCGwMFCQlbdYAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQYu0y
g/n35BP+yQf/a+NCpP4BwlcoJze8ziC9C1PX2InW2Rq6J+IbFrjbkyAFhA9+QMe8
uzNAFxPYQBCdBa5WdkndVflFup0BdKVwbpyIAbHRqvwlKUu2rQly+ewn/B6jyF0U
CguhVLXTQGK3K/E4+fk0XcJJSNsqdtuxq40Dj7Dehufuuy3LwKEp3JRqLeMp7Zo/
OHwadBdvTCJ0cBWO8WfmHDHqrN9oADnr4MJKuzPTk1/FRni5vZc77J2UCULsi3yA
HD6WCv1Aff1kD2bYe4j7S57AX7JBgLH8aEitATaL6pVXUV2h3KZqTmerFqPmdevl
+15WT4n26iCDVuIiIVsZ23g/Oz9XjX0HVLkBDQRln41JAQgApPX6KHZqnvKahTyl
hrfYUhUYyLNdFS9jmTwE553SAXwsI+UR/orEz3jsK06AHzOlc/3rGrt7udrrSEwm
OoZmEV1yX97Qt2pGQdoMr1P2tyhkNOxW7bIq4pyzO1bD2dQnQmfOvE/eDG1wfvUB
V3sp30RCMoJxloLH+3KEM7h1EGlS8E0FHZJqkrlGmgNK3ywZ2RqfVvMjpNCj56Hg
lkukbuktHD2sHUD28UUzICMAtB8XLFXZUoRskeO21hlwIw0o+PTMZFl/LjFdC+dI
ytg9H/ZQCsXqFSx6L0nhOakykxCXFo/PA8vqF3WkIhHpkHrSj6bIB2dnBO5brMoW
V5TyHQARAQABiQE8BBgBCAAmFiEE/3ORtYdl9DroaJy3Yu0yg/n35BMFAmWfjUkC
GwwFCQlbdYAACgkQYu0yg/n35BPEoQf/VsxFk0AoUYx3KIkDMU1ptRJant6PVZwr
giccXZ0oaJ4QLzWeW8ArATpkmIu4B8xiXir8d8PDhLmAMMZop9XhdpNP8GByzMmH
jxbvLnZYrdHDI8uIwFVGUtNDrkFfQITz2DTGUqwkm+uvxCD32IG2q8m+9wTRUIdi
EskOWIoRzujrTsNxaRcaFDEkFttxPZbbSKQPtKZO8lsNl2U6WggWr1kZV69IIM8b
KDZWF8oZ8+1MR1LX2nQ13qj9Eq2bx7eSa3lHoUV092QFpcsX3JHa776ajL4M6tsL
G1JtwTuvBH/gyN7IfUJ2pj1eAebeDUaoOwtKzyTxXjC7y6BcIIBVJw==
=ro9p
-----END PGP PUBLIC KEY BLOCK-----
```
# List Internal Accounts (https://docs.tryacme.com/reference/list-internal-accounts)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/internal-accounts`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/internal-accounts"
```
#### Response example (200)
```json
{
"data": [
{
"accountNumber": "string",
"createdAt": "string",
"currencies": [
"string"
],
"iban": "string",
"id": "string",
"name": "string",
"swiftBic": "string",
"updatedAt": "string"
}
],
"hasMore": true
}
```
[
Get an Internal Account
Next Page
](/reference/get-internal-accounts-id)
# Get an Internal Account (https://docs.tryacme.com/reference/get-internal-accounts-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/internal-accounts/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/internal-accounts/string"
```
#### Response example (200)
```json
{
"accountNumber": "string",
"createdAt": "string",
"currencies": [
"string"
],
"iban": "string",
"id": "string",
"name": "string",
"swiftBic": "string",
"updatedAt": "string"
}
```
# Verify identity of bank account holder (https://docs.tryacme.com/reference/post-bank-account-verifications)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/bank-account-verifications`
Fields are written as `name*type` when required and `name?type` when optional.
Verify that the identity information matches the account holder of the given bank account. For example, you can use this API to check if the bank account number provided by a customer indeed belongs to them.
You can use these special `accountNumber` values in test mode to simulate specific outcomes.
| accountNumber | Outcome |
| --- | --- |
| 4242424200 | Successful |
| 545454500 | Successful |
| 4242424291 | failureReason: `INVALID_IDENTITY_NUMBER` |
| 545454591 | failureReason: `INVALID_IDENTITY_NUMBER` |
| 4242424292 | failureReason: `IDENTITY_NOT_FOUND` |
| 545454592 | failureReason: `IDENTITY_NOT_FOUND` |
| 4242424293 | failureReason: `IDENTITY_MISMATCH` |
| 545454593 | failureReason: `IDENTITY_MISMATCH` |
| 4242424294 | failureReason: `ACCOUNT_CLOSED` |
| 545454594 | failureReason: `ACCOUNT_CLOSED` |
All other values will fail with failureReason of `OTHERS`.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`accountNumber*string`
DBS/POSB bank account number. Hyphens must be excluded. A DBS account number has 10 digits, and a POSB account number has 9 digits.
Match`^[0-9]{7,30}$`
Length`1 <= length`
`bank*string`
Bank of the given account number. Currently must be `DBSSSGSGXXX`.
Match`^[A-Z0-9]{8}([A-Z0-9]{3})?$`
Length`1 <= length`
`idNumber?string`
NRIC number, passport number or Malaysia identity card number. For joint accounts, this can be either one of the account holder's identity.
Length`0 <= length <= 16`
`idType?string`
Type of identity: `NRIC`, `PASSPORT`, or `MALAYSIAN_ID`.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/bank-account-verifications" \
-H "Content-Type: application/json" \
-d '{
"accountNumber": "string",
"bank": "string"
}'
```
#### Response example (200)
```json
{
"accountNumber": "string",
"failureReason": "string",
"idNumber": "string",
"idType": "string",
"success": true
}
```
# Look up a payment proxy address (https://docs.tryacme.com/reference/post-payment-proxy-lookup)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payment-proxy/lookup`
Fields are written as `name*type` when required and `name?type` when optional.
This lookup API contacts the addressing server and verifies that the proxy address is valid as a destination.
In test mode, this always returns "success" except for `MOBILE/+6511111111` and `UEN/201912345NABC`.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`PayNow`
`proxyType*string`
Type of the payment recipient's proxy (e.g. mobile phone number). This determines the value in `proxyValue`. E.g. if you specify `UEN` here, `proxyValue` should be a valid UEN. Proxy types supporting the DuitNow payment method: `MOBILE`, `BUSINESS_REG`, `NRIC` and `PASSPORT`.
Length`1 <= length`
`proxyValue*string`
Payment recipient's proxy (e.g. mobile phone number). The value here is determined by `proxyType`. E.g. if you specify `UEN` in `proxyType`, this should be a valid UEN.
For the PayNow payment method, `proxyValue` should follow these formats:
- `MOBILE` proxy type: A mobile number including the country code (+65 for Singapore). E.g: +6592345678.
- `UEN` proxy type: A valid Unique Entity Number (UEN) issued by ACRA. E.g: 202303536E.
- `NRIC` proxy type: A valid NRIC or FIN. E.g: S0000001I.
- `VPA` proxy type: A valid Virtual Payment Address (VPA) issued by a non-bank Financial Institution (e.g. digital wallets). The exact format is determined by the issuer. E.g: +6592345678#ACME.
For the DuitNow payment method, see the DuitNow variant of this request for the `MOBILE`, `BUSINESS_REG`, `NRIC` and `PASSPORT` formats.
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payment-proxy/lookup" \
-H "Content-Type: application/json" \
-d '{
"proxyType": "string",
"proxyValue": "string"
}'
```
#### Response example (200)
```json
{
"failureReason": "string",
"proxyType": "string",
"proxyValue": "string",
"success": true
}
```
# List Transactions (https://docs.tryacme.com/reference/get-transactions)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/transactions`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`dataSource?string`
Retrieve only transactions from this data source.
`transactionDate?string`
Retrieve only transactions with this value date, in the format `YYYY-MM-DD`.
Format`date`
`statementId?string`
Retrieve only transactions associated with this [Statement](/reference/get-statements).
`internalAccountId?string`
Retrieve only transactions belonging to this [Internal Account](/reference/list-internal-accounts).
`currency?string`
Retrieve only transactions with this currency. Specify a three-letter ISO 4217 currency code in full uppercase.
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
`format?string`
Response format. Defaults to the standard Acme format.
Value in
- "ACME"
- "NETSUITE"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/transactions"
```
#### Response example (200)
```json
{
"data": [
{
"additionalInformation": "string",
"amount": 0,
"bankAccount": {
"bank": "string",
"bankAccountNumber": "string",
"id": "string"
},
"bankReference": "string",
"bookingDate": {
"date": "string",
"offset": "string",
"time": "string",
"tz": "string"
},
"counterparty": {
"bank": "string",
"bankAccountNumber": "string",
"bankName": "string",
"localRoutingIdentifier": "string",
"name": "string"
},
"createdAt": "string",
"currency": "string",
"currencyExchange": {
"exchangeRate": "string",
"sourceCurrency": "string",
"targetCurrency": "string"
},
"customerReference": "string",
"dataSource": "string",
"description": "string",
"direction": "string",
"id": "string",
"remittanceInformation": "string",
"statementId": "string",
"transactionDate": "string",
"transactionReferences": [
{
"dataSource": "string",
"name": "string",
"value": "string"
}
],
"transactionStatus": "string",
"transactionType": "string",
"updatedAt": "string",
"virtualAccountNumber": "string"
}
],
"hasMore": true
}
```
# Create a test transaction (https://docs.tryacme.com/reference/post-transactions)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/transactions`
Fields are written as `name*type` when required and `name?type` when optional.
Create a test transaction to simulate a credit or debit on your bank account. The transaction will be available under `GET /v1/transactions` ([List Transactions](/reference/get-transactions)). If you're subscribed to webhooks, you'll receive a webhook with the event `transactions.created`.
This request is only available in test mode.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`additionalInformation?string`
Additional information, if available.
`amount*number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. for SGD, $10 would be represented as 1000 (cents).
`bankAccount?`
The bank account of the transaction.
`bankReference?string`
Reference ID set by the bank.
`counterparty?`
The other party of this transaction.
`currency*string`
Currency of this transaction. Three-letter ISO 4217 currency code in full uppercase.
`currencyExchange?`
Currency exchange information for transactions that involve different source and target currencies.
`customerReference?string`
Customer reference set by the sender. Often used to allow the receiving party to recognize and reconcile the transaction.
`dataSource*string`
Data source where the information for this transaction came from: `ICN`, `IDN`, `CAMT054`, `CAMT052`, `CAMT.053`, or `ICRDRN`.
`description?string`
The transaction detail text that often appears on your bank statement and in your banking portal. Deprecated: use `customerReference` instead.
`direction*string`
Credit transaction or debit transaction.
Value in
- "DEBIT"
- "CREDIT"
`remittanceInformation?string`
Remittance information, if available.
`sendWebhook?boolean`
Specify `false` to prevent a `transactions.created` webhook from being sent.
`transactionDate?string`
Value date of this transaction, in the format `YYYY-MM-DD`.
Format`date`
`transactionStatus?string`
Status of the transaction in the bank's books. This field is only set if this information is available from the bank's transaction notification or statement.
This field corresponds to the `Ntry.Sts` field of relevant ISO 20022 messages and reports (e.g., camt.053):
- `BOOKED`: corresponds to `BOOK`
- `PENDING`: corresponds to `PDNG`
- `INFORMATION`: corresponds to `INFO`
Value in
- "BOOKED"
- "PENDING"
- "INFORMATION"
`transactionType*string`
Payment method used for this transaction. Also known as transaction type or payment rail.
Value in
- "FAST"
- "PAYNOW"
- "ACT"
- "TT"
- "MEPS"
- "GIRO"
- "OTHERS"
- "DUITNOW"
- "FPS"
- "ACH"
- "CHATS"
- "BKTR"
- "SPEI"
- "SEPA_INSTANT"
- "SEPA"
- "FASTER"
- "RTGS"
- "RTP"
- "IBFT"
- "FTS"
- "FPX"
`virtualAccountNumber?string`
Virtual account number, if the transaction destination is a virtual account.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/transactions" \
-H "Content-Type: application/json" \
-d '{
"amount": 0,
"currency": "string",
"dataSource": "string",
"direction": "DEBIT",
"transactionType": "FAST"
}'
```
#### Response example (200)
```json
{
"additionalInformation": "string",
"amount": 0,
"bankAccount": {
"bank": "string",
"bankAccountNumber": "string",
"id": "string"
},
"bankReference": "string",
"bookingDate": {
"date": "string",
"offset": "string",
"time": "string",
"tz": "string"
},
"counterparty": {
"bank": "string",
"bankAccountNumber": "string",
"bankName": "string",
"localRoutingIdentifier": "string",
"name": "string"
},
"createdAt": "string",
"currency": "string",
"currencyExchange": {
"exchangeRate": "string",
"sourceCurrency": "string",
"targetCurrency": "string"
},
"customerReference": "string",
"dataSource": "string",
"description": "string",
"direction": "string",
"id": "string",
"remittanceInformation": "string",
"statementId": "string",
"transactionDate": "string",
"transactionReferences": [
{
"dataSource": "string",
"name": "string",
"value": "string"
}
],
"transactionStatus": "string",
"transactionType": "string",
"updatedAt": "string",
"virtualAccountNumber": "string"
}
```
# Get a Transaction (https://docs.tryacme.com/reference/get-transactions-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/transactions/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Query Parameters
`format?string`
Response format. Defaults to the standard Acme format.
Value in
- "ACME"
- "NETSUITE"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/transactions/string"
```
#### Response example (200)
```json
{
"additionalInformation": "string",
"amount": 0,
"bankAccount": {
"bank": "string",
"bankAccountNumber": "string",
"id": "string"
},
"bankReference": "string",
"bookingDate": {
"date": "string",
"offset": "string",
"time": "string",
"tz": "string"
},
"counterparty": {
"bank": "string",
"bankAccountNumber": "string",
"bankName": "string",
"localRoutingIdentifier": "string",
"name": "string"
},
"createdAt": "string",
"currency": "string",
"currencyExchange": {
"exchangeRate": "string",
"sourceCurrency": "string",
"targetCurrency": "string"
},
"customerReference": "string",
"dataSource": "string",
"description": "string",
"direction": "string",
"id": "string",
"remittanceInformation": "string",
"statementId": "string",
"transactionDate": "string",
"transactionReferences": [
{
"dataSource": "string",
"name": "string",
"value": "string"
}
],
"transactionStatus": "string",
"transactionType": "string",
"updatedAt": "string",
"virtualAccountNumber": "string"
}
```
# List Statements (https://docs.tryacme.com/reference/get-statements)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/statements`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`internalAccountId?string`
Retrieve only statements belonging to this [Internal Account](/reference/list-internal-accounts).
`currency?string`
Retrieve only statements with this currency. Specify a three-letter ISO 4217 currency code in full uppercase.
`statementDateSince?string`
Retrieve only statements with a statement date on or after this date, in the format `YYYY-MM-DD`.
Format`date`
`statementDateUntil?string`
Retrieve only statements with a statement date on or before this date, in the format `YYYY-MM-DD`.
Format`date`
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/statements"
```
#### Response example (200)
```json
{
"data": [
{
"bankAccount": {
"bank": "string",
"bankAccountNumber": "string",
"id": "string"
},
"closingBalance": 0,
"createdAt": "string",
"currency": "string",
"id": "string",
"openingBalance": 0,
"statementDate": "string",
"type": "string",
"updatedAt": "string"
}
],
"hasMore": true
}
```
# Get a Statement (https://docs.tryacme.com/reference/get-statements-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/statements/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/statements/string"
```
#### Response example (200)
```json
{
"bankAccount": {
"bank": "string",
"bankAccountNumber": "string",
"id": "string"
},
"closingBalance": 0,
"createdAt": "string",
"currency": "string",
"id": "string",
"openingBalance": 0,
"statementDate": "string",
"type": "string",
"updatedAt": "string"
}
```
# Create a test statement (https://docs.tryacme.com/reference/post-statements)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/statements`
Fields are written as `name*type` when required and `name?type` when optional.
Create a test mode statement to simulate receiving the bank's end-of-day statement. If you're subscribed to webhooks, you'll receive a webhook with the event `statements.created`.
Associate [test mode Transactions](/reference/post-transactions) with the statement by specifying their IDs in the `transactionIds` request field. You can then retrieve Transactions associated with this statement using the `statementId` query parameter of `GET /v1/transactions` ([List Transactions](/reference/get-transactions)).
This request is only available in test mode.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`closingBalance?number`
The closing balance for the statement. An integer value in the specified currency's [smallest unit](/guides/minor-units-format). E.g., SGD $10 will be represented as 1000 (cents). Can be negative.
`openingBalance?number`
The opening balance for the statement. An integer value in the specified currency's [smallest unit](/guides/minor-units-format). E.g., SGD $10 will be represented as 1000 (cents). Can be negative.
`statementDate?string`
Statement date, in the format `YYYY-MM-DD`.
Format`date`
`transactionIds?array`
[Test mode Transactions](/reference/post-transactions) to associate with this statement.
`type*string`
Statement type. `CAMT.053` is the end-of-day statement.
Match`^CAMT.053`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/statements" \
-H "Content-Type: application/json" \
-d '{
"type": "string"
}'
```
#### Response example (200)
```json
{
"bankAccount": {
"bank": "string",
"bankAccountNumber": "string",
"id": "string"
},
"closingBalance": 0,
"createdAt": "string",
"currency": "string",
"id": "string",
"openingBalance": 0,
"statementDate": "string",
"type": "string",
"updatedAt": "string"
}
```
# List Report Files (https://docs.tryacme.com/reference/get-report-files)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/report-files`
Fields are written as `name*type` when required and `name?type` when optional.
List the report files available to your organization.
Report files are documents that Acme retrieves from your banks on your behalf. Each entry describes one file and its metadata. To retrieve the file itself, call [Download a Report File](/reference/post-report-files-id-download) using the report id.
Each file is available for 30 days after it is created. Refer to the `expiresAt` field for the exact expiry timestamp.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
`reportDate?string`
Retrieve only report files with this report date. Specify an exact date in the format `YYYY-MM-DD`. This is an exact match, not a range. Please note that this parameter is currently subject to availability of report date in the file name.
Format`date`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/report-files"
```
#### Response example (200)
```json
{
"data": [
{
"createdAt": "string",
"expiresAt": "string",
"fileName": "string",
"format": "string",
"id": "string",
"reportDate": "string",
"type": "string",
"updatedAt": "string"
}
],
"hasMore": true
}
```
# Download a Report File (https://docs.tryacme.com/reference/post-report-files-id-download)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/report-files/{id}/download`
Fields are written as `name*type` when required and `name?type` when optional.
Get a link to download a report file.
This request returns the report file metadata together with a `link`, which is a short-lived URL used to download the report content. The link is valid for 15 minutes from the time the request is made. Once it expires, a new link must be generated to access the file again.
A report file is available for 30 days from the date it is created. The `expiresAt` field indicates the actual expiration date of the report file. This request returns a 404 Not Found response if the file does not exist or has already expired.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/report-files/string/download"
```
#### Response example (200)
```json
{
"createdAt": "string",
"expiresAt": "string",
"fileName": "string",
"format": "string",
"id": "string",
"link": "string",
"reportDate": "string",
"type": "string",
"updatedAt": "string"
}
```
# Look up account balance (https://docs.tryacme.com/reference/post-internal-accounts-id-balance)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/internal-accounts/{id}/balance`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/internal-accounts/string/balance"
```
#### Response example (200)
```json
{
"accountNumber": "string",
"balances": [
{
"amount": 0,
"currency": "string",
"type": "currentLedger"
}
],
"id": "string",
"swiftBic": "string"
}
```
# List Payments (https://docs.tryacme.com/reference/get-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/payments`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
`status?string`
Filter by payment status.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/payments"
```
#### Response example (200)
One page of payments. Pass the last `id` as `after` to fetch the next page while `hasMore` is true.
```json
{
"data": [
{
"id": "pymt_0J7Q2D4K9RXM3",
"type": "FAST",
"amount": 150000,
"currency": "SGD",
"customerReference": "INV-20260901-001",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"receiver": {
"name": "Chan Tai Man",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "7654321098"
},
"paymentDetails": "Payment for invoice INV-20260901-001",
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "SGD",
"status": "COMPLETED",
"resultCode": null,
"bankReference": "FT26244N3K8Q1V",
"createdAt": "2026-09-01T02:15:32.418206Z",
"updatedAt": "2026-09-01T02:15:33.102544Z"
},
{
"id": "pymt_0J7Q2GTB5W8N6",
"type": "PAYNOW",
"amount": 4200,
"currency": "SGD",
"customerReference": "REFUND-88213",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"receiver": {
"name": "Tan Mei Ling",
"proxyType": "MOBILE",
"proxyValue": "+6591234567"
},
"paymentDetails": "Refund for order 88213",
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "SGD",
"status": "SUBMITTED",
"resultCode": null,
"bankReference": "FT26244P7V2M9D",
"createdAt": "2026-09-01T02:18:05.771903Z",
"updatedAt": "2026-09-01T02:18:06.204118Z"
}
],
"hasMore": true
}
```
# Create a Payment (https://docs.tryacme.com/reference/post-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payments`
Fields are written as `name*type` when required and `name?type` when optional.
The field specifications vary depending on the bank. Refer to the bank specific payment rules page under [Guides](/guides) for examples and details.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`amount*number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. $10 would be represented as 1000 (cents).
`bankChargeBearer?string`
Bearer of the bank charges: `SENDER`, `RECEIVER`, or `SHARED`. Refer to the payment rules page for per-bank support. For Hong Kong, applicable only for FPS payments via Airwallex.
`batchId?string`
ID of the payment batch to add this payment to. Only available when batch payments are enabled for your organization.
`clearingNetwork?string`
Applicable to Banking Circle EUR Payments. Please consult with the bank for your default routing logic and if this is applicable to your account. If applicable, specify the preferred payment rail to execute payments. The allowed values are:
- `SEPAINST`: SEPA Instant Credit Transfer
- `SEPA`: SEPA Credit Transfer
- `T2`: Target2
`currency*string`
Three-letter ISO 4217 currency code in full uppercase. Must be a currency supported by the payment type. For example, FAST only supports `SGD`, and UAE domestic types (`BKTR`, `UAE_FTS`, `UAE_IBFT`) typically use `AED`.
`currencyExchange?`
Reference to a booked forex contract funding this payment.
`customerReference?string`
A meaningful description of the payment. This will show up in the receiver's bank statement. Characters used should be restricted to the SWIFT Character Set: uppercase and lowercase letters A-Z, 0-9 numerals, space, and these symbols: `/-?:().,'+`.
`instructionForSenderBank?string`
Additional instruction for the sender bank, where the bank supports it.
`paymentAdviceEmails?array`
Email addresses to send a payment advice to, where the bank supports it.
`paymentDetails?string`
Extended description of the payment. Characters used should be restricted to the SWIFT Character Set: uppercase and lowercase letters A-Z, 0-9 numerals, space, and these symbols: `/-?:().,'+`. For UAE payments, a free-text description of up to 100 characters.
`purposeCode?string`
Purpose code describing the nature of the payment, for regulatory and reporting purposes. Refer to the corresponding payment rules page for the accepted code list and per-bank requirements.
- For HK FPS payments via Airwallex: mandatory; specify the purpose of the payment from the bank's code list.
- For Banking Circle payments: mandatory only for CNH payments to China; one of `GOD`, `STR`, `CTF`, `OTF`.
- For UAE payments: a 3-letter code from the Central Bank UAE list of purpose codes; defaults to `FIS` if not supplied.
`receiver*`
The payment receiver. Which fields apply depends on the payment type; refer to the payment rules page. Same-bank transfer types (e.g. ACT, BKTR) support only `name` and `bankAccountNumber`; proxy-addressed types (e.g. PAYNOW, MY_DUITNOW, FPS) use `proxyType` and `proxyValue` instead of bank account numbers.
`senderAccountCurrency?string`
Currency to use in the sender account, if it has multiple currencies. Optional if the sender account only has one currency configured.
`senderAccountId?string`
ID of the [Internal Account](/reference/list-internal-accounts) that will be debited to make this payment. Required unless `batchId` is provided; payments added to a batch use the batch's sender account.
`type*string`
Type of the payment. Refer to the bank specific payment rules page for the supported types.
Match`^(FAST|GIRO|ACT|TT|MEPS|PAYNOW|MY_DUITNOW|MY_RENTAS|MY_IBG|MY_IBFT|AUTO)$`
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payments" \
-H "Content-Type: application/json" \
-d '{
"amount": 0,
"currency": "string",
"receiver": {},
"type": "string"
}'
```
#### Response example (200)
### FAST
SGD transfer to a bank account. FAST clears in seconds, so the bank can confirm the payment in the create response itself.
```json
{
"id": "pymt_0J7Q2D4K9RXM3",
"type": "FAST",
"amount": 150000,
"currency": "SGD",
"customerReference": "INV-20260901-001",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"receiver": {
"name": "Chan Tai Man",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "7654321098"
},
"paymentDetails": "Payment for invoice INV-20260901-001",
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "SGD",
"status": "COMPLETED",
"resultCode": null,
"bankReference": "FT26244N3K8Q1V",
"createdAt": "2026-09-01T02:15:32.418206Z",
"updatedAt": "2026-09-01T02:15:33.102544Z"
}
```
### PAYNOW
### GIRO
### ACT
### MEPS
### TT
### MY_DUITNOW
### MY_IBFT
### HK_FPS_PROXY
### Held for approval (maker-checker)
# Get a Payment (https://docs.tryacme.com/reference/get-payments-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/payments/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/payments/string"
```
#### Response example (200)
### Completed
A payment the bank has confirmed. `bankReference` carries the bank's own reference.
```json
{
"id": "pymt_0J7Q2D4K9RXM3",
"type": "FAST",
"amount": 150000,
"currency": "SGD",
"customerReference": "INV-20260901-001",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"receiver": {
"name": "Chan Tai Man",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "7654321098"
},
"paymentDetails": "Payment for invoice INV-20260901-001",
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "SGD",
"status": "COMPLETED",
"resultCode": null,
"bankReference": "FT26244N3K8Q1V",
"createdAt": "2026-09-01T02:15:32.418206Z",
"updatedAt": "2026-09-01T02:15:33.102544Z"
}
```
### Failed
### Payment in a batch
### Pending approval (maker-checker)
# Approve a Payment (https://docs.tryacme.com/reference/post-payments-id-approve)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payments/{id}/approve`
Fields are written as `name*type` when required and `name?type` when optional.
If maker-checker payment flow is enabled, a checker with the appropriate authority must approve the payment by making an approve request before the payment is executed.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payments/string/approve"
```
#### Response example (200)
The payment after approval. Acme sends it to the bank as part of the approve call, so the status has already moved on and `review` records who approved it.
```json
{
"id": "pymt_0J7Q35HK2Q9B6",
"type": "FAST",
"amount": 11000,
"currency": "SGD",
"customerReference": "INV-2026-0429",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"receiver": {
"name": "Chan Tai Man",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "123456789"
},
"paymentDetails": "Invoice payment",
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "SGD",
"status": "SUBMITTED",
"resultCode": null,
"bankReference": "FT26244V1D7H3P",
"createdAt": "2026-09-01T03:41:26.929745Z",
"updatedAt": "2026-09-01T04:12:54.882011Z",
"review": {
"requestedBy": "ak_maker_team_a",
"approvedAt": "2026-09-01T04:12:54.882011Z",
"approvedBy": "ak_checker_team_a",
"rejectedAt": null,
"rejectedBy": null,
"rejectionReason": null,
"expiresAt": "2026-09-02T03:41:26.929745Z"
}
}
```
# Reject a Payment (https://docs.tryacme.com/reference/post-payments-id-reject)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payments/{id}/reject`
Fields are written as `name*type` when required and `name?type` when optional.
If maker-checker payment flow is enabled, a checker with the appropriate authority must reject the payment by making a reject request before the payment is executed.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`rejectionReason*string`
Reason provided by the checker for the rejection.
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payments/string/reject" \
-H "Content-Type: application/json" \
-d '{
"rejectionReason": "string"
}'
```
#### Response example (200)
The payment after rejection. It ends in `APPROVAL_REJECTED` and `review` records who rejected it and why.
```json
{
"id": "pymt_0J7Q35HK2Q9B6",
"type": "FAST",
"amount": 11000,
"currency": "SGD",
"customerReference": "INV-2026-0429",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"receiver": {
"name": "Chan Tai Man",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "123456789"
},
"paymentDetails": "Invoice payment",
"currencyExchange": {
"fxContractId": null
},
"senderAccountCurrency": "SGD",
"status": "APPROVAL_REJECTED",
"resultCode": null,
"createdAt": "2026-09-01T03:41:26.929745Z",
"updatedAt": "2026-09-01T04:30:12.231019Z",
"review": {
"requestedBy": "ak_maker_team_a",
"approvedAt": null,
"approvedBy": null,
"rejectedAt": "2026-09-01T04:30:12.231019Z",
"rejectedBy": "ak_checker_team_a",
"rejectionReason": "Beneficiary not on the approved vendor list",
"expiresAt": "2026-09-02T03:41:26.929745Z"
}
}
```
# List Batch Payments (https://docs.tryacme.com/reference/list-batch-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/payment-batches`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieve batch payments that you have created.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/payment-batches"
```
#### Response example (200)
One page of batches. `payments` is never included when listing.
```json
{
"data": [
{
"id": "bpmt_0J7Q4A2M8V5X1",
"type": "FAST",
"paymentDate": "2026-09-10",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"status": "COMPLETED",
"createdAt": "2026-09-09T01:02:03.401556Z",
"updatedAt": "2026-09-10T02:30:11.004871Z"
},
{
"id": "bpmt_0J7Q4V2Q7Z3B5",
"type": "GIRO",
"paymentDate": "2026-09-10",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"status": "FAILED",
"underlyingErrorMessage": "Rejected by bank: debit account not enabled for GIRO",
"createdAt": "2026-09-09T03:14:58.735201Z",
"updatedAt": "2026-09-09T03:20:02.118644Z"
}
],
"hasMore": false
}
```
# Create a Batch Payment (https://docs.tryacme.com/reference/post-batch-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payment-batches`
Fields are written as `name*type` when required and `name?type` when optional.
Create a batch payment.
This is an asynchronous operation. Listen to the `payments.succeeded` or `payments.failed` webhook to be notified of the final outcome of each payment.
See the [Batch Payments](/guides/batch-payments) guide for a more detailed explanation on how to use this API.
Please refer to the payment rules page of each bank under [Guides](/guides) for details on per-bank limitations.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`currency*string`
Three-letter ISO 4217 currency code in full uppercase. Must be a currency supported by the payment type.
Length`1 <= length`
`paymentDate*string`
The date payment should be sent.
Format`date`
`payments?array`
Payments to create in this batch. Maximum 1000 items.
`senderAccountCurrency?string`
Currency to use in the sender account, if it has multiple currencies. Optional if the sender account only has one currency configured.
`senderAccountId*string`
ID of the [Internal Account](/reference/list-internal-accounts) that will be debited to make the payments.
Length`1 <= length`
`type*string`
Type of payment. Default `PAYNOW` is via FAST. Refer to the bank specific payment rules page for the supported types.
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payment-batches" \
-H "Content-Type: application/json" \
-d '{
"currency": "string",
"paymentDate": "2019-08-24",
"senderAccountId": "string",
"type": "string"
}'
```
#### Response example (200)
### FAST
SGD batch of bank account transfers. The batch and each payment start in `PROCESSING` while Acme builds the file for the bank.
```json
{
"id": "bpmt_0J7Q4A2M8V5X1",
"type": "FAST",
"paymentDate": "2026-09-10",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"payments": [
{
"id": "pymt_0J7Q4C7T3W9R2",
"amount": 20000,
"currency": "SGD",
"customerReference": "DONUTS",
"paymentDetails": "10 boxes of 12 each",
"receiver": {
"name": "Donut Shop",
"bank": "OCBCSGSGXXX",
"bankAccountNumber": "123456789"
},
"status": "PROCESSING",
"paymentAdviceEmails": [
"finance@example.com"
],
"createdAt": "2026-09-09T01:02:03.417284Z",
"updatedAt": "2026-09-09T01:02:03.417284Z"
},
{
"id": "pymt_0J7Q4F1K6D8N5",
"amount": 3000,
"currency": "SGD",
"customerReference": "COFFEE",
"receiver": {
"name": "Coffee Shop",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "345678901"
},
"status": "PROCESSING",
"createdAt": "2026-09-09T01:02:03.463910Z",
"updatedAt": "2026-09-09T01:02:03.463910Z"
}
],
"status": "PROCESSING",
"createdAt": "2026-09-09T01:02:03.401556Z",
"updatedAt": "2026-09-09T01:02:03.512090Z"
}
```
### PAYNOW
### MEPS
### TT
### MY_DUITNOW
# Get a Batch Payment (https://docs.tryacme.com/reference/get-batch-payments-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/payment-batches/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/payment-batches/string"
```
#### Response example (200)
### Submitted
The file has been sent to the bank. `payments` is not included when fetching a batch. List them with [List Payments](/reference/get-payments) instead.
```json
{
"id": "bpmt_0J7Q4A2M8V5X1",
"type": "FAST",
"paymentDate": "2026-09-10",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"status": "SUBMITTED",
"createdAt": "2026-09-09T01:02:03.401556Z",
"updatedAt": "2026-09-09T01:05:47.220318Z"
}
```
### Completed
### Failed
# Close a Batch Payment (https://docs.tryacme.com/reference/post-batch-payments-id-close)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payment-batches/{id}/close`
Fields are written as `name*type` when required and `name?type` when optional.
Close an open batch payment so no further payments can be added. Only batches in `OPEN` status can be closed.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payment-batches/string/close"
```
#### Response example (200)
The batch after closing. It moves from `OPEN` to `PROCESSING` and Acme starts building the file for the bank.
```json
{
"id": "bpmt_0J7Q4S9N4V7Y2",
"type": "FAST",
"paymentDate": "2026-09-10",
"senderAccountId": "intacc_0H3BQY9BK1FCG",
"senderAccountCurrency": "SGD",
"currency": "SGD",
"status": "PROCESSING",
"createdAt": "2026-09-09T02:00:00.084512Z",
"updatedAt": "2026-09-09T02:07:41.662090Z"
}
```
# Create a Bank Payment File (https://docs.tryacme.com/reference/post-bank-payments-file)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payment-files`
Fields are written as `name*type` when required and `name?type` when optional.
Create a bank payment file that adheres to the bank's required formatting standards for direct portal upload. This operation does not initiate any batch payment via server file transfer. The generated file is returned as base64-encoded content.
The request accepts the same shape as Create a Batch Payment, plus an optional `payrollIndicator` field: indicate 'Y' for payroll payment files and 'N' for non-payroll. If omitted, the value defaults to 'N'.
Please refer to the payment rules page of each bank under [Guides](/guides) for details on per-bank limitations.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`currency*string`
Three-letter ISO 4217 currency code in full uppercase. Must be a currency supported by the payment type.
`outputFormat?string`
Output format hint for the generated file, where the bank integration supports more than one format. Optional.
`paymentDate*string`
The date payment should be sent.
Format`date`
`payments*array`
Payments to include in the file. Maximum 1000 items.
`payrollIndicator?string`
Indicate 'Y' for payroll payment files and 'N' for non-payroll. If omitted, the value defaults to 'N'.
`senderAccountCurrency?string`
Currency to use in the sender account, if it has multiple currencies. Optional if the sender account only has one currency configured.
`senderAccountId*string`
ID of the [Internal Account](/reference/list-internal-accounts) that will be debited to make the payments.
`type*string`
Type of payment. Refer to the bank specific payment rules page for the supported types.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payment-files" \
-H "Content-Type: application/json" \
-d '{
"currency": "string",
"paymentDate": "2019-08-24",
"payments": [
{
"amount": 1,
"receiver": {}
}
],
"senderAccountId": "string",
"type": "string"
}'
```
#### Response example (200)
```json
{
"contentType": "string",
"fileData": "string",
"fileName": "string",
"format": "string"
}
```
# List Refunds (https://docs.tryacme.com/reference/get-refunds)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/refunds`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieve refunds that you have created.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/refunds"
```
#### Response example (200)
```json
{
"data": [
{
"amount": 0,
"createdAt": "string",
"currency": "string",
"id": "string",
"resultCode": "string",
"status": "string",
"transactionId": "string",
"updatedAt": "string"
}
],
"hasMore": true
}
```
# Create a Refund (https://docs.tryacme.com/reference/post-refunds)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/refunds`
Fields are written as `name*type` when required and `name?type` when optional.
Create a refund for a payment.
This is an asynchronous operation. The `status` of the Refund object in a successful response will be `PENDING`. Listen to the `refunds.succeeded` or `refunds.failed` webhook to be notified of the final outcome of the refund.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`amount*number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. $10 would be represented as 1000 (cents).
Range`1 <= value <= 20000000`
`currency*string`
Three-letter ISO 4217 currency code in full uppercase. Must be a supported currency.
`transactionId*string`
ID of transaction to refund.
Use these transaction IDs in test mode to simulate various outcomes:
- `txn_SuccessfulRefund`: Create a successful refund. The `status` will change from `PENDING` to `SUCCEEDED` after a short while.
- `txn_FailedRefund`: Create a failed refund. The `status` will change from `PENDING` to `FAILED` after a short while.
- `txn_InvalidTransaction`: Simulate attempting to refund a transaction that cannot be refunded.
- `txn_AlreadyRefunded`: Simulate attempting to refund a transaction that has already been refunded.
- `txn_RejectOverRefund`: Simulate attempting to refund an amount that is greater than the transaction's refundable amount.
- `txn_NoLongerRefundable`: Simulate attempting to refund a transaction that is no longer refundable (e.g. exceeded refund window).
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/refunds" \
-H "Content-Type: application/json" \
-d '{
"amount": 1,
"currency": "string",
"transactionId": "string"
}'
```
#### Response example (200)
```json
{
"amount": 0,
"createdAt": "string",
"currency": "string",
"id": "string",
"resultCode": "string",
"status": "string",
"transactionId": "string",
"updatedAt": "string"
}
```
# Get a Refund (https://docs.tryacme.com/reference/get-refunds-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/refunds/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieve details of a refund that you have created.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/refunds/string"
```
#### Response example (200)
```json
{
"amount": 0,
"createdAt": "string",
"currency": "string",
"id": "string",
"resultCode": "string",
"status": "string",
"transactionId": "string",
"updatedAt": "string"
}
```
# List Direct Debit Authorizations (https://docs.tryacme.com/reference/get-direct-debit-authorizations)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-authorizations`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
`status?string`
Filter by direct debit authorization status.
Value in
- "REQUIRES_AUTHORIZATION"
- "PROCESSING"
- "SUBMITTED"
- "SUCCEEDED"
- "FAILED"
- "REQUIRES_AUTHORIZATION_FOR_CANCELLATION"
- "CANCELED"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-authorizations"
```
#### Response example (200)
One page of authorizations across all countries.
```json
{
"data": [
{
"id": "dda_0J7Q6A3M8V5X1",
"billReferenceNumber": "A0012334455",
"payerSwiftBic": "DBSSSGSGXXX",
"payerBankCode": null,
"payerSegment": "RETAIL",
"payerName": "Richard Hendricks",
"payerBankAccountNumber": "0052312891",
"payerIdHash": "a3f0d8331c9d860aa685df22501d",
"payerIdType": "NRIC",
"status": "SUCCEEDED",
"failureReason": null,
"underlyingErrorMessage": null,
"startDate": "2026-09-09",
"precheckMinAmount": null,
"precheckMaxAmount": 100000,
"precheckCurrency": "SGD",
"maxAmount": 100000,
"maxAmountCurrency": "SGD",
"payerAuthorizedMaxAmount": 100000,
"endDate": "2042-04-24",
"authorizeUrl": null,
"cancelUrl": null,
"returnUrl": "https://example.com/return",
"cancelReturnUrl": null,
"transactionReference": "EG2026090900012345",
"createdAt": "2026-09-09T02:10:11.204118Z",
"updatedAt": "2026-09-09T02:13:42.318189Z"
},
{
"id": "dda_0J7Q6G8W6N2Z7",
"billReferenceNumber": "A0012334455",
"payerSwiftBic": null,
"payerBankCode": "004",
"payerSegment": null,
"payerName": "Wong Ka Ming",
"payerBankAccountNumber": "0100123456",
"payerIdHash": null,
"payerIdType": null,
"status": "SUCCEEDED",
"failureReason": null,
"underlyingErrorMessage": null,
"startDate": "2026-09-09",
"precheckMinAmount": null,
"precheckMaxAmount": 99999900,
"precheckCurrency": "HKD",
"maxAmount": 99999900,
"maxAmountCurrency": null,
"payerAuthorizedMaxAmount": 0,
"endDate": "2099-12-31",
"authorizeUrl": null,
"cancelUrl": null,
"returnUrl": null,
"cancelReturnUrl": null,
"transactionReference": "SCBHK2026090900456",
"createdAt": "2026-09-09T02:20:05.093352Z",
"updatedAt": "2026-09-10T01:05:44.506731Z"
}
],
"hasMore": false
}
```
# Create a Direct Debit Authorization (https://docs.tryacme.com/reference/post-direct-debit-authorizations)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/direct-debit-authorizations`
Fields are written as `name*type` when required and `name?type` when optional.
Acme will fail the Direct Debit Authorization if we do not receive an authorization response within 20 minutes after creation for `RETAIL` payer segment, and 48 hours for `CORPORATE` payer segment. The `status` field will be set to `FAILED`, with `failureReason` set to `PAYER_AUTHORIZATION_TIMEOUT`. This can happen if the payer did not complete the authorization flow on their bank's website.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`Singapore`
`billReferenceNumber*string`
Bill reference number for your payer. Must be at most 35 characters. Only alphanumeric characters and dashes are accepted. This must be unique for each new Direct Debit Authorization that you create.
Match`^[a-zA-Z0-9\-]+$`
Length`1 <= length <= 35`
`businessUnitId?string`
Business unit identifier, where your organization uses one.
Length`1 <= length <= 5`
`country?string`
Value in
- "SG"
- "MY"
- "HK"
- "KR"
- "AU"
- "US"
- "ID"
- "TW"
- "BR"
- "DK"
- "PH"
- "VN"
- "AE"
- "GB"
- "IN"
- "MX"
- "CN"
`endDate*string`
If the payer sets an expiry date earlier than this end date with their bank during authorization, Acme will fail this authorization.
Format`date`
`maxAmount?numberDeprecated`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). E.g. SGD $10 will be represented as 1000 (in cents). Some banks allow payers to set deduction limits when they are approving the Direct Debit Authorizations. If the payer sets a deduction limit that is lower than maxAmount, Acme will fail the Direct Debit Authorization. Deprecated: use `precheckMinAmount` and `precheckMaxAmount` instead.
Range`1 <= value <= 20000000`
`maxAmountCurrency?stringDeprecated`
Three-letter ISO 4217 currency code in full uppercase. Currently supports SGD. Deprecated: use `precheckCurrency` instead.
`payerName*string`
Payer's name.
Length`1 <= length <= 140`
`payerSegment*string`
Your payer's segment: `RETAIL` or `CORPORATE`.
Value in
- "CORPORATE"
- "RETAIL"
`payerSwiftBic*string`
Your payer's bank SWIFT/BIC code. Use [List Direct Debit Banks](/reference/get-direct-debit-banks) for the banks that support eGIRO and their current status.
Match`^[A-Z0-9]{4}SG[A-Z0-9]{5}$`
Length`1 <= length`
`precheckCurrency?string`
Three-letter ISO 4217 currency code in full uppercase. Currently supports SGD. This is required if either `precheckMinAmount` or `precheckMaxAmount` is set.
`precheckMaxAmount?number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). E.g. SGD $10 will be represented as 1000 (in cents).
If you attempt to create a Direct Debit Payment (for this Direct Debit Authorization) with an amount greater than precheckMaxAmount, Acme will reject the Direct Debit Payment request. Use this as a guardrail to prevent yourself from overcharging your payers.
If the payer sets a deduction limit that is lower than precheckMaxAmount, precheckMaxAmount will be updated to the lower deduction limit.
If precheckMaxAmount is not set, it will be updated to the deduction limit set by the payer. If the payer does not set a deduction limit, and the payer's bank does not set a default deduction limit, Acme will set precheckMaxAmount to SGD $200,000.00.
Range`1 <= value <= 20000000`
`precheckMinAmount?number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). E.g. SGD $10 will be represented as 1000 (in cents). Some banks allow payers to set deduction limits when they are approving Direct Debit Authorizations. If the payer sets a deduction limit that is lower than precheckMinAmount, Acme will fail the Direct Debit Authorization. If you attempt to create a Direct Debit Payment with an amount lower than precheckMinAmount, Acme will reject the Direct Debit Payment request.
Range`1 <= value <= 20000000`
`returnUrl*string`
Payer will be redirected to this URL after they have authorized the Direct Debit Authorisation at their bank's website.
Match`^[A-Za-z][A-Za-z0-9+\-\.]+:\/\/[^:\?\/]+(:[0-9]+)?((\/[^\/\?]*)*\/?(\?[^\?\/]*)?)?$`
Length`0 <= length <= 2048`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/direct-debit-authorizations" \
-H "Content-Type: application/json" \
-d '{
"billReferenceNumber": "string",
"endDate": "2019-08-24",
"payerName": "string",
"payerSegment": "CORPORATE",
"payerSwiftBic": "string",
"returnUrl": "string"
}'
```
#### Response example (200)
### Singapore (eGIRO)
Redirect the payer to `authorizeUrl` to approve the authorization at their bank. `payerBankAccountNumber` is filled in once they approve.
```json
{
"id": "dda_0J7Q6A3M8V5X1",
"billReferenceNumber": "A0012334455",
"payerSwiftBic": "DBSSSGSGXXX",
"payerBankCode": null,
"payerSegment": "RETAIL",
"payerName": "Richard Hendricks",
"payerBankAccountNumber": null,
"payerIdHash": null,
"payerIdType": null,
"status": "REQUIRES_AUTHORIZATION",
"failureReason": null,
"underlyingErrorMessage": null,
"startDate": "2026-09-09",
"precheckMinAmount": null,
"precheckMaxAmount": 100000,
"precheckCurrency": "SGD",
"maxAmount": 100000,
"maxAmountCurrency": "SGD",
"payerAuthorizedMaxAmount": 0,
"endDate": "2042-04-24",
"authorizeUrl": "https://api.tryacme.com/redirection/direct-debit-authorizations/dda_0J7Q6A3M8V5X1/authorize?key=0J7Q6A4NRX2W8K",
"cancelUrl": null,
"returnUrl": "https://example.com/return",
"cancelReturnUrl": null,
"transactionReference": null,
"createdAt": "2026-09-09T02:10:11.204118Z",
"updatedAt": "2026-09-09T02:10:11.204118Z"
}
```
### Malaysia (FPX)
### Hong Kong (eDDA)
# Get a Direct Debit Authorization (https://docs.tryacme.com/reference/get-direct-debit-authorizations-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-authorizations/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-authorizations/string"
```
#### Response example (200)
### Singapore (eGIRO), approved
An approved eGIRO authorization. `payerAuthorizedMaxAmount` is the cap the payer set at their bank.
```json
{
"id": "dda_0J7Q6A3M8V5X1",
"billReferenceNumber": "A0012334455",
"payerSwiftBic": "DBSSSGSGXXX",
"payerBankCode": null,
"payerSegment": "RETAIL",
"payerName": "Richard Hendricks",
"payerBankAccountNumber": "0052312891",
"payerIdHash": "a3f0d8331c9d860aa685df22501d",
"payerIdType": "NRIC",
"status": "SUCCEEDED",
"failureReason": null,
"underlyingErrorMessage": null,
"startDate": "2026-09-09",
"precheckMinAmount": null,
"precheckMaxAmount": 100000,
"precheckCurrency": "SGD",
"maxAmount": 100000,
"maxAmountCurrency": "SGD",
"payerAuthorizedMaxAmount": 100000,
"endDate": "2042-04-24",
"authorizeUrl": null,
"cancelUrl": null,
"returnUrl": "https://example.com/return",
"cancelReturnUrl": null,
"transactionReference": "EG2026090900012345",
"createdAt": "2026-09-09T02:10:11.204118Z",
"updatedAt": "2026-09-09T02:13:42.318189Z"
}
```
### Malaysia (FPX), approved
### Hong Kong (eDDA), approved
# Cancel a Direct Debit Authorization (https://docs.tryacme.com/reference/post-direct-debit-authorizations-id-cancel)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/direct-debit-authorizations/{id}/cancel`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`cancelReturnUrl*string`
Payer will be redirected to this URL after they have cancelled the Direct Debit Authorisation at their bank's website. Conditionally required: not applicable for HK direct debit authorizations.
Match`^[A-Za-z][A-Za-z0-9+\-\.]+:\/\/[^:\?\/]+(:[0-9]+)?((\/[^\/\?]*)*\/?(\?[^\?\/]*)?)?$`
Length`0 <= length <= 2048`
`country?string`
Value in
- "SG"
- "MY"
- "HK"
- "KR"
- "AU"
- "US"
- "ID"
- "TW"
- "BR"
- "DK"
- "PH"
- "VN"
- "AE"
- "GB"
- "IN"
- "MX"
- "CN"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/direct-debit-authorizations/string/cancel" \
-H "Content-Type: application/json" \
-d '{
"cancelReturnUrl": "string"
}'
```
#### Response example (200)
### Singapore (eGIRO)
Cancellation needs the payer to approve it. Redirect them to `cancelUrl`, and the status moves to `CANCELED` once their bank confirms.
```json
{
"id": "dda_0J7Q6A3M8V5X1",
"billReferenceNumber": "A0012334455",
"payerSwiftBic": "DBSSSGSGXXX",
"payerBankCode": null,
"payerSegment": "RETAIL",
"payerName": "Richard Hendricks",
"payerBankAccountNumber": "0052312891",
"payerIdHash": "a3f0d8331c9d860aa685df22501d",
"payerIdType": "NRIC",
"status": "SUCCEEDED",
"failureReason": null,
"underlyingErrorMessage": null,
"startDate": "2026-09-09",
"precheckMinAmount": null,
"precheckMaxAmount": 100000,
"precheckCurrency": "SGD",
"maxAmount": 100000,
"maxAmountCurrency": "SGD",
"payerAuthorizedMaxAmount": 100000,
"endDate": "2042-04-24",
"authorizeUrl": null,
"cancelUrl": "https://api.tryacme.com/redirection/direct-debit-authorizations/dda_0J7Q6A3M8V5X1/cancel?key=0J7Q6B7QTZ4Y1N",
"returnUrl": "https://example.com/return",
"cancelReturnUrl": "https://example.com/cancel-return",
"transactionReference": "EG2026090900012345",
"createdAt": "2026-09-09T02:10:11.204118Z",
"updatedAt": "2026-09-12T08:30:19.284415Z"
}
```
### Hong Kong (eDDA)
# List Direct Debit Collections (https://docs.tryacme.com/reference/get-direct-debit-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-payments`
Fields are written as `name*type` when required and `name?type` when optional.
"Direct Debit Payment" in the API path refers to a direct debit collection transaction where funds are collected from the debtor account.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-payments"
```
#### Response example (200)
One page of collections.
```json
{
"data": [
{
"id": "dpymt_0J7Q7A2M8V5X1",
"type": "FAST",
"amount": 1250,
"currency": "SGD",
"directDebitAuthorizationId": "dda_0J7Q6A3M8V5X1",
"customerReference": "SUB-2026-09",
"receiver": {
"bankAccountNumber": "0052312891"
},
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorMessage": null,
"createdAt": "2026-09-09T03:00:14.557605Z",
"updatedAt": "2026-09-09T03:00:16.135109Z"
},
{
"id": "dpymt_0J7Q7NF3H6D2V",
"type": "FAST",
"amount": 1250,
"currency": "SGD",
"directDebitAuthorizationId": "dda_0J7Q6A3M8V5X1",
"customerReference": "SUB-2026-10",
"receiver": {
"bankAccountNumber": "0052312891"
},
"status": "FAILED",
"resultCode": "INSUFFICIENT_FUNDS",
"underlyingErrorMessage": "AM04: Insufficient funds",
"createdAt": "2026-10-09T03:00:14.512879Z",
"updatedAt": "2026-10-09T03:00:16.298416Z"
}
],
"hasMore": false
}
```
# Create a Direct Debit Collection (https://docs.tryacme.com/reference/post-direct-debit-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/direct-debit-payments`
Fields are written as `name*type` when required and `name?type` when optional.
"Direct Debit Payment" in the API path refers to a direct debit collection transaction where funds are collected from the debtor account.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`amount?number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. for SGD, $10 would be represented as 1000 (cents). Must not be greater than the Direct Debit Authorization's maximum amount.
Range`1 <= value <= 100000000`
`bankChargeBearer?string`
Bearer of the bank charges: `SENDER`, `RECEIVER`, or `SHARED`. Applicable only for Hong Kong direct debit payments.
Value in
- "SENDER"
- "RECEIVER"
- "SHARED"
`currency?string`
Three-letter ISO 4217 currency code in full uppercase. Must be the same as the Direct Debit Authorization's currency.
Match`^SGD|MYR|HKD$`
`customerReference*string`
A meaningful description of the debit/payment. For Singapore: this will show up in your payer's bank statement. For Malaysia and Hong Kong: this is purely for your own reference, and does not affect the statement. In test mode, set this to "fail" to simulate a failed debit/payment.
Match`^[a-zA-Z0-9\-]+$`
Length`1 <= length <= 35`
`directDebitAuthorizationId?string`
ID of a successful Direct Debit Authorization (status is `SUCCEEDED`) to use for this direct debit. This is required for pulling money from an external bank account via direct debit. Provide either this or `directDebitAuthorizationInformation`.
`directDebitAuthorizationInformation?`
Information of a direct debit authorization maintained outside Acme. Provide either this or `directDebitAuthorizationId`. `billReferenceNumber` is the unique bill reference number of the authorized direct debit (required by the bank); `payerBankAccountNumber` is where the direct debit payment will be collected from; `internalAccountId` is the [Internal Account](/reference/list-internal-accounts) the payment will be made to.
`type*string`
Type of the payment.
Value in
- "FAST"
- "MY_FPX"
- "HK_DDI"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/direct-debit-payments" \
-H "Content-Type: application/json" \
-d '{
"customerReference": "string",
"type": "FAST"
}'
```
#### Response example (200)
### Singapore (FAST)
Collects against an Acme-maintained eGIRO authorization. FAST collections settle within seconds, so the response is already `SUCCEEDED`.
```json
{
"id": "dpymt_0J7Q7A2M8V5X1",
"type": "FAST",
"amount": 1250,
"currency": "SGD",
"directDebitAuthorizationId": "dda_0J7Q6A3M8V5X1",
"customerReference": "SUB-2026-09",
"receiver": {
"bankAccountNumber": "0052312891"
},
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorMessage": null,
"createdAt": "2026-09-09T03:00:14.557605Z",
"updatedAt": "2026-09-09T03:00:16.135109Z"
}
```
### Singapore (FAST, external authorization)
### Malaysia (FPX)
### Hong Kong (DDI)
# Get a Direct Debit Collection (https://docs.tryacme.com/reference/get-direct-debit-payments-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-payments/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
"Direct Debit Payment" in the API path refers to a direct debit collection transaction where funds are collected from the debtor account.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-payments/string"
```
#### Response example (200)
### Succeeded
A collection the bank has accepted.
```json
{
"id": "dpymt_0J7Q7A2M8V5X1",
"type": "FAST",
"amount": 1250,
"currency": "SGD",
"directDebitAuthorizationId": "dda_0J7Q6A3M8V5X1",
"customerReference": "SUB-2026-09",
"receiver": {
"bankAccountNumber": "0052312891"
},
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorMessage": null,
"createdAt": "2026-09-09T03:00:14.557605Z",
"updatedAt": "2026-09-09T03:00:16.135109Z"
}
```
### Failed
### Collection in a batch
# Create a Batch Direct Debit Collection (https://docs.tryacme.com/reference/post-direct-debit-payment-batches)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/direct-debit-payment-batches`
Fields are written as `name*type` when required and `name?type` when optional.
Create a batch of multiple direct debit collections. "Direct Debit Payment" in the API path refers to a direct debit collection transaction where funds are collected from the debtor account.
When you create a batch direct debit payment in test mode, it will automatically succeed after a short while with the status `COMPLETED`. Every direct debit payment within the batch will subsequently succeed with the status `SUCCEEDED`.
You can simulate various failure scenarios in test mode by setting the `customerReference` field of a direct debit payment within the batch to the following values:
- `FAIL`: The affected direct debit payment will fail with the status `FAILED`. This does not affect the batch direct debit payment and other direct debit payments within it.
- `FAIL-BATCH`: The batch direct debit payment will fail with the status `FAILED`, and every direct debit payment within it will fail with the status `FAILED`.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`currency*string`
Three-letter ISO 4217 currency code in full uppercase.
Length`1 <= length`
`paymentDate*string`
The date the collections should be executed.
Format`date`
`payments?array`
A list of direct debits to perform as part of this batch. The `payments` array must be homogeneous: do not mix `directDebitAuthorizationId` and `directDebitAuthorizationInformation` in the same request. Use `directDebitAuthorizationId` if the Direct Debit Authorization (DDA) was created via [Acme's Direct Debit Authorization API](/reference/post-direct-debit-authorizations), and `directDebitAuthorizationInformation` if you are using an existing DDA not created with Acme (e.g., registered through paper-based Giro or a bank portal).
`type*string`
Type of the collections: `GIRO` or `FAST`.
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/direct-debit-payment-batches" \
-H "Content-Type: application/json" \
-d '{
"currency": "string",
"paymentDate": "2019-08-24",
"type": "string"
}'
```
#### Response example (200)
A GIRO batch mixing Acme-maintained and external authorizations. Everything starts in `PROCESSING` while Acme builds the bank file.
```json
{
"id": "bddp_0J7Q8A2M8V5X1",
"type": "GIRO",
"paymentDate": "2026-09-10",
"currency": "SGD",
"payments": [
{
"id": "dpymt_0J7Q8C7T3W9R2",
"amount": 4200,
"currency": "SGD",
"customerReference": "SUB-2026-09-001",
"receiver": {
"bankAccountNumber": "0052312891"
},
"status": "PROCESSING",
"createdAt": "2026-09-09T05:02:03.417284Z",
"updatedAt": "2026-09-09T05:02:03.417284Z",
"directDebitAuthorizationId": "dda_0J7Q6A3M8V5X1"
},
{
"id": "dpymt_0J7Q8F1K6D8N5",
"amount": 9900,
"currency": "SGD",
"customerReference": "SUB-2026-09-002",
"receiver": {
"bankAccountNumber": "0052312891"
},
"status": "PROCESSING",
"createdAt": "2026-09-09T05:02:03.463910Z",
"updatedAt": "2026-09-09T05:02:03.463910Z",
"directDebitAuthorizationInformation": {
"billReferenceNumber": "ROCKETCUST123",
"payerName": "Chan Tai Man",
"payerBankAccountNumber": "9999429999",
"payerSwiftBic": "OCBCSGSGXXX",
"internalAccountId": "intacc_0H3BQY9BK1FCG"
}
}
],
"status": "PROCESSING",
"createdAt": "2026-09-09T05:02:03.401556Z",
"updatedAt": "2026-09-09T05:02:03.512090Z"
}
```
# List Batch Direct Debit Collections (https://docs.tryacme.com/reference/get-direct-debit-payment-batches)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-payment-batches`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieve batch direct debit collections that you've created. "Direct Debit Payment" in the API path refers to a direct debit collection transaction where funds are collected from the debtor account.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-payment-batches"
```
#### Response example (200)
One page of batches. `payments` is never included when listing.
```json
{
"data": [
{
"id": "bddp_0J7Q8A2M8V5X1",
"type": "GIRO",
"paymentDate": "2026-09-10",
"currency": "SGD",
"status": "COMPLETED",
"createdAt": "2026-09-09T05:02:03.401556Z",
"updatedAt": "2026-09-10T02:30:11.004871Z",
"metadata": {
"fileName": "GP8120207003.xml"
}
}
],
"hasMore": false
}
```
# Get a Batch Direct Debit Collection (https://docs.tryacme.com/reference/get-direct-debit-payment-batch-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-payment-batches/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieve a single batch direct debit collection.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-payment-batches/string"
```
#### Response example (200)
### Submitted
The file has been sent to the bank and `metadata.fileName` names it. `payments` is not included when fetching a batch.
```json
{
"id": "bddp_0J7Q8A2M8V5X1",
"type": "GIRO",
"paymentDate": "2026-09-10",
"currency": "SGD",
"status": "SUBMITTED",
"createdAt": "2026-09-09T05:02:03.401556Z",
"updatedAt": "2026-09-09T05:05:47.220318Z",
"metadata": {
"fileName": "GP8120207003.xml"
}
}
```
### Completed
# List Direct Debit Banks (https://docs.tryacme.com/reference/get-direct-debit-banks)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/direct-debit-banks`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/direct-debit-banks"
```
#### Response example (200)
Banks currently available for direct debit authorizations for your organization, with their online status per payer segment.
```json
{
"banks": [
{
"bankCode": "DBSSSGSGXXX",
"bankName": "DBS Bank",
"segment": "RETAIL",
"status": "ONLINE"
},
{
"bankCode": "OCBCSGSGXXX",
"bankName": "OCBC Bank",
"segment": "RETAIL",
"status": "ONLINE"
},
{
"bankCode": "UOVBSGSGXXX",
"bankName": "United Overseas Bank",
"segment": "CORPORATE",
"status": "OFFLINE"
}
]
}
```
# List Hosted Payments (https://docs.tryacme.com/reference/get-hosted-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/hosted-payments`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
`status?string`
Filter by hosted payment status.
Value in
- "REQUIRES_ACTION"
- "PENDING"
- "SUCCEEDED"
- "FAILED"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/hosted-payments"
```
#### Response example (200)
One page of hosted payments across methods.
```json
{
"data": [
{
"id": "hpymt_0J7Q9A2M8V5X1",
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorCode": null,
"underlyingErrorMessage": null,
"transactionReference": "20260909DBSSSGSGBRT7728204",
"amount": 4242,
"currency": "SGD",
"channel": "WEB_BROWSER_DESKTOP",
"method": "PAYNOW",
"returnUrl": "https://example.com/return",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0J7Q9A2M8V5X1/submit",
"referenceId": "ORDER-10042",
"tokenization": false,
"hostedPaymentMethodId": null,
"customerProxy": null,
"payer": null,
"paymentInformation": null,
"createdAt": "2026-09-09T04:00:27.967830Z",
"updatedAt": "2026-09-09T04:01:03.800309Z",
"expiredAt": null
},
{
"id": "hpymt_0J7Q9G8W6N2Z7",
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorCode": null,
"underlyingErrorMessage": null,
"transactionReference": "2609091234567890",
"amount": 12500,
"currency": "MYR",
"channel": null,
"method": "FPX_ONLINEBANKING",
"returnUrl": "https://example.com/return",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0J7Q9G8W6N2Z7/submit",
"referenceId": "ORDER-MY-7781",
"tokenization": null,
"hostedPaymentMethodId": null,
"customerProxy": null,
"payer": {
"returnedName": "AHMAD BIN ALI",
"payerBank": "Malayan Banking Berhad (M2U)",
"firstName": "Ahmad",
"lastName": "bin Ali",
"email": "ahmad@example.com",
"phone": "+60123456789"
},
"paymentInformation": [
{
"itemName": "DEPOSIT",
"itemReference": "ID-1",
"unitAmount": 12500,
"numberOfUnits": 1,
"totalTaxAmount": 0
}
],
"createdAt": "2026-09-09T04:12:44.093352Z",
"updatedAt": "2026-09-09T04:15:20.615870Z",
"expiredAt": "2026-09-09T04:27:44.093352Z"
}
],
"hasMore": false
}
```
# Create a Hosted Payment (https://docs.tryacme.com/reference/post-hosted-payments)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/hosted-payments`
Fields are written as `name*type` when required and `name?type` when optional.
Create a Hosted Payment to collect payment from your customer. When this request succeeds, redirect the customer to the URL in the `redirectUrl` field of the response so that they can make the payment. They will be redirected back to the URL in `returnUrl` when they complete the payment flow.
When the customer has successfully made the payment, the `status` field will be updated to `SUCCEEDED`, and Acme will send a `hosted-payments.succeeded` webhook to you.
Should the payment fail, the `status` field will be updated to `FAILED`, and Acme will send a corresponding `hosted-payments.failed` webhook. The `resultCode` field may contain additional information about the failure.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`Singapore`
`amount*number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. $10 would be represented as 1000 (cents).
Range`1 <= value <= 20000000`
`channel*string`
Channel the customer pays from. Not applicable for FPX payments.
Value in
- "APP_IOS"
- "APP_ANDROID"
- "WEB_BROWSER_DESKTOP"
- "WEB_BROWSER_MOBILE"
`currency*string`
Three-letter ISO 4217 currency code in full uppercase.
Match`^SGD$`
`hostedPaymentMethodId?string`
Token from a previously tokenized Hosted Payment to use for creating this payment without requiring your customer to key in their payment method information again.
The token can be found in this field of a previous successful Hosted Payment that was created with `tokenization=true`.
Use these values to simulate specific success and failure scenarios:
- `hpm_TESTMODESUCCEEDED`: successful payment
- `hpm_TESTMODEFAILED_PAYLAHWALLETDELINKED`: customer has unlinked their PayLah! wallet.
- `hpm_TESTMODEPENDING_INSUFFICIENTFUNDSPENDINGTOPUP`: there is insufficient balance in the customer's PayLah! wallet, and they have been prompted to top up.
`method*string`
Payment method.
Value in
- "PAYLAH"
- "PAYNOW"
- "FPX_ONLINEBANKING"
`referenceId?string`
A string to reference (e.g. your order ID, a payment ID, etc.) which can be used to reconcile the hosted payment with your own systems. This cannot exceed 255 characters.
Length`0 <= length <= 255`
`returnUrl?string`
For a web browser based channel, use a HTTPS URL. For a native mobile based channel, use an App Deep Link URL. This should not be set if hostedPaymentMethodId is provided in the request.
Match`^[A-Za-z][A-Za-z0-9+\-\.]+:\/\/[^:\?\/]+(:[0-9]+)?((\/[^\/\?]*)*\/?(\?[^\?\/]*)?)?$`
Length`0 <= length <= 2048`
`tokenization?boolean`
Only applicable to `method=PAYLAH`. Set to `true` to tokenize your customer's payment method information, allowing you to collect future payments from this customer using Hosted Payments without requiring them to key in their payment method information again.
You can find the token in the `hostedPaymentMethodId` field, after your customer has successfully completed this payment.
Tokenization is also sometimes known as binding or linking your digital wallet.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/hosted-payments" \
-H "Content-Type: application/json" \
-d '{
"amount": 1,
"channel": "APP_IOS",
"currency": "string",
"method": "PAYLAH"
}'
```
#### Response example (200)
### Singapore (PayNow)
Redirect the customer to `redirectUrl` to pay with PayNow. They return to `returnUrl` afterwards.
```json
{
"id": "hpymt_0J7Q9A2M8V5X1",
"status": "REQUIRES_ACTION",
"resultCode": null,
"underlyingErrorCode": null,
"underlyingErrorMessage": null,
"transactionReference": null,
"amount": 4242,
"currency": "SGD",
"channel": "WEB_BROWSER_DESKTOP",
"method": "PAYNOW",
"returnUrl": "https://example.com/return",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0J7Q9A2M8V5X1/submit",
"referenceId": "ORDER-10042",
"tokenization": false,
"hostedPaymentMethodId": null,
"customerProxy": null,
"payer": null,
"paymentInformation": null,
"createdAt": "2026-09-09T04:00:27.967830Z",
"updatedAt": "2026-09-09T04:00:27.967830Z",
"expiredAt": null
}
```
### Singapore (PayLah!, tokenized)
### Malaysia (FPX)
# Get a Hosted Payment (https://docs.tryacme.com/reference/get-hosted-payments-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/hosted-payments/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/hosted-payments/string"
```
#### Response example (200)
### Singapore (PayNow), succeeded
`transactionReference` carries the bank reference for the credit.
```json
{
"id": "hpymt_0J7Q9A2M8V5X1",
"status": "SUCCEEDED",
"resultCode": null,
"underlyingErrorCode": null,
"underlyingErrorMessage": null,
"transactionReference": "20260909DBSSSGSGBRT7728204",
"amount": 4242,
"currency": "SGD",
"channel": "WEB_BROWSER_DESKTOP",
"method": "PAYNOW",
"returnUrl": "https://example.com/return",
"redirectUrl": "https://api.tryacme.com/redirection/hosted-payments/hpymt_0J7Q9A2M8V5X1/submit",
"referenceId": "ORDER-10042",
"tokenization": false,
"hostedPaymentMethodId": null,
"customerProxy": null,
"payer": null,
"paymentInformation": null,
"createdAt": "2026-09-09T04:00:27.967830Z",
"updatedAt": "2026-09-09T04:01:03.800309Z",
"expiredAt": null
}
```
### Singapore (PayLah!), succeeded
### Malaysia (FPX), succeeded
### Failed
# List Hosted Refunds (https://docs.tryacme.com/reference/get-hosted-refunds)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/hosted-refunds`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/hosted-refunds"
```
#### Response example (200)
One page of refunds.
```json
{
"data": [
{
"id": "hrfnd_0J7QA2M8V5X1K",
"status": "SUCCEEDED",
"amount": 420,
"currency": "SGD",
"hostedPaymentId": "hpymt_0J7Q9A2M8V5X1",
"referenceId": "RFND-10042",
"createdAt": "2026-09-09T06:44:34.233697Z",
"updatedAt": "2026-09-09T06:44:36.353554Z"
}
],
"hasMore": false
}
```
# Create a Hosted Refund (https://docs.tryacme.com/reference/post-hosted-refunds)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/hosted-refunds`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`amount?number`
A positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. $10 would be represented as 1000 (cents).
Range`1 <= value <= 20000000`
`currency?string`
Three-letter ISO 4217 currency code in full uppercase. Must be a supported currency.
Match`^SGD$`
`hostedPaymentId*string`
ID of the hosted payment to refund.
Length`0 <= length <= 64`
`referenceId?string`
A string to reference (e.g. your refund ID, etc.) which can be used to reconcile the hosted refund with your own systems. This cannot exceed 255 characters.
Length`0 <= length <= 255`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/hosted-refunds" \
-H "Content-Type: application/json" \
-d '{
"hostedPaymentId": "string"
}'
```
#### Response example (200)
A refund of a completed hosted payment. It starts in `PENDING` and moves to `SUCCEEDED` or `FAILED`.
```json
{
"id": "hrfnd_0J7QA2M8V5X1K",
"status": "PENDING",
"amount": 420,
"currency": "SGD",
"hostedPaymentId": "hpymt_0J7Q9A2M8V5X1",
"referenceId": "RFND-10042",
"createdAt": "2026-09-09T06:44:34.233697Z",
"updatedAt": "2026-09-09T06:44:34.233697Z"
}
```
# Get a Hosted Refund (https://docs.tryacme.com/reference/get-hosted-refunds-id)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/hosted-refunds/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/hosted-refunds/string"
```
#### Response example (200)
A refund the bank has completed.
```json
{
"id": "hrfnd_0J7QA2M8V5X1K",
"status": "SUCCEEDED",
"amount": 420,
"currency": "SGD",
"hostedPaymentId": "hpymt_0J7Q9A2M8V5X1",
"referenceId": "RFND-10042",
"createdAt": "2026-09-09T06:44:34.233697Z",
"updatedAt": "2026-09-09T06:44:36.353554Z"
}
```
# Create a payment QR code (https://docs.tryacme.com/reference/post-payment-qr-codes)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/payment-qr-code`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`DuitNow`
`type*string`
Payment QR code network.
`amount*number`
Amount to collect, specified in the currency's minor units (e.g. in MYR, specify 1250 for MYR 12.50).
Range`1 <= value <= 20000000`
`currency*string`
Three-letter ISO 4217 currency code in full uppercase.
`expirySeconds?integer`
The QR code will be valid for this duration, after which payment QR code scanning applications will reject it.
Format`int32`
`internalAccountId*string`
ID of the [Internal Account](/reference/list-internal-accounts) to be linked to the payment QR code as the payment recipient. Use [List Internal Accounts](/reference/list-internal-accounts) to find the ID of the account that should receive payments.
Length`1 <= length`
`transactionReference*string`
An identifier for this payment, typically unique. The same value will appear in the corresponding transaction notification and bank statement entry, allowing you to reconcile with this payment.
Length`0 <= length <= 25`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/payment-qr-code" \
-H "Content-Type: application/json" \
-d '{
"type": "string"
}'
```
#### Response example (200)
A PayNow QR code for a fixed amount. `qrCodeImageUrl` serves the image to embed or print.
```json
{
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "202303536E",
"amount": 1250,
"currency": "SGD",
"expirySeconds": 900,
"amountEditable": false,
"transactionReference": "INV10042",
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/INV10042.png"
}
```
# List tracked QR code payments (https://docs.tryacme.com/reference/list-tracked-payment-qr-codes)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/tracked-payment-qr-codes`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieves the list of tracked QR code payments. This API only supports PayNow in Singapore.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
`limit?integer`
Format`int32`
`order?string`
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/tracked-payment-qr-codes"
```
#### Response example (200)
One page of tracked QR codes.
```json
{
"data": [
{
"id": "qrpymt_0J7QB3YB2P791",
"status": "SUCCEEDED",
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "202303536E",
"amount": 1250,
"currency": "SGD",
"expirySeconds": 900,
"transactionReference": "QR-10042",
"amountEditable": false,
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/QR-10042.png",
"resultCode": null,
"underlyingResultCode": null,
"underlyingResultDescription": null,
"bankReference": "20260909UOVBSGSGBRT3721482",
"bankAccount": {
"id": "intacc_0H3BQY9BK1FCG",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "0052312891"
},
"statusSource": "txn_0J7QB5RNT8ZJE",
"createdAt": "2026-09-09T07:21:19.281000Z",
"updatedAt": "2026-09-09T07:34:31.767000Z"
},
{
"id": "qrpymt_0J7QB3YB2P791",
"status": "PENDING",
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "202303536E",
"amount": 1250,
"currency": "SGD",
"expirySeconds": 900,
"transactionReference": "QR-10042",
"amountEditable": false,
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/QR-10042.png",
"resultCode": null,
"underlyingResultCode": null,
"underlyingResultDescription": null,
"bankReference": null,
"bankAccount": {
"id": "intacc_0H3BQY9BK1FCG",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "0052312891"
},
"statusSource": null,
"createdAt": "2026-09-09T07:21:19.281000Z",
"updatedAt": "2026-09-09T07:21:19.281000Z"
}
],
"hasMore": false
}
```
# Create a tracked QR code (https://docs.tryacme.com/reference/post-tracked-payment-qr-codes)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/tracked-payment-qr-codes`
Fields are written as `name*type` when required and `name?type` when optional.
Generates a trackable QR code that is tied to a specific transaction and tracked by Acme. A unique `transactionReference` is required. This API only supports PayNow in Singapore.
- To simulate `SUCCEEDED` status in test-mode, use `proxyType` UEN with `proxyValue` 000000001 or with `amount` value = 225.
- To simulate `FAILED` status in test-mode, use `proxyType` UEN with `proxyValue` 000000002 or with `amount` value = 125.
- Status can be retrieved from [Get a tracked QR code payment](/reference/get-tracked-payment-qr-codes).
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`type*string`
Payment QR code network.
`amount*number`
Amount to collect, specified in the currency's minor units (e.g. in SGD, specify 1250 for $12.50).
Range`1 <= value <= 20000000`
`amountEditable?boolean`
If set to true, the amount can be edited by the payer when scanning the QR code.
`currency*string`
Three-letter ISO 4217 currency code in full uppercase.
`expirySeconds?integer`
The QR code will be valid for this duration, after which payment QR code scanning applications will reject it.
Format`int32`
`proxyType?string`
Type of the payment recipient's proxy (e.g. mobile phone number). This determines the value in `proxyValue`. E.g. if you specify `UEN` here, `proxyValue` should be a valid UEN.
Value in
- "MOBILE"
- "UEN"
- "VPA"
- "NRIC"
`proxyValue?string`
Payment recipient's proxy (e.g. mobile phone number). The value here is determined by `proxyType`. For the PayNow payment method, `proxyValue` should follow these formats:
- `MOBILE` proxy type: A valid Singapore mobile number including the country code (+65): +65XXXXXXXX. E.g: +6592345678.
- `UEN` proxy type: A valid Unique Entity Number (UEN) issued by ACRA. E.g: 202303536E.
- `VPA` proxy type: A valid Virtual Payment Address (VPA) issued by a non-bank Financial Institution (e.g. digital wallets). The exact format is determined by the issuer. E.g: +6592345678#ACME.
`transactionReference*string`
An identifier for this payment, typically unique. The same value will appear in the corresponding transaction notification and bank statement entry, allowing you to reconcile with this payment.
Length`0 <= length <= 25`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/tracked-payment-qr-codes" \
-H "Content-Type: application/json" \
-d '{
"type": "string"
}'
```
#### Response example (200)
A newly generated tracked PayNow QR code. Acme moves it to `SUCCEEDED` when the credit notification arrives.
```json
{
"id": "qrpymt_0J7QB3YB2P791",
"status": "PENDING",
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "202303536E",
"amount": 1250,
"currency": "SGD",
"expirySeconds": 900,
"transactionReference": "QR-10042",
"amountEditable": false,
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/QR-10042.png",
"resultCode": null,
"underlyingResultCode": null,
"underlyingResultDescription": null,
"bankReference": null,
"bankAccount": {
"id": "intacc_0H3BQY9BK1FCG",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "0052312891"
},
"statusSource": null,
"createdAt": "2026-09-09T07:21:19.281000Z",
"updatedAt": "2026-09-09T07:21:19.281000Z"
}
```
# Get a tracked QR code payment (https://docs.tryacme.com/reference/get-tracked-payment-qr-codes)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/tracked-payment-qr-codes/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
Retrieves the status and details of a previously generated, Acme-hosted PayNow QR code using its unique ID. This API allows clients to check whether a credit notification for the tracked payment has been received, confirming payment completion. Only QR codes generated via [create a tracked QR code](/reference/post-tracked-payment-qr-codes) are supported. Currently, this API only supports PayNow in Singapore.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/tracked-payment-qr-codes/string"
```
#### Response example (200)
A paid tracked QR code. `bankReference` and `statusSource` identify the credit that settled it.
```json
{
"id": "qrpymt_0J7QB3YB2P791",
"status": "SUCCEEDED",
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "202303536E",
"amount": 1250,
"currency": "SGD",
"expirySeconds": 900,
"transactionReference": "QR-10042",
"amountEditable": false,
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/QR-10042.png",
"resultCode": null,
"underlyingResultCode": null,
"underlyingResultDescription": null,
"bankReference": "20260909UOVBSGSGBRT3721482",
"bankAccount": {
"id": "intacc_0H3BQY9BK1FCG",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "0052312891"
},
"statusSource": "txn_0J7QB5RNT8ZJE",
"createdAt": "2026-09-09T07:21:19.281000Z",
"updatedAt": "2026-09-09T07:34:31.767000Z"
}
```
# Perform a direct lookup of a tracked QR code (https://docs.tryacme.com/reference/lookup-tracked-payment-qr-codes)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/tracked-payment-qr-codes/lookup`
Fields are written as `name*type` when required and `name?type` when optional.
Performs a real-time lookup of a previously generated, tracked PayNow QR code by querying the bank directly. This API verifies the payment status against the bank's transaction records, independently of Acme's internal tracking. It is particularly useful in scenarios where:
- Webhook delivery is delayed or missing
- [Get a tracked QR code payment](/reference/get-tracked-payment-qr-codes) does not return the expected status
Currently, this API supports PayNow in Singapore and requires an active API subscription with the respective banks.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`id*string`
Unique identifier for the object.
Length`1 <= length`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/tracked-payment-qr-codes/lookup" \
-H "Content-Type: application/json" \
-d '{
"id": "string"
}'
```
#### Response example (200)
The result of a direct lookup at the bank. `statusSource` shows the status came from the lookup rather than a credit notification.
```json
{
"id": "qrpymt_0J7QB3YB2P791",
"status": "SUCCEEDED",
"type": "PAYNOW",
"proxyType": "UEN",
"proxyValue": "202303536E",
"amount": 1250,
"currency": "SGD",
"expirySeconds": 900,
"transactionReference": "QR-10042",
"amountEditable": false,
"qrCodeImageUrl": "https://acme-paynow-qr-code.s3.ap-southeast-1.amazonaws.com/qr/QR-10042.png",
"resultCode": null,
"underlyingResultCode": "ACTC",
"underlyingResultDescription": "Accepted Technical Validation",
"bankReference": "20260909UOVBSGSGBRT3721482",
"bankAccount": {
"id": "intacc_0H3BQY9BK1FCG",
"bank": "UOVBSGSGXXX",
"bankAccountNumber": "0052312891"
},
"statusSource": "BANK_LOOKUP",
"createdAt": "2026-09-09T07:21:19.281000Z",
"updatedAt": "2026-09-09T07:40:02.118644Z"
}
```
# List Virtual Accounts (https://docs.tryacme.com/reference/get-virtual-accounts)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/virtual-accounts`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Query Parameters
`after?string`
An object ID used as a cursor in pagination. If a list request returns 100 objects ending with `obj_0KSEVXZ2ZF0AV`, a subsequent call can include `after=obj_0KSEVXZ2ZF0AV` to fetch the next page of the list.
`limit?integer`
A limit on the number of objects to be returned, between 1 and 100.
Format`int32`
`order?string`
Sort list objects in either ascending or descending order.
Value in
- "ASC"
- "DESC"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/virtual-accounts"
```
#### Response example (200)
```json
{
"data": [
{
"accountDetails": {
"address": {
"city": "string",
"country": "string",
"line1": "string",
"line2": "string",
"postalCode": "string",
"state": "string"
},
"alias": "string",
"countryOfIncorporation": "string",
"dateOfBirth": "string",
"dateOfIncorporation": "string",
"idCountry": "string",
"idNumber": "string",
"idType": "string",
"nationality": "string",
"type": "string"
},
"createdAt": "string",
"id": "string",
"internalAccountId": "string",
"resultCode": "string",
"status": "string",
"updatedAt": "string",
"virtualAccountName": "string",
"virtualAccountNumber": "string"
}
],
"hasMore": true
}
```
# Create a Virtual Account (https://docs.tryacme.com/reference/create-virtual-account)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/virtual-accounts`
Fields are written as `name*type` when required and `name?type` when optional.
The `accountDetails` is only required for on-behalf-of collections via Virtual Account.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`accountDetails?`
Details of the person or corporate associated with this virtual account. Only required for on-behalf-of collections via Virtual Account.
`virtualAccountName*string`
The name associated with the virtual account.
For DBS, maximum length is 50 characters.
`virtualAccountNumber*string`
The complete virtual account number including any mandatory prefixes.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/virtual-accounts" \
-H "Content-Type: application/json" \
-d '{
"virtualAccountName": "string",
"virtualAccountNumber": "string"
}'
```
#### Response example (200)
```json
{
"accountDetails": {
"address": {
"city": "string",
"country": "string",
"line1": "string",
"line2": "string",
"postalCode": "string",
"state": "string"
},
"alias": "string",
"countryOfIncorporation": "string",
"dateOfBirth": "string",
"dateOfIncorporation": "string",
"idCountry": "string",
"idNumber": "string",
"idType": "string",
"nationality": "string",
"type": "string"
},
"createdAt": "string",
"id": "string",
"internalAccountId": "string",
"resultCode": "string",
"status": "string",
"updatedAt": "string",
"virtualAccountName": "string",
"virtualAccountNumber": "string"
}
```
# Get a Virtual Account (https://docs.tryacme.com/reference/get-virtual-account)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`GET /v1/virtual-accounts/{id}`
Fields are written as `name*type` when required and `name?type` when optional.
Get a Virtual Account by ID.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X GET "https://example.com/v1/virtual-accounts/string"
```
#### Response example (200)
```json
{
"accountDetails": {
"address": {
"city": "string",
"country": "string",
"line1": "string",
"line2": "string",
"postalCode": "string",
"state": "string"
},
"alias": "string",
"countryOfIncorporation": "string",
"dateOfBirth": "string",
"dateOfIncorporation": "string",
"idCountry": "string",
"idNumber": "string",
"idType": "string",
"nationality": "string",
"type": "string"
},
"createdAt": "string",
"id": "string",
"internalAccountId": "string",
"resultCode": "string",
"status": "string",
"updatedAt": "string",
"virtualAccountName": "string",
"virtualAccountNumber": "string"
}
```
# Delete a Virtual Account (https://docs.tryacme.com/reference/delete-virtual-account)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/virtual-accounts/{id}/delete`
Fields are written as `name*type` when required and `name?type` when optional.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Path Parameters
`id*string`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Response Body
### 200 `*/*`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/virtual-accounts/string/delete"
```
#### Response example (200)
```json
{
"accountDetails": {
"address": {
"city": "string",
"country": "string",
"line1": "string",
"line2": "string",
"postalCode": "string",
"state": "string"
},
"alias": "string",
"countryOfIncorporation": "string",
"dateOfBirth": "string",
"dateOfIncorporation": "string",
"idCountry": "string",
"idNumber": "string",
"idType": "string",
"nationality": "string",
"type": "string"
},
"createdAt": "string",
"id": "string",
"internalAccountId": "string",
"resultCode": "string",
"status": "string",
"updatedAt": "string",
"virtualAccountName": "string",
"virtualAccountNumber": "string"
}
```
# Look Up Forex Rates (https://docs.tryacme.com/reference/forex-rate-lookup)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/forex/rate-lookup`
Fields are written as `name*type` when required and `name?type` when optional.
This API allows clients to retrieve indicative FX rates for multiple currency pairs in a single request. The rates returned are non-executable and intended for informational or estimation purposes only. This is useful for clients who need to preview or compare FX rates before initiating a trade, especially when working with multiple currencies.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`currencyPairs*array`
The currency pairs.
Items`1 <= items`
`tenor?string`
The tenor to search for rate.
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/forex/rate-lookup" \
-H "Content-Type: application/json" \
-d '{
"currencyPairs": [
"string"
]
}'
```
#### Response example (200)
```json
{
"rates": [
{
"ask": "string",
"bid": "string",
"currencyPair": "string"
}
],
"sourceTraceId": "string",
"tenor": "string",
"validUntil": "string"
}
```
# Create a Forex Booking (https://docs.tryacme.com/reference/create-a-forex-booking)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/forex/booking`
Fields are written as `name*type` when required and `name?type` when optional.
This API allows clients to book an FX trade by specifying the currency pair, amount, and type. It is currently supported for clients operating under a pre-agreed pricing model with the bank, allowing them to execute FX trades without needing to request an executable rate beforehand.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Header Parameters
`Idempotency-Key?string`
A unique value, eg. a UUID.
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`amount*integer`
The trade amount in a positive integer value in the specified currency's [smallest unit](/guides/minor-units-format). e.g. for SGD, $10 would be represented as 1000 (cents).
Format`int64`
`currencyPair*string`
A currency pair is two currency codes. The first is known as the base currency and the second as the quote currency. Each currency code is a three-letter ISO 4217 currency code in full uppercase. `USDSGD` with `BUY` type means you want to buy USD by selling SGD; `USDSGD` with `SELL` type means you want to sell USD to buy SGD.
Match`^[A-Z]{6}$`
`tenor*"TODAY"`
The tenor for the forex booking.
Value in
- "TODAY"
`type*string`
The type of the trade.
Value in
- "BUY"
- "SELL"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/forex/booking" \
-H "Content-Type: application/json" \
-d '{
"amount": 0,
"currencyPair": "string",
"tenor": "TODAY",
"type": "BUY"
}'
```
#### Response example (200)
```json
{
"amount": 0,
"contraAmount": 0,
"createdAt": "string",
"currencyPair": "string",
"id": "string",
"rate": "string",
"resultCode": "string",
"sourceTraceId": "string",
"status": "string",
"tenor": "string",
"transactionReference": "string",
"type": "string",
"updatedAt": "string"
}
```
# Create a Digital Asset Transfer (https://docs.tryacme.com/reference/digital-assets-transfer)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/digital-assets/transfer`
Fields are written as `name*type` when required and `name?type` when optional.
Perform a deposit or withdrawal of digital assets.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`Deposit`
`type*string`
`accountNumber*string`
Custody account number.
Match`^[0-9]+$`
Length`0 <= length <= 12`
`assetQuantity*number`
Asset quantity, as a decimal string.
| Symbol | Maximum Precision | Minimum Quantity |
| --- | --- | --- |
| BCH | 8 | - |
| BTC | 8 | - |
| DOT | 10 | 1.0 |
| ETH | 18 | - |
| ETHW | 18 | - |
| XRP | 6 | - |
| ADA | 6 | 1.0 |
| USDC | 6 | - |
For symbols without a minimum quantity, the minimum quantity is the smallest value according to the maximum precision.
Range`0 <= value`
`assetSymbol*string`
Asset symbol.
Value in
- "BCH"
- "BTC"
- "DOT"
- "ETH"
- "ETHW"
- "XRP"
- "ADA"
- "USDC"
- "RLUSD"
- "SGBENJI"
`customerReference*string`
A unique reference for this transfer.
Match`^[a-zA-Z0-9]+$`
Length`0 <= length <= 16`
`destinationTag?string`
Destination tag. For `assetSymbol = XRP`, set a valid destination tag; else the value defaults to "1".
Match`^[a-zA-Z0-9\-]+$`
Length`0 <= length <= 20`
`walletAddress*string`
Wallet address.
Match`^[a-zA-Z0-9]+$`
Length`0 <= length <= 128`
`walletProvider*string`
Wallet provider.
Value in
- "SELF_MANAGED"
- "BITGO"
- "BITSTAMP"
- "BITSTAMP_EU"
- "BITTIME"
- "COPPER"
- "CRYPTO_COM"
- "LUNO"
- "OSL"
- "QCP"
- "SPARROW"
- "UNITRUST"
- "UPBIT"
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/digital-assets/transfer" \
-H "Content-Type: application/json" \
-d '{
"type": "string"
}'
```
#### Response example (200)
```json
{
"accountNumber": "string",
"actualFee": "string",
"assetQuantity": "string",
"assetSymbol": "string",
"blockchainStatus": "string",
"customerReference": "string",
"destinationAddress": "string",
"destinationTag": "string",
"estimatedFee": "string",
"feeType": "string",
"originatorAddress": "string",
"settlementDate": "2019-08-24",
"status": "string",
"transactionHash": "string",
"type": "string",
"ultimateReceiverAccountNumber": "string",
"ultimateReceiverName": "string",
"walletAddress": "string",
"walletProvider": "string"
}
```
# Look up Digital Asset Transfer status (https://docs.tryacme.com/reference/digital-assets-transfer-status)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/digital-assets/transfer-status`
Fields are written as `name*type` when required and `name?type` when optional.
Look up the statuses of one or more digital asset transfers.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`[index: integer]?`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/digital-assets/transfer-status" \
-H "Content-Type: application/json" \
-d '[
{
"customerReference": "string",
"type": "DEPOSIT"
}
]'
```
#### Response example (200)
```json
{
"invalid": [
{
"customerReference": "string",
"errorMessage": "string",
"type": "string"
}
],
"valid": [
{
"accountNumber": "string",
"actualFee": "string",
"assetQuantity": "string",
"assetSymbol": "string",
"blockchainStatus": "string",
"customerReference": "string",
"destinationAddress": "string",
"destinationTag": "string",
"estimatedFee": "string",
"feeType": "string",
"originatorAddress": "string",
"settlementDate": "2019-08-24",
"status": "string",
"transactionHash": "string",
"type": "string",
"ultimateReceiverAccountNumber": "string",
"ultimateReceiverName": "string",
"walletAddress": "string",
"walletProvider": "string"
}
]
}
```
# Look up Digital Asset Balance (https://docs.tryacme.com/reference/digital-assets-balance)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
`POST /v1/digital-assets/balance`
Fields are written as `name*type` when required and `name?type` when optional.
Look up the balances of one or more digital assets.
## Authorization
`authorization`
`AuthorizationBearer `
Set Your Secret API Key
In: `header`
## Request Body
`application/json`
TypeScript Definitions
Use the request body type in TypeScript.
`accountNumber*string`
The digital asset account number.
Match`^[0-9]+$`
Length`0 <= length <= 12`
`assetSymbol?string`
Asset symbol. If `assetSymbol` is specified, balances would only contain a single entry of the specified asset. If no `assetSymbol` is specified, balances of all assets in the account are returned.
Value in
- "BCH"
- "BTC"
- "DOT"
- "ETH"
- "ETHW"
- "XRP"
- "ADA"
- "USDC"
- "RLUSD"
- "SGBENJI"
`date?string`
Date in ISO 8601 format. If `date` is specified, the balance returned will be as of 0000H on that date. If no `date` is specified, the current balance is returned.
Format`date`
## Response Body
### 200 `*/*`
### 400 `application/json`
### 429 `application/json`
#### Request example (cURL)
```bash
curl -X POST "https://example.com/v1/digital-assets/balance" \
-H "Content-Type: application/json" \
-d '{
"accountNumber": "string"
}'
```
#### Response example (200)
```json
{
"accountNumber": "string",
"balances": [
{
"aggregateBalance": "string",
"assetSymbol": "string",
"availableBalance": "string",
"pendingDeposit": "string",
"pendingWithdrawal": "string"
}
]
}
```
[
Look up Digital Asset Transfer status
Previous Page
](/reference/digital-assets-transfer-status)
# September 2026 (https://docs.tryacme.com/changelog/2026-09)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## Sep 10, 2026 [#sep-10-2026]
### Direct Debit Authorization Test Mode: Mock `payerIdType` and `payerIdHash` Are Now Opt-In (API) [#direct-debit-authorization-test-mode-mock-payeridtype-and-payeridhash-are-now-opt-in-api]
Successful Singapore eGIRO Direct Debit Authorizations in test mode once again return `null` for `payerIdType` and `payerIdHash` by default. The mock values introduced on Aug 14, 2026 are still available, but only on request.
* To receive them, create the authorization with `billReferenceNumber` set to `S1234567D`. `payerIdType` is then `NRIC` and `payerIdHash` is the SHA-256 hex digest of uppercased `S1234567D`.
* Any other bill reference number returns `null` for both fields.
* Live mode, Malaysia, and Hong Kong are unchanged.
#### Affected pages: [#affected-pages]
* [Special Test Mode Values](/guides/special-test-mode-values)
***
## Sep 9, 2026 [#sep-9-2026]
### Sample Responses for Payments and Collections [#sample-responses-for-payments-and-collections]
The API reference now shows worked sample responses for the payment and collection endpoints,
with one sample per supported country for direct debit and hosted payments.
Every endpoint also documents its `429` rate limit response, and endpoints that take input document
the `400` response with `INVALID_REQUEST_PARAMETER`.
#### Affected pages: [#affected-pages-1]
* [Create a Payment](/reference/post-payments)
* [Get a Payment](/reference/get-payments-id)
* [Create a Batch Payment](/reference/post-batch-payments)
* [Create a Direct Debit Authorization](/reference/post-direct-debit-authorizations)
* [Create a Direct Debit Collection](/reference/post-direct-debit-payments)
* [Create a Hosted Payment](/reference/post-hosted-payments)
***
## Sep 8, 2026 [#sep-8-2026]
### Beneficiary Bank Name for Citi Taiwan and Philippines Domestic Payments [#beneficiary-bank-name-for-citi-taiwan-and-philippines-domestic-payments]
Citi rejects Taiwan and Philippines domestic files without a beneficiary bank name, so
`receiver.bankName` is now **required** on `TW_ACH`, `TW_RTGS` and `PH_PESONET`. It is
the bank's name, not a BIC.
#### Affected pages: [#affected-pages-2]
* [Acme Citibank Taiwan Payments (H2H)](/guides/citi-tw-payments)
***
## Sep 7, 2026 [#sep-7-2026]
### ANZ Australia Address Field Limits Corrected [#anz-australia-address-field-limits-corrected]
The [Acme ANZ Australia Payments](/guides/anz-au-payments) guide described `receiver.address` as
three fields of 35 characters. That was not accurate. The post code accepts at most 16 characters,
because it maps to `PstCd` in the ISO 20022 pain.001 message. The guide now lists each address
subfield with its own limit, for both `TT` and `AU_HVCS`.
The guide also listed `receiver.address` as optional for `TT`. It is mandatory. The country is
always required. If neither address line is given, the city, state and post code are all required.
Nothing changed in the API. Acme has always validated the address this way. Only the guide was
wrong.
#### Affected pages: [#affected-pages-3]
* [Acme ANZ Australia Payments](/guides/anz-au-payments)
***
## Sep 4, 2026 [#sep-4-2026]
### API Rate Limits [#api-rate-limits]
We now enforce rate limits on the Acme API, per API key and HTTP method. A request over the limit
receives HTTP `429` with a `Retry-After` header. The limits are sized well above observed
integration traffic, and can be raised per API key on request. See the new
[Rate limits](/guides/rate-limits) guide.
#### Affected pages: [#affected-pages-4]
* [Rate limits](/guides/rate-limits)
***
## Sep 3, 2026 [#sep-3-2026]
### Standard Chartered Hong Kong and UAE Payment Rules [#standard-chartered-hong-kong-and-uae-payment-rules]
We published payment rules for [Standard Chartered Hong Kong](/guides/scb-hk-api-payments) and [Standard Chartered UAE](/guides/scb-ae-api-payments) over the SCB Open Banking API. The Hong Kong page covers `HK_FPS_PROXY`, `HK_FPS_ACCOUNT`, `HK_ACH`, `HK_CHATS`, `BKTR`, and `TT`, including the FPS proxy formats and the per-rail currency restrictions. The UAE page covers `UAE_IBFT`, `UAE_FTS`, `TT`, and `BKTR`, including the mandatory Purpose of Payment code, UAE IBAN handling, and the supported sender account currencies.
#### Link to payment rules: [#link-to-payment-rules]
* [Acme Standard Chartered Bank Hong Kong Payments (API)](/guides/scb-hk-api-payments)
* [Acme Standard Chartered Bank UAE Payments (API)](/guides/scb-ae-api-payments)
***
## Sep 1, 2026 [#sep-1-2026]
### DBS Singapore Receiving Party Purpose Codes Reference [#dbs-singapore-receiving-party-purpose-codes-reference]
We added a dedicated [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes) page covering the `outgoingPurposeCode` field on DBS Singapore `TT` payments. It lists the country-specific purpose code list for each corridor that requires one.
#### Affected pages: [#affected-pages-5]
* [Acme DBS Singapore Receiving Party Purpose Codes](/guides/dbs-sg-receiving-party-purpose-codes)
# August 2026 (https://docs.tryacme.com/changelog/2026-08)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## Aug 31, 2026 [#aug-31-2026]
### DBS Singapore MEPS/TT Purpose Code Corridors [#dbs-singapore-mepstt-purpose-code-corridors]
We expanded the `outgoingPurposeCode` corridor list on the DBS Singapore MEPS and TT ISO20022 payment rules.
#### Affected pages: [#affected-pages]
* [Acme DBS Singapore Payments (API)](/guides/dbs-sg-api-payments)
* [Acme DBS Singapore Payments (H2H)](/guides/dbs-sg-payments)
***
## Aug 17, 2026 [#aug-17-2026]
### Citibank China Payment Rules [#citibank-china-payment-rules]
We published payment rules for [Citibank China](/guides/citi-cn-payments) via [Acme batch payments](/reference/post-batch-payments). The page covers field validation and constraints for `CN_ACH`, `CN_RTGS`, `CN_TT_INTL`, and `CN_TT_DOM`, including SAFE BOP regulatory reporting for the TT types.
#### Link to payment rules: [#link-to-payment-rules]
* [Acme Citibank China Payments](/guides/citi-cn-payments)
***
## Aug 14, 2026 [#aug-14-2026]
### Direct Debit Authorization `payerAuthorizedMaxAmount` (API) [#direct-debit-authorization-payerauthorizedmaxamount-api]
Direct Debit Authorization API responses and webhooks now include `payerAuthorizedMaxAmount`: the maximum payment amount the payer authorized with their bank, in SGD minor units.
* Only a non-zero value for Singapore eGIRO Direct Debit Authorizations, and only after the payer has approved.
* Returns `0` before approval (including on Create), when the bank did not return a payer-set limit, and for other DDA types (for example HK or Malaysia FPX). Use `precheckMaxAmount` for the Acme-side cap on those types.
#### Affected pages: [#affected-pages-1]
* [List Direct Debit Authorizations](/reference/get-direct-debit-authorizations)
* [Get a Direct Debit Authorization](/reference/get-direct-debit-authorizations-id)
* [Acme webhook examples](/guides/webhook-examples)
### Mock `payerIdType` and `payerIdHash` in Direct Debit Authorization test mode (API) [#mock-payeridtype-and-payeridhash-in-direct-debit-authorization-test-mode-api]
Successful Singapore eGIRO Direct Debit Authorizations in test mode now return mock payer identification fields, so you can test hash handling without a live bank.
* `payerIdType` is `NRIC`.
* `payerIdHash` is the SHA-256 hex digest of uppercased `S1234567D`.
* Live mode, Malaysia, and Hong Kong are unchanged.
#### Affected pages: [#affected-pages-2]
* [Special Test Mode Values](/guides/special-test-mode-values)
***
## Aug 7, 2026 [#aug-7-2026]
### Documentation: Maybank Singapore, Citibank Taiwan, and Banco Azteca Mexico Payment Rules Corrected [#documentation-maybank-singapore-citibank-taiwan-and-banco-azteca-mexico-payment-rules-corrected]
We corrected the payment rules pages below to match Acme's validation. The validation behavior is unchanged.
Maybank Singapore (H2H):
* `paymentDetails` and `purposeCode` must not be provided for BKTR payments. They were previously documented as optional, and the BKTR example request was corrected accordingly.
* `purposeCode` allows up to 5 characters. It was previously stated as 35.
* `receiver.bankAccountNumber` accepts digits only. It was previously stated as alphanumeric.
* FAST and PAYNOW payments must not be more than SGD 200,000 in amount. This limit was previously undocumented.
* BKTR payments are not restricted to SGD. Currency was previously documented as SGD only for all payment types.
* `receiver.bank` is validated as alphanumeric with a maximum of 11 characters, not against the BIC pattern.
Citibank Taiwan (H2H):
* The full receiver address must fit in 3 lines of 35 SWIFT characters. It was previously stated as 2 lines.
Banco Azteca Mexico (API):
* Field names in the tables were corrected to the single payment request format (for example `customerReference` instead of `payments[N].customerReference`).
#### Affected pages: [#affected-pages-3]
* [Acme Maybank Singapore Payments (H2H)](/guides/mbb-sg-payments)
* [Acme Citibank Taiwan Payments (H2H)](/guides/citi-tw-payments)
* [Acme Banco Azteca Mexico Payments (API)](/guides/baz-mx-payments)
***
## Aug 6, 2026 [#aug-6-2026]
### Maybank Singapore Payment Status Mapping [#maybank-singapore-payment-status-mapping]
We documented how Maybank Singapore (H2H) transaction statuses map to Acme payment statuses on the payment rules page.
#### Link to payment rules: [#link-to-payment-rules-1]
* [Acme Maybank Singapore Payments (H2H)](/guides/mbb-sg-payments)
***
## Aug 4, 2026 [#aug-4-2026]
### Per-payment Currency in Batch Payments (API) [#per-payment-currency-in-batch-payments-api]
The [Create a Batch Payment](/reference/post-batch-payments) API now accepts an optional `currency` field on each individual payment.
* When omitted, the payment uses the batch-level `currency`.
* When provided, it overrides the batch-level `currency` for that payment.
* The currency must be a currency supported by the payment type.
#### Affected pages: [#affected-pages-4]
* [Create a Batch Payment](/reference/post-batch-payments)
* [Batch Payments](/guides/batch-payments)
# July 2026 (https://docs.tryacme.com/changelog/2026-07)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## Jul 22, 2026 [#jul-22-2026]
### CIMB Singapore TT Purpose Code (API) [#cimb-singapore-tt-purpose-code-api]
The [CIMB Singapore (API)](/guides/cimb-api-payments) TT payment type now supports the optional `purposeCode` field. Provide a 1 to 4 character ISO 20022 ExternalPurpose code to describe the nature of the transaction. We added the full list of supported purpose codes to the payment rules page.
#### Link to payment rules: [#link-to-payment-rules]
* [Acme CIMB Singapore Payments (API)](/guides/cimb-api-payments)
***
## Jul 21, 2026 [#jul-21-2026]
### Report Files API [#report-files-api]
We added the New Report Files API. You can now list and download report files that Acme retrieves from your banks on your behalf.
* [List Report Files](/reference/get-report-files) returns the report files available to your organization.
* [Download a Report File](/reference/post-report-files-id-download) returns a short-lived link to fetch the file content.
***
## Jul 20, 2026 [#jul-20-2026]
### Full Currency List on Minor Units Format [#full-currency-list-on-minor-units-format]
We expanded the [Minor Units Format](/guides/minor-units-format) reference page with complete lists of the currencies that do not use 2 decimal places. It now names every currency with no minor unit (0 decimal places) and every currency with 3 decimal places. We also clarified that the number of decimal places follows the ISO 4217 scale, not the smallest physical coin or note (for example, TWD uses 2 decimal places).
#### Affected pages: [#affected-pages]
* [Minor Units Format](/guides/minor-units-format)
***
## Jul 15, 2026 [#jul-15-2026]
### CIMB Singapore TT Payment Rules (API) [#cimb-singapore-tt-payment-rules-api]
We added payment rules for the TT payment type to [Acme CIMB Singapore Payments (API)](/guides/cimb-api-payments) via [Acme single payments](/reference/post-payments). The section covers field validation and constraints for cross-border telegraphic transfers.
#### Link to payment rules: [#link-to-payment-rules-1]
* [Acme CIMB Singapore Payments (API)](/guides/cimb-api-payments)
***
## Jul 10, 2026 [#jul-10-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported]
We published payment rules for [Standard Chartered Bank Singapore (H2H)](/guides/scb-sg-h2h-payments) via [Acme batch payments](/reference/post-batch-payments). The page covers field validation and constraints for the FAST, GIRO, MEPS, SG_PAYROLL, BKTR, and TT payment types.
#### Link to payment rules: [#link-to-payment-rules-2]
* [Acme Standard Chartered Bank Singapore Payments (H2H)](/guides/scb-sg-h2h-payments)
### SCB ISO 20022 Address Requirements [#scb-iso-20022-address-requirements]
We added notes on Standard Chartered Bank's ISO 20022 migration to the SCB payment rules pages. The beneficiary town name (`address.city`) and `address.country` become mandatory for all payment types. Refer to the callout on each page for details and links to the SCB guidelines.
#### Affected pages: [#affected-pages-1]
* [Acme Standard Chartered Bank Singapore Payments (H2H)](/guides/scb-sg-h2h-payments)
* [Acme Standard Chartered Bank Singapore Payments (API)](/guides/scb-sg-api-payments)
* [Acme Standard Chartered Bank Great Britain Payments (API)](/guides/scb-gb-api-payments)
***
## Jul 3, 2026 [#jul-3-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported-1]
We published payment rules for [Banco Azteca Mexico (API)](/guides/baz-mx-payments) via [Acme single payments](/reference/post-payments). The page covers field validation and constraints for the MX_SPEI and BKTR payment types.
#### Link to payment rules: [#link-to-payment-rules-3]
* [Acme Banco Azteca Mexico Payments (API)](/guides/baz-mx-payments)
***
## Jul 1, 2026 [#jul-1-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported-2]
We published payment rules for [Citibank Taiwan (H2H)](/guides/citi-tw-payments) via [Acme batch payments](/reference/post-batch-payments). The page covers field validation and constraints for the BKTR, TT, TW_ACH, and TW_RTGS payment types, including the Taiwan Central Bank regulatory reporting fields required for TT.
#### Link to payment rules: [#link-to-payment-rules-4]
* [Acme Citibank Taiwan Payments (H2H)](/guides/citi-tw-payments)
# June 2026 (https://docs.tryacme.com/changelog/2026-06)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## Jun 26, 2026 [#jun-26-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported]
We published payment rules for [Maybank Singapore (H2H)](/guides/mbb-sg-payments). The page covers field validation and constraints for the FAST, PAYNOW, GIRO, and BKTR payment types.
#### Link to payment rules: [#link-to-payment-rules]
* [Acme Maybank Singapore Payments (H2H)](/guides/mbb-sg-payments)
***
## Jun 25, 2026 [#jun-25-2026]
### Documentation: OCBC Singapore Payment Rules Corrected [#documentation-ocbc-singapore-payment-rules-corrected]
We corrected and expanded the [OCBC Singapore payment rules](/guides/ocbc-sg-payments) to match Acme's validation. The validation behavior is unchanged. These updates correct the documentation.
* FAST/GIRO `receiver.name` allows up to 140 characters. It was previously stated as 35.
* MEPS and TT `customerReference` allows up to 16 characters. It was previously stated as 25.
* PAYNOW now lists the mandatory `receiver.name` field (SWIFT, up to 140 characters).
* PAYNOW `receiver.proxyType` now lists `NRIC` as a supported value.
* PAYNOW `receiver.proxyValue` formats were corrected for MOBILE, UEN, and VPA, and an NRIC format was added.
* PAYNOW (FAST) and PAYNOW_GIRO are now documented as separate payment types. `VPA` is only supported for PAYNOW (FAST).
* TT `receiver.address` is mandatory. It was previously stated as optional.
* TT now lists the optional `receiver.localRoutingIdentifier` field (alphanumeric, up to 35 characters).
* MEPS now lists the optional `receiver.intermediaryBank` field (BIC11).
* We documented the supported currencies, the GIRO and PAYNOW_GIRO payment date rule, and the FAST and PAYNOW (FAST) amount limit.
#### Link to updated payment rules: [#link-to-updated-payment-rules]
* [Acme OCBC Bank Singapore Payments (H2H)](/guides/ocbc-sg-payments)
***
## Jun 24, 2026 [#jun-24-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported-1]
Added support for **Standard Chartered Bank** [single payments](/reference/post-payments) with the following payment types:
SCB SG:
* FAST (Fast and Secure Transfers) — real-time interbank fund transfer (IBFT) via the FAST network
* MEPS (MAS Electronic Payment System) — high-value SGD interbank transfers
* BKTR (Intra-Account Funds Transfer) — book transfer between accounts within SCB Singapore.
* TT (Telegraphic Transfer) — cross-border international SWIFT transfer.
SCB GB:
* GB_FPS (Faster Payment System) - real-time interbank fund transfer (IBFT) via the FPS network
* GB_CHAPS (Real Time Gross Settlement) - same-day high-value local bank transfer via the Real Time Gross Settlement system
* GB_SEPA (Single Euro Payments Area)- Payyments between SEPA countries. ACH(SEPA) payment is an electronic fund transfer to the payee’s account for low-value and bulk volume.
* BKTR (Intra-Account Funds Transfer) — book transfer between accounts within SCB GB.
* TT (Telegraphic Transfer) — cross-border international SWIFT transfer.
#### Links to new payment rules: [#links-to-new-payment-rules]
* [Acme Standard Chartered Bank Singapore Payments (API)](/guides/scb-sg-api-payments)
* [Acme Standard Chartered Bank Great Britain Payments (API)](/guides/scb-gb-api-payments)
***
## Jun 16, 2026 [#jun-16-2026]
### Enhancement: DBS Singapore API Updates [#enhancement-dbs-singapore-api-updates]
#### The DBS Singapore Payment API now forwards bank charge instructions to DBS for MEPS and TT APIs. [#the-dbs-singapore-payment-api-now-forwards-bank-charge-instructions-to-dbs-for-meps-and-tt-apis]
* `bankChargeBearer` accepts `SENDER`, `RECEIVER`, or `SHARED` and is now forwarded to DBS. Previously it was accepted but not sent, so DBS applied its default.
* New optional `chargeAccount` field sets the account DBS debits for the bank charges. When omitted, DBS debits the originating account.
#### The DBS Singapore Payment API now accepts an optional `paymentDetails` field. [#the-dbs-singapore-payment-api-now-accepts-an-optional-paymentdetails-field]
* For ACT, MEPS, and TT, `paymentDetails` is sent to the beneficiary bank. It is also included in the email advice when an advice email is provided.
* For FAST and PAYNOW, `paymentDetails` is not sent to the beneficiary bank. It is included in the email advice only when an advice email is provided.
#### We corrected and clarified the DBS Singapore API payment rules to match Acme's validation. The validation behavior is unchanged. These updates correct the documentation. [#we-corrected-and-clarified-the-dbs-singapore-api-payment-rules-to-match-acmes-validation-the-validation-behavior-is-unchanged-these-updates-correct-the-documentation]
* FAST/PAYNOW `receiver.name` charset is `G_I3` up to 140 characters. It was previously stated as SWIFT.
* ACT `receiver.name` charset on the V4 API is `SWIFT` up to 35 characters. It was previously stated as G_I3.
* We noted that `receiver.name` for FAST, PAYNOW, and the V4 tables is validated by DBS, not by Acme upfront.
#### Link to updated payment rules: [#link-to-updated-payment-rules-1]
* [Acme DBS Singapore Payments (API)](/guides/dbs-sg-api-payments)
***
### Enhancement: DBS Singapore H2H Updates [#enhancement-dbs-singapore-h2h-updates]
#### The DBS Singapore H2H advice email and DBS IDEAL display now source the Invoice Details field from `paymentDetails`. [#the-dbs-singapore-h2h-advice-email-and-dbs-ideal-display-now-source-the-invoice-details-field-from-paymentdetails]
* `paymentDetails` now populates the **Invoice Details** field in the advice email.
* `customerReference` now populates the **Client Reference** field in the advice email.
* If `paymentDetails` is not provided, Acme uses `customerReference` as the **Invoice Details** so the field is never empty.
* This applies to all H2H payment types when advice emails are provided in `paymentAdviceEmails` for the payment.
#### We corrected the existing DBS Singapore H2H payment rules to match Acme's validation. This is a documentation change only and does not change behavior. [#we-corrected-the-existing-dbs-singapore-h2h-payment-rules-to-match-acmes-validation-this-is-a-documentation-change-only-and-does-not-change-behavior]
* `receiver.address` is a structured object with the fields `line1`, `line2`, `city`, `state`, `postalCode`, and `country`. Acme flattens these into **3 lines of up to 35 SWIFT characters** before submission.
* The address packing 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.
* The MEPS and TT tables previously inaccurately documented the address as a single mandatory `line1` of 35 characters.
* `receiver.bankAccountNumber` is **alphanumeric** for FAST, GIRO, and ACT. It allows alphanumeric plus the hyphen character for MEPS and TT. It was previously stated as numeric.
* We documented the existing optional fields `receiver.intermediaryBank` (MEPS, TT) and `receiver.localRoutingIdentifier` (TT).
#### Link to updated payment rules: [#link-to-updated-payment-rules-2]
* [Acme DBS Singapore Payments (H2H)](/guides/dbs-sg-payments)
***
## Jun 11, 2026 [#jun-11-2026]
### Enhancement: Zand Bank UAE — Improved Transaction Types Categorization [#enhancement-zand-bank-uae--improved-transaction-types-categorization]
* Improved `transactionType` categorization in [Transactions API](/reference/get-transactions) for Zand Bank UAE transactions, aligned with the [Zand payment types](/guides/zand-ae-payments).
* Removed domestic transactions with inaccurate `transactionType` : `ACH`, `RTP`.
#### Link to Zand Bank Transaction Types Categorization: [#link-to-zand-bank-transaction-types-categorization]
* [Acme Zand Bank UAE Transactions](/guides/zand-ae-transactions)
***
## Jun 5, 2026 [#jun-5-2026]
### Upcoming Change: DBS Singapore — SWIFT ISO 20022 CBPR+ and HVPS+ migration (API and H2H) [#upcoming-change-dbs-singapore--swift-iso-20022-cbpr-and-hvps-migration-api-and-h2h]
As part of Acme's migration across all banking partners to comply with **ISO 20022 CBPR+ and HVPS+** requirements ahead of the **SWIFT November 2026 deadline**, the **DBS Singapore** payment rules will change across both the **API** and **H2H** integrations.
Acme will be migrating to the new DBS endpoints and file format once clients are ready. In the meantime, clients should **start updating their integrations now** — particularly to populate the newly **required** fields and sanitize values that fall outside the new character sets — so that payments continue to be accepted after the cutover.
#### Summary of change: [#summary-of-change]
**DBS Singapore H2H** (MEPS, TT, ACT):
* `receiver.name` max length increased from **35 → 140** across MEPS, TT, and ACT.
* MEPS and TT: `receiver.address.city` and `receiver.address.country` are now **required**. `receiver.address.line1` and `line2` max length increases to **70**; `state` and `postalCode` remain optional.
* New `outgoingPurposeCode` field for **TT** — **mandatory** when the payment currency is `MYR`, `CNH`/`CNY`, `INR`, or `KWD`, or when the beneficiary country is **Myanmar (`MM`)** or **United Arab Emirates (`AE`)**. Partners should obtain the applicable purpose code list from DBS or refer to the destination country's regulator.
**DBS Singapore API** (ACT):
* `receiver.name` max length increased from **35 → 140**.
* **Breaking change**: `receiver.name` charset is restricted from `G_I3` → `SWIFT`. Existing payee names containing characters outside the SWIFT character set (e.g. `!`, `#`, `$`, `%`, `&`, `*`, `;`, `=`, `@`, `[`, `]`, `^`, `_`, `` ` ``, `{`, `}`, `|`, `~`) will be **rejected**. Clients must sanitize stored payee names before migrating.
#### Link to updated payment rules: [#link-to-updated-payment-rules-3]
* [Acme DBS Singapore Payments (H2H)](/guides/dbs-sg-payments)
* [Acme DBS Singapore Payments (API)](/guides/dbs-sg-api-payments)
# May 2026 (https://docs.tryacme.com/changelog/2026-05)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## May 28, 2026 [#may-28-2026]
### New Feature: Payer name updates for MY FPX Hosted Payments [#new-feature-payer-name-updates-for-my-fpx-hosted-payments]
* Hosted Payments for **FPX Malaysia** now support a `fullName` field on the request `payer` object, as an alternative to `firstName` and `lastName`. This is useful for customers whose names are not easily split into given and family names (e.g. Malay or single-name customers).
* The two formats are mutually exclusive — `fullName` must not be combined with `firstName` or `lastName`. When `fullName` is provided in the request, it is echoed back in the Hosted Payment response, and `firstName`/`lastName` are `null` (and vice versa).
* The Hosted Payment response `payer` object now also includes:
* `returnedName` — bank-confirmed payer name returned after payment completes. May differ from the name submitted in the request.
* `payerBank` — FPX bank name used by the customer to complete payment (e.g. "Malayan Banking Berhad (M2U)").
#### Link to Acme Hosted Payments: [#link-to-acme-hosted-payments]
* [Hosted Payments](/reference/post-hosted-payments)
***
## May 25, 2026 [#may-25-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported]
Added support for **UOB Malaysia** [batch payments](/reference/post-batch-payments) with the following payment types:
* TT (Telegraphic Transfer) — cross-border international SWIFT transfer.
* MY_RENTAS (Real-time Electronic Transfer of Funds and Securities) — high-value MYR domestic transfer.
* MY_IBG (Interbank GIRO) — low-value MYR interbank fund transfers.
* MY_IAFT (Intra-Account Funds Transfer) — book transfer between accounts within UOB Malaysia.
* MY_DUITNOW — MYR proxy-based payments via NRIC, Passport, Mobile, Business Registration, or Army number.
* MY_IBFT (Interbank Funds Transfer) — MYR interbank fund transfers via bank account.
UOB Singapore and Malaysia payment rules are now grouped under a dedicated **UOB** category in the Payment Rules navigation.
#### New reference page: [#new-reference-page]
* [Acme UOB Malaysia Payments](/guides/uob-my-payments)
***
## May 22, 2026 [#may-22-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported-1]
Added support for **Zand Bank UAE** [single payment](/reference/post-payments) with the following payment types:
* BKTR (Book Transfer) — intra-Zand same-bank transfer between two Zand accounts.
* UAE_FTS (UAE Interbank Fund Transfer Service) — high-value domestic interbank transfer (> 50,000 AED).
* UAE_IBFT (UAE Interbank Immediate Payment Instruction) — low-value domestic interbank transfer (≤ 50,000 AED).
* TT (Telegraphic Transfer) — cross-border international SWIFT transfer.
#### New reference page: [#new-reference-page-1]
* [Acme Zand Bank UAE (API) Payments](/guides/zand-ae-payments)
# April 2026 (https://docs.tryacme.com/changelog/2026-04)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## Apr 28, 2026 [#apr-28-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported]
Added support for **CIMB Singapore H2H** [batch payments](/reference/post-batch-payments) with the following payment types:
* FAST (Fast and Secure Transfers) — real-time interbank fund transfer via the FAST network
* GIRO (General Interbank Recurring Order) — low-value interbank fund transfers
* MEPS (MAS Electronic Payment System) — high-value SGD interbank transfers
* TT (Telegraphic Transfer) — cross-border wire transfers in any ISO currency
* BKTR (Book Transfer) — internal fund transfers between accounts within the same bank
#### New reference page: [#new-reference-page]
* [Acme CIMB (H2H) Payments](/guides/cimb-h2h-payments)
***
## Apr 21, 2026 [#apr-21-2026]
### 1. New Bank & Payment Types Supported [#1-new-bank--payment-types-supported]
Added support for **RHB Malaysia** [single payment](/reference/post-payments) with the following payment types:
* MY_IBG (Interbank GIRO) — low-value interbank fund transfer system in Malaysia, operated by PayNet.
* MY_IBFT (Intrabank Fund Transfer) — real-time interbank fund transfer (IBFT) via bank account transfer.
#### New reference page: [#new-reference-page-1]
* [Acme RHB Malaysia (API) Payments](/guides/rhb-my-payments)
### 2. Updated DBS SG API and H2H Payment rules [#2-updated-dbs-sg-api-and-h2h-payment-rules]
* [Acme DBS Singapore (API) Payments](/guides/dbs-sg-api-payments)
* [Acme DBS Singapore (H2H) Payments](/guides/dbs-sg-payments)
***
## Apr 10, 2026 [#apr-10-2026]
### New Bank & Payment Types Supported [#new-bank--payment-types-supported-1]
Added support for **CIMB Singapore** [single payment](/reference/post-payments) with the following payment types:
* BKTR (Book Transfer) — instant fund transfers between accounts within the same bank (CIBBSGSGXXX)
* FAST (Fast and Secure Transfers) — real-time interbank fund transfer (IBFT) via the FAST network
#### New reference page: [#new-reference-page-2]
* [Acme CIMB (API) Payments](/guides/cimb-api-payments)
# March 2026 (https://docs.tryacme.com/changelog/2026-03)
> For AI agents: the documentation index is at [llms.txt](https://docs.tryacme.com/llms.txt), with every page in one file at [llms-full.txt](https://docs.tryacme.com/llms-full.txt). Each page is also available as Markdown by appending `.md` to its URL.
{/* GENERATED by scripts/gen-changelog.mjs from content/changelog.mdx — do not edit. */}
## March 25, 2026 [#march-25-2026]
### New Feature: Maker-Checker flow for Payments [#new-feature-maker-checker-flow-for-payments]
We've published documentation for the Maker-Checker Payment Flow (Beta), introducing a two-step approval flow for payment processing.
#### New endpoints: [#new-endpoints]
* [Approve a payment](/reference/post-payments-id-approve)
* [Reject a payment](/reference/post-payments-id-reject)
#### New reference page: [#new-reference-page]
* [Payment Lifecycle (Maker-checker flow)](/guides/maker-checker-payments)