Customer Profile+ and Bank Account Creation
Overview
Under the first party transfer(CP+) integration model, you must create a CP+ account for each of your user. Each of this CP+ account must have a verified customer profile bank account attached to it to ensure first party withdrawals.
Note: Transactions under the CP+ model are in USD only.
Sequence Diagram

Customer Profile+ Creation
Once your user has created an account and provided their personal information on your platform, you need to create what we call a customer profile+. A customer profile+ is a profile in the StraitsX system representing your user. This is a pre-requisite for accessing payment and payout APIs under the First Party Transfer integration model. Currently, we only offer business accounts under the CP+ model. We require the following information.
Customer Profile Type | Requirements for USD rail |
---|---|
Business | customerName registrationType registrationIdType registrationId entityLegalForm businessContact countryOfIncorporation dateOfIncorporation address address.street address.city address.state address.country operatingAddress operatingAddress.street operatingAddress.city operatingAddress.state operatingAddress.country natureOfBusiness otherNatureOfBusiness (* if natureOfBusiness is OTHERS)usOwnership intermediaries intermediariesDocuments (If intermediaries is true)intermediariesDocuments.[].certificateOfIncorporation (If intermediaries is true)intermediariesDocuments.[].memorandum (If intermediaries is true)intermediariesDocuments.[].registerOfMembers (If intermediaries is true)intermediariesDocuments.[].certificateOfIncumbency (If intermediaries is true)monthlyTransactionVolume sourceOfFunds otherSourceOfFunds (If sourceOfFunds includes OTHERS)directors directors.[].firstName directors.[].lastName directors.[].dateOfBirth directors.[].registrationId directors.[].registrationIdType directors.[].registrationIdCountry directors.[].identityDocuments directors.[].identityDocuments.passport (If directors.\[].registrationIdType is passport )directors.[].identityDocuments.idFront (If directors.\[].registrationIdType is identity_card )directors.[].identityDocuments.idBack (If directors.\[].registrationIdType is identity_card )directors.[].nationality directors.[].countryOfResidence beneficialOwners beneficialOwners.[].firstName beneficialOwners.[].lastName beneficialOwners.[].dateOfBirth beneficialOwners.[].registrationId beneficialOwners.[].registrationIdType beneficialOwners.[].registrationIdCountry beneficialOwners.[].identityDocuments beneficialOwners.[].identityDocuments.passport (If beneficialOwners.\[].registrationIdType is passport )beneficialOwners.[].identityDocuments.idFront (If beneficialOwners.\[].registrationIdType is identity_card )beneficialOwners.[].identityDocuments.idBack (If beneficialOwners.\[].registrationIdType is identity_card )beneficialOwners.[].address beneficialOwners.[].address.street beneficialOwners.[].address.city beneficialOwners.[].address.state beneficialOwners.[].address.country beneficialOwners.[].proofOfAddress beneficialOwners.[].nationality beneficialOwners.[].countryOfResidence trader trader.firstName trader.lastName trader.dateOfBirth trader.registrationId trader.registrationIdType trader.registrationIdCountry trader.identityDocuments trader.identityDocuments.passport (If trader.registrationIdType is passport )trader.identityDocuments.idFront (If trader.registrationIdType is identity_card )trader.identityDocuments.idBack (If trader.registrationIdType is identity_card )trader.selfie trader.livenessSnapshot trader.nationality trader.countryOfResidence documents.certificateOfIncorporation documents.memorandum documents.registerOfDirectors documents.registerOfMembers documents.proofOfAddress documents.boardResolution |
Customer Profile+ Bank Account Creation
Aside from providing personal information, your user will also need to have the ability to add a bank account on your platform.
Ensure that the correct bank code is submitted
Some banks may have multiple bank codes - you should ensure the correct one is being submitted to avoid any subsequent payment/payout failures.
StraitsX will expect to receive funds from this bank account and will only allow withdrawals to the same bank account after it has been verified. Name matching will be performed on incoming payments against customer profile name to ascertain the first party relationship and to verify the bank account automatically. Alternatively, you could also request for proof of bank account from your user for manual verification of the bank account.
Sandbox Testing
To test your integration, you could mock the verification status of the bank account created.
Webhooks
Webhook callbacks use HTTP POST
request with the event in string format and expects 200 OK in the response. Each failed webhook callback is retried up to 20 times with a 5-minute interval. If you need to retrigger callback for a single contract or a list of contracts, you can do so via our callback event endpoints.
When a customer profile’s verification status is updated to rejected
or verified
, callback will be triggered to the url you configure on the StraitsX dashboard. Here is a sample callback:
{
"data": {
"id": "customer_profile_989407bb-1cc8-4e9b-a73b-864a4d1ba1c0",
"type": "customer_profile",
"attributes": {
"customerName": "ABC Pte Ltd",
"registrationType": "business",
"registrationId": "20123232321",
"verificationStatus": "verified",
"address": {
"city": "Singapore",
"state": "Singapore",
"street": "Northside 18th",
"country": "SG",
"postalCode": "8809"
},
"operatingAddress": {
"city": "Singapore",
"state": "Singapore",
"street": "Northside 18th",
"country": "SG",
"postalCode": "8809"
},
"registrationIdCountry": "SG",
"countryOfIncorporation": "SG",
"dateOfIncorporation": "1999-09-09",
"registrationIdType": "business_reg_no",
"natureOfBusiness": "PERSONAL_INVESTMENT_COMPANIES",
"usOwnership": true,
"monthlyTransactionVolume": "80001_TO_100000",
"sourceOfFunds": [
"PERSONAL_SAVINGS",
"OTHERS"
],
"otherSourceOfFunds": "other source of funds",
"directors": [
{
"lastName": "Doe",
"firstName": "John",
"nationality": "SG",
"dateOfBirth": "1950-01-01",
"registrationId": "A12321321",
"countryOfResidence": "SG",
"registrationIdType": "passport",
"registrationIdCountry": "SG"
},
{
"lastName": "Doe",
"firstName": "Jane",
"nationality": "SG",
"dateOfBirth": "1950-01-01",
"registrationId": "A12321321",
"countryOfResidence": "SG",
"registrationIdType": "identity_card",
"registrationIdCountry": "SG"
}
],
"beneficialOwners": [
{
"lastName": "Doe",
"firstName": "John",
"nationality": "SG",
"dateOfBirth": "1950-01-01",
"registrationId": "A12321321",
"countryOfResidence": "SG",
"registrationIdType": "passport",
"registrationIdCountry": "SG"
},
{
"lastName": "Doe",
"firstName": "Jane",
"nationality": "SG",
"dateOfBirth": "1950-01-01",
"registrationId": "A12321321",
"countryOfResidence": "SG",
"registrationIdType": "identity_card",
"registrationIdCountry": "SG"
}
],
"trader": {
"lastName": "Doe",
"firstName": "John",
"nationality": "SG",
"dateOfBirth": "1950-01-01",
"livenessResult": true,
"registrationId": "A12321321",
"countryOfResidence": "SG",
"registrationIdType": "identity_card",
"registrationIdCountry": "SG"
},
"createdAt": "2024-12-26T17:01:52Z",
"updatedAt": "2024-12-26T17:01:59Z"
}
}
}
Updated 2 days ago
Now that you have created a customer profile and bank account for your user, learn how to create a payment method to facilitate collections.
First Party Payment