Improved

Account creation contract aligned by account type

Broker API

POST /v1/accounts is now documented as a single flat, permissive request object with account-type-specific requirements described in prose and named examples. The server contract is unchanged; generated client models may change.

  • Documents requirements for trading, custodial, IRA, and donor-advised accounts, and confirms that an omitted account_type defaults to trading.
  • Adds entity_id and minor_identity to the account creation request. Donor-advised accounts reference an existing legal entity through entity_id; custodial accounts require identity and minor_identity.
  • Documents creating an account for an existing holder through primary_account_holder_id for trading and IRA accounts.
  • Splits account type enums: create requests use AccountCreationType (trading, custodial, donor_advised, ira), while account responses use AccountType, which now also documents trust, omnibus_non_disclosed, omnibus_sub, hsa, and joint.
  • Removes contact, identity, disclosures, and agreements from the statically required list so every documented creation flow is representable; conditional requirements remain enforced server-side.
  • Corrects the account creation error responses to the structured Error object with code and message: malformed or undecodable bodies return HTTP 400 with code 40010000, and validation failures return HTTP 422 with code 40010001 for conflicting holder data.
  • Documents HTTP 403 on PATCH /v1/accounts/{account_id} when a request supplies a primary_account_holder_id different from the account's current primary holder.
  • Adds four named request examples (inline trading, custodial, donor-advised, and existing-holder IRA), marks tax_id_type as required on the custodial minor identity, and clarifies that TrustedContact requires at least one of email_address, phone_number, or street_address.

Affected Endpoints

  • POST /v1/accounts
  • GET /v1/accounts
  • GET /v1/accounts/{account_id}
  • PATCH /v1/accounts/{account_id}