Acme Citibank India Payments (H2H)
This describes validations / allowed data formats for Acme payments going through Citibank India. These will be validated by Acme and further validated by the bank. These rules may be stricter than what the bank requires.
Channel: H2H
- Batch payments, sent to Citibank as host-to-host (H2H) files. Create them with Create a Batch Payment.
- Single payments are not supported.
Supported types: IN_RTGS, IN_ACH, IN_IBFT, TT, BKTR.
Common Definitions
-
SWIFT Character Set:
- The 26 uppercase Latin letters
A-Z - The 26 lowercase Latin letters
a-z - The 10 digits
0-9 - Forward slash
/ - Hyphen
- - Question mark
? - Colon
: - Left and right parentheses
() - Full stop
. - Comma
, - Single quote
' - Plus sign
+ - Space
- The 26 uppercase Latin letters
-
IFSC:
- The 11 character Indian Financial System Code of the receiver's bank branch, in uppercase.
- 4 letters, then
0, then 6 letters or digits. For exampleHDFC0001234.
-
BIC:
- 8 or 11 character Bank Identifier Code in uppercase, for example
HDFCINBBXXX.
- 8 or 11 character Bank Identifier Code in uppercase, for example
-
Citi restrictions:
- For SWIFT character set: do not start a field with any of the following characters:
/,-,:
- For SWIFT character set: do not start a field with any of the following characters:
General notes
- A batch holds up to 1,000 payments.
paymentDatemust not be in the past, in India time (IST). It can be at most 90 days ahead.amountis in minor units. For example,150000is INR 1,500.00. See Minor units format.- The maximum amount per payment is 999,999,999 minor units. For INR, that is INR 9,999,999.99.
ISO 20022 Migration
Citi address requirements
- Citi is moving to the ISO 20022 (CBPR+) address format. If a receiver address is provided, it must carry a town name and a country.
- In India, Citi applies this to
TT. - Citi rejects a
TTpayment whose address is missingaddress.cityoraddress.country. This becomes mandatory in November 2026. - Acme already enforces this, and applies the same rule to
IN_RTGS:TT:address.cityandaddress.countryare always mandatory.IN_RTGS: the address is optional. If you provide it,address.cityandaddress.countryare mandatory, andaddress.countrymust beIN.
- Acme sends
postalCode,city,stateandcountryas structured fields, andline1andline2as address lines.
Payment Customer Reference
- Use
payments[N].customerReferenceas the unique identifier of your payments. - If
customerReferenceis not provided, Acme generates a 13 character unique alphanumeric reference. - The
customerReferenceis sent to the bank as the end-to-end ID of the payment.
IN_RTGS
Important
- Currency must be INR only.
- The minimum amount is INR 200,000.00 per payment.
- Send the receiver's IFSC in
receiver.localRoutingIdentifier. Do not sendreceiver.bank. - Do not send
bankChargeBearerorpurposeOfPayment. instructionForSenderBank: Citi accepts only/CONFIDENTIAL/.- If you provide
receiver.address,address.cityandaddress.countryare mandatory, andaddress.countrymust beIN. See ISO 20022 Migration.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 70 | 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 | 70 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | IFSC | 11 | M |
| payments[N].receiver.address.line1 | SWIFT | 35 | O |
| payments[N].receiver.address.line2 | SWIFT | 35 | O |
| payments[N].receiver.address.city | SWIFT | 35 | Conditional: M if address is provided (ISO 20022) |
| payments[N].receiver.address.state | SWIFT | 35 | O |
| payments[N].receiver.address.postalCode | SWIFT | 16 | O |
| payments[N].receiver.address.country | IN | 2 | Conditional: M if address is provided (ISO 20022) |
Example Request:
{
"type": "IN_RTGS",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "INR",
"payments": [
{
"amount": 50000000,
"customerReference": "INV2026001",
"paymentDetails": "Payment for invoice 2026001",
"receiver": {
"name": "Example Traders Private Limited",
"bankAccountNumber": "50100123456789",
"localRoutingIdentifier": "HDFC0001234",
"address": {
"line1": "1 MG Road",
"city": "Bengaluru",
"country": "IN"
}
}
}
]
}IN_ACH
Important
- Currency must be INR only.
- Send the receiver's IFSC in
receiver.localRoutingIdentifier. Do not sendreceiver.bank. - Do not send
bankChargeBearerorpurposeOfPayment.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 70 | 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 | 70 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | IFSC | 11 | 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 | IN | 2 | O |
Example Request:
{
"type": "IN_ACH",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "INR",
"payments": [
{
"amount": 2500000,
"customerReference": "INV2026002",
"paymentDetails": "Payment for invoice 2026002",
"receiver": {
"name": "Example Traders Private Limited",
"bankAccountNumber": "50100123456789",
"localRoutingIdentifier": "HDFC0001234"
}
}
]
}IN_IBFT
Important
- Instant payment through IMPS.
- Currency must be INR only.
- Send the receiver's IFSC in
receiver.localRoutingIdentifier. Do not sendreceiver.bank. - Do not send
bankChargeBearerorpurposeOfPayment.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 70 | 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 | 70 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 34 | M |
| payments[N].receiver.localRoutingIdentifier | IFSC | 11 | 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 | IN | 2 | O |
Example Request:
{
"type": "IN_IBFT",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "INR",
"payments": [
{
"amount": 1000000,
"customerReference": "INV2026003",
"paymentDetails": "Payment for invoice 2026003",
"receiver": {
"name": "Example Traders Private Limited",
"bankAccountNumber": "50100123456789",
"localRoutingIdentifier": "HDFC0001234"
}
}
]
}TT
Important
- Currency can be any valid ISO 4217 currency code.
purposeOfPaymentandpurposeCodeare both mandatory.purposeCodeisSfollowed by 4 digits. Use a code from Citibank India Purpose Codes.- Acme sends
purposeOfPaymentas line 1 andpurposeCodeas line 2 of the remittance information, thenpaymentDetails. instructionForSenderBank: Citi accepts only/CONFIDENTIAL/.receiver.address.cityandreceiver.address.countryare always mandatory. See ISO 20022 Migration.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 70 | O |
| payments[N].purposeOfPayment | SWIFT | 35 | M |
| payments[N].purposeCode | S followed by 4 digits See purpose codes | 5 | M |
| 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.bank | BIC | 11 | M |
| payments[N].receiver.intermediaryBank | BIC | 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 (ISO 20022) |
| 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 (ISO 20022) |
Example Request:
{
"type": "TT",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "USD",
"payments": [
{
"amount": 2500000,
"customerReference": "INV2026004",
"paymentDetails": "Invoice 2026004",
"purposeOfPayment": "Consulting services",
"purposeCode": "S1006",
"receiver": {
"name": "Example Supplies Pte Ltd",
"bank": "DBSSSGSGXXX",
"bankAccountNumber": "0123456789",
"address": {
"line1": "1 Example Road",
"city": "Singapore",
"postalCode": "123456",
"country": "SG"
}
}
}
]
}BKTR
Important
- Book transfer to another Citibank India account. Do not send
receiver.bank. - Send the receiver's Citibank IFSC in
receiver.localRoutingIdentifier. - Citi processes a
BKTRpayment with an IFSC that does not start withCITIas RTGS, not as a book transfer. - Currency can be any valid ISO 4217 currency code.
receiver.bankAccountNumberis up to 30 characters.- Do not send
bankChargeBearerorpurposeOfPayment.
| field | pattern / charset | max length | mandatory/optional |
|---|---|---|---|
| paymentDate | YYYY-MM-DD | M | |
| payments[N].customerReference | SWIFT (uppercase only) | 15 | O |
| payments[N].paymentDetails | SWIFT | 70 | O |
| payments[N].paymentAdviceEmails[N] | Valid email address Example: ["finance@company.com"] | 50 per email (max 1 email) | O |
| payments[N].receiver.name | SWIFT | 70 | M |
| payments[N].receiver.bankAccountNumber | Alphanumeric | 30 | M |
| payments[N].receiver.localRoutingIdentifier | IFSC | 11 | 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 | IN | 2 | O |
Example Request:
{
"type": "BKTR",
"paymentDate": "2026-11-16",
"senderAccountId": "intacc_0H3BQNTQGBW2W",
"currency": "INR",
"payments": [
{
"amount": 2500000,
"customerReference": "INV2026005",
"paymentDetails": "Payment for invoice 2026005",
"receiver": {
"name": "Example Traders Private Limited",
"bankAccountNumber": "0123456789",
"localRoutingIdentifier": "CITI0100000"
}
}
]
}Bank references
| Sent as | bankReference | bankReferences | Available from |
|---|---|---|---|
| A file | AcctSvcrRef, else ClrSysRef | AcctSvcrRef, ClrSysRef, StsId, as Citi sends them | Citi's status report on the payment |
On your Citi statement, the line shows a different Citi reference. Find the payment by your customerReference.
What the names mean:
AcctSvcrRef: Citi's own reference for the transaction.ClrSysRef: the clearing system's reference.StsId: the id of Citi's status entry.
A rejected payment keeps the references from the report that rejected it.
A completed payment returns:
{
"bankReference": "01720322200000001",
"bankReferences": {
"AcctSvcrRef": "01720322200000001"
}
}