Bank payment rules

Acme Citibank China Payments

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

  • 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

China domestic ACH transfer.

Important

  • 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.
fieldpattern / charsetmax lengthmandatory/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 WHLD4O
payments[N].customerReferenceSWIFT (uppercase only)15M
payments[N].paymentDetailsEnglish or Chinese70O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
50 per email (max 1 email)O
payments[N].transferLocalityINTRA_CITY or INTER_CITYM
payments[N].receiver.nameEnglish or Chinese; backtick not allowed60M
payments[N].receiver.bankEnglish or Chinese; backtick not allowed60M
payments[N].receiver.bankAccountNumberNumeric32M
payments[N].receiver.localRoutingIdentifierNumeric12O
payments[N].receiver.accountNameEnglish or Chinese44O
payments[N].receiver.address.cityEnglish or Chinese35M
payments[N].receiver.address.countryFixed value CN2O

CN_RTGS

China domestic RTGS transfer for high-value payments.

Important

  • 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.
fieldpattern / charsetmax lengthmandatory/optional
payments[N].customerReferenceSWIFT (uppercase only)15M
payments[N].paymentDetailsEnglish or Chinese; backtick not allowed140O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
50 per email (max 1 email)O
payments[N].receiver.nameEnglish or Chinese; backtick not allowed60M
payments[N].receiver.bankEnglish or Chinese; backtick not allowed60O
payments[N].receiver.bankAccountNumberNumeric32M
payments[N].receiver.localRoutingIdentifierNumeric (exactly 12 digits)12M
payments[N].receiver.accountNameEnglish or Chinese60O

CN_TT_INTL

Telegraphic transfer for international payments. Currency must not be CNY; use CN_TT_DOM for RMB.

Important

  • 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. Acme validates the rules Citi has confirmed (see Mandatory sub-fields), plus list size, string length and amount shape.
  • 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.
fieldpattern / charsetmax lengthmandatory/optional
payments[N].customerReferenceSWIFT (uppercase only)15M
payments[N].paymentDetailsEnglish or Chinese; backtick not allowed140O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
50 per email (max 1 email)O
payments[N].bankChargeBearerSENDER / RECEIVER / SHAREDO
payments[N].regulatoryInstructionInfoArray of strings (include Citi prefixes, e.g. /CNS1/)35 per entry (max 3)M
payments[N].regulatoryAmountsArray of { amount, currency }. amount is a positive integer in minor unitsmax 2 entriesM
payments[N].regulatoryInformationArray of strings. List index is the Inf slot. Exactly 6 entries; unused slots ""35 per entryM
payments[N].receiver.nameEnglish or Chinese; backtick not allowed35M
payments[N].receiver.bankBIC (8 or 11 characters, ISO 9362)11M
payments[N].receiver.intermediaryBankBIC (8 or 11 characters)11O
payments[N].receiver.bankAccountNumberSWIFT34M
payments[N].receiver.accountNameEnglish or Chinese35O
payments[N].receiver.address.line1SWIFT35O
payments[N].receiver.address.line2SWIFT35O
payments[N].receiver.address.citySWIFT35M
payments[N].receiver.address.stateSWIFT35O
payments[N].receiver.address.postalCodeSWIFT35O
payments[N].receiver.address.countryISO 3166-1 alpha-22M

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.

Important

  • 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. Acme validates the rules Citi has confirmed (see Mandatory sub-fields), plus list size, string length and amount shape.
  • 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.
fieldpattern / charsetmax lengthmandatory/optional
payments[N].customerReferenceSWIFT (uppercase only)16M
payments[N].paymentDetailsEnglish or Chinese140O
payments[N].paymentAdviceEmails[N]Valid email address
Example: ["finance@company.com"]
50 per email (max 1 email)O
payments[N].bankChargeBearerSENDER / RECEIVER / SHAREDO
payments[N].purposeCodeOne of GOD STR CTF RMT OTF 02112 02113 02114 02115 02116 02117 02123 02124 02125 02127O
payments[N].regulatoryInstructionInfoArray of strings (include Citi prefixes, e.g. /CNS1/)35 per entry (max 3)M
payments[N].regulatoryAmountsArray of { amount, currency }. amount is a positive integer in minor unitsmax 2 entriesM
payments[N].regulatoryInformationArray of strings. List index is the Inf slot. Exactly 6 entries; unused slots ""35 per entryM
payments[N].receiver.nameSWIFT; backtick not allowed35M
payments[N].receiver.bankSWIFT (bank name, not BIC); backtick not allowed35M
payments[N].receiver.bankAccountNumberSWIFT34M
payments[N].receiver.accountNameEnglish or Chinese60O
payments[N].receiver.address.line1SWIFT35O
payments[N].receiver.address.line2SWIFT35O
payments[N].receiver.address.citySWIFT35O
payments[N].receiver.address.stateSWIFT35O
payments[N].receiver.address.postalCodeSWIFT35O
payments[N].receiver.address.countryISO 3166-1 alpha-22O

SAFE BOP

CN_TT_INTL and CN_TT_DOM payments carry China's SAFE balance of payments (BOP) declaration. Citi reports it to the State Administration of Foreign Exchange. You send it in three payment fields:

fieldWhat it holdsHow to recognise it
regulatoryInformationThe declaration, in 6 positional slotsAlways 6 strings; the first starts with O/C/…
regulatoryInstructionInfoThe remarks and the invoice numberEvery string starts with /CNS1/, /CNS2/ or /CNIN/
regulatoryAmountsThe amount for each BOP codeObjects with amount (minor units) and currency, not strings

Acme rejects the payment on create when a required value is missing or badly formatted (see Mandatory sub-fields). Citi checks the rest after the payment arrives, including whether the BOP code and the country are right. If they are not, Citi holds the payment until you amend it in CitiDirect.

The names in brackets below (TXREM, CONTRNO …) are the labels on Citi's CitiDirect BOP form, in case Citi refers to them.

Typical payment

Most payments look like this: one BOP code, not bonded goods. Replace the {…} values and keep all 6 strings, sending "" for an unused slot so the later slots stay in position.

{
  "regulatoryInstructionInfo": ["/CNS1/{remark}", "/CNIN/{invoice number}"],
  "regulatoryAmounts": [{ "amount": {same minor units as amount}, "currency": "{payment currency}" }],
  "regulatoryInformation": [
    "O/C/{BOP code}/{payment purpose}/{applicant name}",
    "/N/{phone}",
    "",
    "",
    "{unit code}/{country}",
    "{contract number}"
  ]
}
PlaceholderWhat to put
{remark}The nature of the payment in Chinese, for example 技术服务费 (technical service fee). Citi's limit is 25 Chinese characters (TXREM)
{invoice number}Your invoice number, or N/A if there is none (INVOINO)
{BOP code}The 6-digit code for the nature of the payment. See BOP transaction codes
{payment purpose}A, D, R or O. See Code values
{applicant name}The name of the person making the declaration: English ≤20 or Simplified Chinese ≤10 characters (CRTUSER)
{phone}The applicant's phone, digits only, ≤20, for example 02128961234. A country code is not required (INPTELC)
{unit code}Your company's organisation code (对公组织机构代码). Citi does not issue it; your China entity has it
{country}The counterparty's country of registration, as a 3-letter code (USA, SGP, HKG …), not your own. Use CHN only if the counterparty itself is registered in China
{contract number}Your contract number, or N/A if there is none (CONTRNO)

The slots are:

IndexHolds
[0]Form type, customer type, BOP code 1, payment purpose, applicant name
[1]BOP code 2 (empty if unused), bonded goods, phone
[2]Payment character, only for form type D; otherwise ""
[3]SAFE register number and fund source; "" unless you need them
[4]Unit code and country
[5]Contract number

Code values

Form type (slot [0], 1st part): use O overseas for both CN_TT_INTL and CN_TT_DOM. D domestic is not for these payment types unless Citi tells you otherwise.

Customer type (slot [0], 2nd part): C for business.

Payment purpose (slot [0], 4th part, PayType):

codeMeaningUse when
AAdvance payment (预付货款)You pay before the goods or services are delivered
DPayment against delivery (货到付款)You pay on or after delivery
RRefund (退款)You are returning money you received
OOthers (其他)None of the above

Bonded goods (slot [1], 2nd part, ISREF): Y if the payment is for bonded goods (保税货物), otherwise N.

Fund source (slot [3], 2nd part, optional):

codeMeaningUse when
FFX (现汇)You pay from foreign currency already in your account
PPurchase (购汇)You buy the foreign currency with CNY for this payment
OOthers (其他)Any other source

BOP transaction codes

The BOP transaction code is a 6-digit code from SAFE's 涉外收支交易分类与代码(2014版) that says what the payment is for. Refer to the BOP transaction code list provided by Citibank for every code. The first digit is the group:

First digitGroupSAFE register number (REGNO)
1Goods trade (货物贸易)not needed
2Services trade (服务贸易)not needed
3Primary income (初次收入)not required by Acme
4Secondary income (二次收入)not required by Acme
5Capital account (资本账户)required
6Direct investment (直接投资)required
7Securities and derivatives (证券投资及金融衍生工具)required
8Other investment (其他投资)required
9Domestic FX and special transactions (境内外汇收支交易及其他特殊交易)required

Pick the code that describes the true nature of the payment, and describe the same thing in the /CNS1/ remark. Acme checks only that the code is 6 digits. A valid code that does not match the payment is caught by Citi, which holds the payment until it is amended.

Common mistake

Sending 929010 同名账户资金转入/转出 (a transfer between accounts in the same name) for a payment that is actually a service fee. The 9 group is for domestic FX transactions, not payments to an overseas counterparty. A service fee takes a 2 services code, such as 228039 其他技术服务 (other technical services).

When you need extra fields

A code starting with 5–9: put the SAFE register number (REGNO, ≤20 characters) in slot [3] as {register number}/{fund source}, for example "REG-2024-001/F". The fund source is optional (see Code values).

A second BOP code:

  • Slot [1] becomes {code 2}/{Y or N}/{phone} (use Y if bonded goods, otherwise N)
  • Add { "amount": …, "currency": … } as regulatoryAmounts[1]
  • Add /CNS2/{remark}, in Chinese, to regulatoryInstructionInfo

Bonded goods only (no second code): slot [1] is /Y/{phone} instead of /N/{phone}.

Example: CN_TT_INTL

USD 10,000.00 for a technical service fee, paid in advance, to a counterparty registered in the US. Replace 12345678 with your company's organisation code.

{
  "amount": 1000000,
  "currency": "USD",
  "customerReference": "CNTT002",
  "bankChargeBearer": "SHARED",
  "regulatoryInstructionInfo": ["/CNS1/技术服务费", "/CNIN/INV-2024-001"],
  "regulatoryAmounts": [{ "amount": 1000000, "currency": "USD" }],
  "regulatoryInformation": [
    "O/C/228039/A/Zhang Wei",
    "/N/13800138000",
    "",
    "",
    "12345678/USA",
    "CTR-2024-001"
  ],
  "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"
    }
  }
}
StringMeaning
/CNS1/技术服务费Remark: technical service fee
/CNIN/INV-2024-001Invoice number
O/C/228039/A/Zhang WeiOverseas, business, code 228039 other technical services, advance payment, applicant Zhang Wei
/N/13800138000No code 2, not bonded goods, phone
12345678/USAUnit code, and the counterparty's country
CTR-2024-001Contract number

Example: CN_TT_DOM

The same three fields. Use CNY for amount and regulatoryAmounts.

{
  "amount": 1000000,
  "currency": "CNY",
  "customerReference": "CNTTDOM0001",
  "bankChargeBearer": "SHARED",
  "paymentDetails": "Invoice 2024-001",
  "regulatoryInstructionInfo": ["/CNS1/技术服务费", "/CNIN/INV-2024-001"],
  "regulatoryAmounts": [{ "amount": 1000000, "currency": "CNY" }],
  "regulatoryInformation": [
    "O/C/228039/A/Zhang Wei",
    "/N/13800138000",
    "",
    "",
    "12345678/HKG",
    "CTR-2024-001"
  ],
  "receiver": {
    "name": "Kowloon Trading Co Ltd",
    "bank": "Bank of China (Hong Kong) Ltd",
    "bankAccountNumber": "9876543210",
    "accountName": "账户户名",
    "address": {
      "line1": "1 Garden Road",
      "city": "Hong Kong",
      "country": "HK"
    }
  }
}

Mandatory sub-fields

Acme rejects a CN_TT_INTL or CN_TT_DOM payment on create when any of these is missing or invalid:

FieldPartRule
regulatoryInformation[0]1st: form typerequired
regulatoryInformation[0]3rd: BOP code 1required; 6 digits
regulatoryInformation[0]4th: payment purpose (PayType)required
regulatoryInformation[0]5th: applicant name (CRTUSER)required
regulatoryInformation[1]1st: BOP code 26 digits if given
regulatoryInformation[1]2nd: bonded goods (ISREF)required
regulatoryInformation[1]3rd: applicant phone (INPTELC)required
regulatoryInformation[3]1st: SAFE register number (REGNO)required when BOP code 1 starts with 5–9
regulatoryInformation[4]1st: unit coderequired
regulatoryInformation[4]2nd: countryrequired; Acme does not check the value
regulatoryInformation[5]contract number (CONTRNO)required; N/A if there is none
regulatoryInstructionInfo/CNS1/{remark} (TXREM)required when form type is O; must be in Chinese
regulatoryInstructionInfo/CNIN/{invoice} (INVOINO)required; /CNIN/N/A if there is none
regulatoryInstructionInfo/CNS2/{remark} (TX2REM)optional; must be in Chinese if given

Acme also checks the shape of the three fields:

fieldLimits
regulatoryInformationExactly 6 strings, each ≤35 characters
regulatoryInstructionInfo1 to 3 strings, each ≤35 characters including the code word
regulatoryAmounts1 or 2 entries. amount is in minor units, 1 to 999999999999999999
Slot [2]: payment character (form type D only)

X bonded area · E export processing zone · D diamond exchange · M downstream processing · O other. Leave the slot "" for form type O.

On this page