Endpoint
Required Fields
The minimum required fields to create an account are:contact (email, address, city, state, postal code); identity (first name, last name, date of birth, SSN/tax ID); investment_profile (risk tolerance, investment objective, income and net worth ranges). All other fields are optional but may be required for specific account types or trading features.
Full Request Schema
contact object
identity object
disclosures object
Regulatory disclosures required by FINRA. All fields default to false if omitted: is_control_person, control_person_company_name, is_affiliated_exchange_or_finra, is_spouse_affiliated_finra, is_politically_exposed, immediate_family_exposed.
agreements array
Each agreement must be captured with a timestamp and optionally IP address. The customer_agreement is required for all accounts; margin_agreement is required if margin_enabled = true; options_agreement is required if requested_option_level > 0.
investment_profile object
Required: risk_tolerance (conservative/moderate/aggressive), investment_objective (growth/income/speculation/preservation), annual_income_range, net_worth_range, liquid_net_worth_range. Optional: liquidity_needs (low/medium/high), time_horizon (short/medium/long), years_trading_stocks, years_trading_options, stock_experience, options_experience, income_source, funds_source, investment_plan.
trading_configurations object (optional)
margin_enabled (requires margin_agreement); short_selling_enabled. Options access is requested via the top-level requested_option_level field (0–4, 0 = no options); the granted level is decided by the approval engine, never by the partner.
documents array (identity verification documents)
Government ID image(s) used for identity verification as part of the KYC process. Each entry is one base64-encoded image:
A
passport requires one entry; id_card and drivers_license require two entries (one front, one back). See KYC Verification for the full verification flow.
Other optional top-level fields
account_type (individual default, joint, ira_traditional, ira_roth, or custodial), trusted_contact, employment, mailing_address, joint_owner (required when account_type is joint), requested_option_level, dividend_reinvestment, discretionary_account, registered_rep_code, advisor_code, corr_metadata (freeform, up to 255 chars).
Complete Example Request
Response
On success, returns201 Created with the full AccountResponse object including the generated id, the owning user_id, and initial status.
Note: Newly created accounts start inSUBMITTEDstatus while identity documents go through KYC review.account_numberisnulluntil the account is booked on the clearing system after verification passes. KYC processing typically completes in seconds to minutes, but some accounts require manual review (action_required).
Handling KYC Outcomes
Use Webhooks to receive real-time notifications when an account’sstatus or kyc_status changes. Subscribe to the account.updated event and check the new status in the payload. Alternatively, poll GET /v1/accounts/{accountId} and check kyc_status until it reaches approved or rejected.
Opening Additional Accounts for a Verified User
Keep theuser_id from the account response. Once the user’s KYC is approved, you can open further accounts for the same person — for example an ira_roth alongside their individual account — with a minimal request:
account_type is required — identity is locked to the stored, verified user profile (sending an identity object is rejected), optional sections override the stored values, and document verification is skipped. If the user’s KYC is not yet approved, the request fails with 409 USER_KYC_NOT_APPROVED.
Common Validation Errors
Next Steps
- Account Statuses — Full state machine and transitions
- Balances & Positions — Reading portfolio data after the account is ACTIVE
- Funding Overview — Link a bank account and make a deposit