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, submitted alongside the application. Each entry is one base64-encoded image:
A
passport requires one entry; id_card and drivers_license require two entries (one front, one back).
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).
Identity Document Verification
Identity documents are verified through Buildmarkets’s KYC process before the account is booked on the clearing system. Both US applicants (tax_id_type of USA_SSN or USA_EIN) and non-US applicants (tax_id_type of FIN) go through the same document-based identity verification.
The flow is simple from your perspective: include the government ID image(s) in the documents array of POST /v1/accounts. The account is persisted immediately with status SUBMITTED while the documents go through KYC review. Once the review passes, Buildmarkets automatically submits the application to the clearing system, which runs CIP screening (KYC + OFAC watchlist) and activates the account. Track progress via the status and kyc_status fields or webhooks.
If a verification is rejected or cannot complete, the account moves to ACTION_REQUIRED. You can resubmit new document images via PATCH /v1/accounts/{accountId} with a fresh documents array, which re-runs identity verification.
Once a user has passed document verification on any account, additional accounts opened for that user via POST /v1/users/{userId}/accounts skip document verification entirely — the existing approval carries over.
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.
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
Uploading Documents
Important: The only document upload that drives identity verification is theThe document upload endpoint is intended for submitting compliance and identity documents directly to a Buildmarkets brokerage account during ongoing account maintenance. Live processing of these uploads is not yet available.documentsarray (identity verification documents) submitted withPOST /v1/accountsat account creation, or resubmitted viaPATCH /v1/accounts/{accountId}when an account is inACTION_REQUIRED.
Endpoint
Upload a document
Accepts a Base64-encoded file along with its document type classification. The platform processes the upload and associates it with the account for compliance review.POST /v1/accounts/{accountId}/documents/upload
Path parameters
Request body
Supported document_type values
Response
Returns204 No Content on success. No body is returned.
Example requests
Identity verification — passport (image)
Address verification — utility bill (PDF)
W-8BEN — JSON form data
Thew8ben document type accepts form data as a JSON object in content_data rather than a Base64-encoded file. The structure mirrors the IRS W-8BEN form fields.
Response
File size and format limits
Tip: If you’re encoding in JavaScript, useBuffer.from(fileBuffer).toString('base64'). In Python, usebase64.b64encode(file_bytes).decode('utf-8').
Common errors
Next steps
- W-9 Requests → — Generate W-9 forms programmatically for a user
- Retrieving Documents → — Access documents that have been generated for an account
- Account Opening → — Review the KYC fields collected at account creation