Payout Validation Rules

This guide details the underlying validation rules for payee management and payout submission.

Payee Basic Information Validation Details 👤

When creating or updating a payee, the system enforces a strict PayeeValidator check. If the validation fails, a code: 100001 will be returned.

FieldRequiredLength LimitCharacter Set & Regex RequirementsFailure Prompt (code: 100001)
firstNameNo≤35ASCII letters and spaces only (^[a-zA-Z\s]*$)First name must not exceed 35 characters
First name contains invalid characters
lastNameYes≤35ASCII letters and spaces only (^[a-zA-Z\s]+$)Please enter last name or company name
Last name must not exceed 35 characters
Last name or company name contains invalid characters
bankNameYes≤35ASCII letters/numbers; boundaries must be alphanumeric; spaces and - ' & . , ( ) / allowed in the middlePlease enter bank name
Bank name must not exceed 35 characters
Bank name contains invalid characters
bankCodeRequired if receiveType=local≤20Half-width letters or numbers only (^[a-zA-Z0-9]+$)Please enter routing number
Bank code must not exceed 20 characters
Bank code only supports half-width letters or numbers
bicSwiftRequired if receiveType=swift8 or 11Half-width letters or numbers only (^[a-zA-Z0-9]+$)Please enter SWIFT/BIC code
SWIFT/BIC code format error...
SWIFT/BIC code only supports half-width letters or numbers
accountNumberYes≤35ASCII letters, numbers, spaces, and hyphens - only (^[A-Za-z0-9\s\-]+$)Please enter bank account number
Account number must not exceed 35 characters
Account number only supports letters, numbers, spaces, and hyphens

Payee Address Information Validation Details 🏠

Address fields (payeeAddress and bankAddress) only trigger validation when provided. These rules are constrained by both the strict PayeeValidator and the broader DTO pipeline checks; the stricter constraint always applies.

FieldRequiredLength Limit (Strict/Broad)Character Set & Regex RequirementsFailure Prompt (Strict check code: 100001)
line1Yes≤70 (Strict) / ≤255 (Broad)Unicode letters/numbers, spaces, and .,'#-/&()Please enter detailed address
Address line1 must not exceed 70 characters
Address line1 only supports letters, numbers, and common punctuation
line2No≤35 (Strict) / ≤255 (Broad)Unicode letters/numbers, spaces, and .,'#-/&()Address line2 must not exceed 35 characters
Address line2 only supports letters, numbers, and common punctuation
postCodeYes≤16 (Strict) / ≤50 (Broad)ASCII letters, numbers, spaces, and hyphens - onlyPlease enter postal code
Postal code must not exceed 16 characters
Postal code contains invalid characters
cityYes≤35 (Strict) / Required (Broad)Unicode letters/numbers, spaces, and .,'-Please enter city name
City name must not exceed 35 characters
City name contains invalid characters
stateYes≤35 (Strict) / Required (Broad)Unicode letters/numbers, spaces, and .,'-Please enter state/province name
State/province name must not exceed 35 characters
State/province name contains invalid characters
countryYesStrictly 2 charsMust be a 2-character ISO code (Restricted by DTO @Length(2, 2))(Intercepted by DTO pipeline, returns 999901 with i18n prompt)

Payout Submission Pre-validation Rules (va_005 Exclusive) 🚀

When the payout channel resolves to va_005, the system executes 20 granular field-level checks that exactly match the actual downstream submission requirements. Any validation failure here directly returns code: 100001 along with the original English message from the channel.

📘

Character Set and Boundary Normalization Logic

SWIFT Character Set: Requires alphanumeric characters at the boundaries, while allowing letters, numbers, spaces, and specific symbols (/ - ? : ( ) . , ' +) in the middle.

Boundary Rules: All rules involving "alphanumeric boundaries" enforce the validateAlphanumericBoundary check under the hood.

Normalization Processing: Before constructing the payload, the system automatically normalizes Unicode whitespace to half-width spaces, transliterates Chinese characters to Pinyin, and trims invalid characters at the boundaries to minimize false rejections. Names, bank names, account numbers, and postal codes are excluded from Pinyin transliteration.

Target FieldSource Field or Logical MappingCore Validation Constraints
COUNTERPARTY Name (name)payee.user_nameRequired; ≤35 characters; Alphanumeric boundaries
Name (givenName / surname)payee.first_name / payee.last_nameAlphanumeric boundaries
detailsFormat: ${PaymentMethod} -${Name}Alphanumeric boundaries
Bank Name (BANK_NAME)payee.bank_name≤35 characters
Bank Address (BANK_ADDRESS)payee.country≤35 characters; Must comply with SWIFT character set
endToEndIdSystem-generated value (15 chars)ACH ≤17, SWIFT ≤36; Alphanumeric boundaries
referenceNumberPayout remarksAlphanumeric boundaries
purposeCodeMapped purpose codeAlphanumeric boundaries
Account Number (accountNumber)payee.account_numberACH channel limit ≤17 chars; Alphanumeric boundaries
Account Country Codepayee.country2-character ISO code; Alphanumeric boundaries
Financial Institution ID (financialInstitutionId)ACH: bank_code; SWIFT: bic_swiftACH strictly requires a 9-digit routing number; Alphanumeric boundaries
Address (street1)payee.payee_address.line1≤70 characters; Must comply with SWIFT character set
Address (street2)payee.payee_address.line2≤35 characters; Must comply with SWIFT character set
Address (city)payee.payee_address.city≤35 characters; Must comply with SWIFT character set
Address (state)payee.payee_address.state≤35 characters; Alphanumeric boundaries
Address (zip)payee.payee_address.postCode≤16 characters; Alphanumeric boundaries
Address (country)payee.country≤2 characters
Payment Purpose Memo (PAYMENT_PURPOSE_MEMO)Purpose code dictionary mapping, falls back to Payment Purpose: xxxAlphanumeric boundaries
Intermediary Bank BICpayee.intermediary_bank_swift_codeValidated only for SWIFT when provided; Alphanumeric boundaries
OUR_PARTY Account/Routing/CountryFixed values: 0 / 021508219 / PRAlphanumeric boundaries

Error Code Summary 📊

Intercept ScenarioHTTP Business Code (code)Prompt Message (message) Format
PayeeValidator strict check failure100001English error prompts; multiple errors will be concatenated with ;
DTO pipeline validation failure999901Standard i18n localized validation prompts
va_005 channel pre-validation failure100001Original English message returned by the channel validator
Invalid purpose code100001General business error prompt

Integration Regression Testing Recommendations 🧪

To ensure a smooth transition of your integration, please verify compatibility based on the following scenarios.

Business ProcessTest Case & Expected Result
Create Payee1. Submit a normal US ACH payee (with full address): Should succeed.
2. Submit a GB alphanumeric postal code and a company name containing Chinese characters: Should succeed (Regex supports Unicode).
3. accountNumber reaches 40 characters or contains /: Should return 400.
4. payeeAddress missing postCode or city: Should return 400.
Update Payee1. Full update echoing all fields (including bankAddress): Should succeed.
2. Omit bankAddress: Should succeed, but the system will clear the existing bank address stored in the DB.
Submit Payout1. va_005 + ACH, routing number is exactly 9 digits: Should succeed.
2. va_005 + ACH, routing number is not 9 digits: Should directly return 400 upon order creation.
3. va_005 + WIRE, routing number is not 9 digits: Should succeed (Not restricted by ACH rules).
4. Other channels (e.g., va_006 / va_007): Behavior remains unchanged; unaffected by pre-validation.
5. Retry with the same callId: Idempotent behavior remains unchanged.

Did this page help you?