v1.2.0 – Mandatory Changes by 30th Jan 2026
by Kevin Geraldy🚨 IMPORTANT: Action required by 30 Jan 2026
Starting 30 Jan 2026, we are enforcing stricter API validations to ensure SWIFT/ISO 20022 compliance. Please update your integration to the new field requirements before the deadline to avoid failures.
Overview
We are updating our API to align with downstream banking networks and introduce new withdrawal capabilities. These changes are divided into two parts:
- Validation Updates: Stricter character and length limits for Customer Profiles.
- New Features: Enhanced logic for Blockchain Withdrawals.
Part 1: Validation & Compliance Updates
- Goal: Reduce downstream rejections and meet ISO 20022 standards.
- Change: Stricter Regex patterns (SWIFT characters) and reduced field lengths.
1. Personal CP Configuration
Endpoints:
-
POST /v1/kyc/customer_profiles -
PUT /v1/kyc/customer_profiles/:unique_id -
PATCH /v1/sandbox/kyc/customer_profiles/:unique_idIncludes updates to general personal details and standard address fields.Parameter
Old Validation
New Validation
customerNameMax 191 (Any chars)
(Mandatory field)SWIFT Chars (Max 50)
/^(?=.{1,50}$)[a-zA-Z0-9 ]+$/
(Mandatory field)address.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.cityMax 100 (Specific chars)
(Optional field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.stateMax 35 (SWIFT chars)
(Optional field)SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Optional field)
2. Business CP Configuration
Endpoints:
-
POST /v1/kyc/customer_profiles -
PUT /v1/kyc/customer_profiles/:unique_id -
PATCH /v1/sandbox/kyc/customer_profiles/:unique_idIncludes updates to general business details and standard address fields.Parameter
Old Validation
New Validation
customerNameMax 191 (Any chars)
(Mandatory field)SWIFT Chars (Max 50)
/^(?=.{1,50}$)[a-zA-Z0-9 ]+$/
(Mandatory field)address.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.cityMax 100 (Specific chars)
(Optional field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.stateMax 35 (SWIFT chars)
(Optional field)SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Optional field)placeOfBizMax 255 (Any chars)
(Mandatory field)SWIFT Chars (Max 255)
/^(?=.{1,255}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)
3. Personal CP+ Configuration
Endpoints:
-
POST /v1/kyc/customer_profiles -
PUT /v1/kyc/customer_profiles/:unique_id -
PATCH /v1/sandbox/kyc/customer_profiles/:unique_idIncludes updates to personal identity fields and standard address fields.Parameter
Old Validation
New Validation
customerFirstNameMax 191 (Any chars)
(Mandatory field)SWIFT Chars (Max 50)
/^(?=.{1,50}$)[a-zA-Z0-9 ]+$/
(Mandatory field)customerLastNameMax 191 (Any chars)
(Mandatory field)SWIFT Chars (Max 50)
/^(?=.{1,50}$)[a-zA-Z0-9 ]+$/
(Mandatory field)address.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.cityMax 100 (Specific chars)
(Optional field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.stateMax 35 (SWIFT chars)
(Optional field)SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Optional field)
4. Business CP+ Configuration
Endpoints:
-
POST /v1/kyc/customer_profiles -
PUT /v1/kyc/customer_profiles/:unique_id -
PATCH /v1/sandbox/kyc/customer_profiles/:unique_idIncludes updates to operating addresses, beneficial owners, and trader details.Parameter
Old Validation
New Validation
customerNameMax 191 (Any chars)
(Mandatory field)SWIFT Chars (Max 50)
/^(?=.{1,50}$)[a-zA-Z0-9 ]+$/
(Mandatory field)address.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.cityMax 100 (Specific chars)
(Mandatory field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)address.stateMax 35 (SWIFT chars) (Mandatory field)
SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)operatingAddress.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)operatingAddress.cityMax 100 (Specific chars)
(Optional field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)operatingAddress.stateMax 35 (SWIFT chars)
(Mandatory field)SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)beneficialOwners[].address.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)beneficialOwners[].address.cityMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)beneficialOwners[].address.stateMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)trader.address.streetMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 180)
/^(?=.{1,180}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)trader.address.cityMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 20)
/^(?=.{1,20}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)trader.address.stateMax 180 (Any chars)
(Mandatory field)SWIFT Chars (Max 15)
/^(?=.{1,15}$)[a-zA-Z0-9\-?:().,' +]+$/
(Mandatory field)
Part 2: New Features (Blockchain Withdrawals)
- Goal: Allow users to keep funds in fiat (SGD/USD) without auto-conversion.
1. Blockchain Withdrawal Improvements
Endpoint:
-
POST /v1/blockchain_transfer/withdrawals/We've introduced a new field when creating a blockchain withdrawal request. Depositing SGD/USD into the Dashboard VAs will now go towards your SGD/USD balances instead of being auto-converted to XSGD/XUSD. You can now select which balances to deduct for each blockchain withdrawal.
Note: Once you've made the necessary changes, please let our internal team know for us to roll out the new dashboard updates.New Parameter Description Accepted Values wallet_sourceThe source of funds the deduction will be made from. If no value is specified for this field, XSGD and XUSD withdrawals will, by default, be deducted from the XSGD and XUSD balances respectively.
This field is OptionalXSGDXUSDUSDSGD
