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 TypeRequirements for USD rail
BusinesscustomerName
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"
        }
    }
}

What’s Next

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