Update sub-account
Sub-Accounts & White-Label Retail KYC
/users/{userId}
Update sub-account
updateUsersUpdates mutable fields on a sub-account. All fields are optional — only provided fields are changed. Set status to frozen to immediately suspend all trading, deposits, and withdrawals for a user. Set back to active to restore access.
Parameters
userIdstringpathRequiredExample: usr_abc123
Headers
AuthorizationstringRequiredBearer sk_sandbox_<your_key> for sandbox requests.
Idempotency-KeystringheaderRequiredUnique string that makes write calls safe to retry on network failure. Required for money movement, trading, KYC, subscriptions, and webhook creation. Deduplicated for 24 hours -- duplicate keys return the cached response. HTTP 409 if a concurrent request with the same key is still in progress.
Example: dep_user42_1743152580
Request body
displayNamestringNew display name for the sub-account.
Example: "Alice Kamau"
emailstringNew email address.
statusactive | frozenfrozen suspends all trading, deposits and withdrawals. Set back to active to restore access.
Response fields
subAccountIdstringMyStocks internal ID. Use in /users/{userId}/... paths.
Example: "usr_abc123"
userIdstringCompatible alias of subAccountId. Use subAccountId as the canonical stored identifier.
externalIdstringYour own user identifier as set at creation.
Example: "usr_8821"
displayNamestring | nullExample: "Alice K."
emailstring | nullExample: "alice@yourapp.com"
kycStatusNONE | PENDING | VERIFIED | REJECTEDVERIFIED required for trading and asset subscriptions. REJECTED remains gated until re-asserted.
kycLevelNONE | BASIC | FULLBASIC = ID verified. FULL = enhanced due diligence.
kycRejectionCodestring | nullStable rejection code when kycStatus is REJECTED.
kycRejectionReasonstring | nullCustomer-safe remediation guidance when kycStatus is REJECTED.
kycReviewedAtstring | nullTimestamp of the rejection decision.
statusactive | frozen | closedwalletBalancenumberCurrent USD wallet balance.
Example: 1250
Response codes
200Updated sub-account.