OpenCustomerAccount¶
Endpoint¶
POST /customer/account/open
Description¶
Creates a trading account linked to the authenticated customer.
The request accepts only a group selected from GetCustomerAccountGroups. The server revalidates brand, public group visibility, account mode policy, and KYC requirements before creating the account.
Authorization¶
Requires SESSION_CUSTOMER token.
Request¶
{
"group": "demo-usd"
}
Response¶
{
"login": 100001,
"group": "demo-usd",
"brand": "default",
"account_mode": "DEMO",
"currency": "USD",
"leverage": 100,
"temporary_password": "7b4c9d1a2f3e",
"must_change_password": true
}
If the group has default_deposit > 0, the server creates the account and then applies the default balance operation.
temporary_password is returned only at account creation time.
KYC Gate¶
If the customer tries to open a REAL account and the brand requires KYC, the server revalidates the customer KYC aggregate before account creation.
When KYC is not approved, the method returns 403 KYC_REQUIRED and creates or reuses the customer KYC profile through KycManager::SetRequiredLevel with:
level = 1
reason = real_account_required
source = account_opening
The response includes the current KYC state so the terminal can switch to the KYC flow immediately:
{
"error": "KYC_REQUIRED",
"message": "Account opening is not allowed for this group",
"kyc_required": true,
"kyc_required_level": 1,
"kyc_status": 2,
"kyc_current_level": 0,
"kyc_profile_id": 1
}
Errors¶
| HTTP | Error | Description |
|---|---|---|
400 |
INVALID_DATA |
Invalid request body |
400 |
INVALID_GROUP |
Group does not exist |
401 |
INVALID_CUSTOMER_SESSION |
Customer id is missing in session |
403 |
BRAND_NOT_AVAILABLE |
Customer brand is disabled or missing |
403 |
GROUP_DISABLED |
Group is disabled |
403 |
GROUP_NOT_PUBLIC |
Group is not available for self-service opening |
403 |
GROUP_BRAND_MISMATCH |
Group belongs to another brand |
403 |
DEMO_OPENING_DISABLED |
Brand does not allow demo opening |
403 |
REAL_OPENING_DISABLED |
Brand does not allow real opening |
403 |
KYC_REQUIRED |
Real account opening requires approved KYC |
500 |
CORE_NOT_AVAILABLE |
Trading core is not available |
500 |
ADD_BALANCE_ERROR |
Account was created but default balance operation failed |