Skip to main content
Track what’s new and what’s changed in our API. We publish an entry for every user-facing change, and we’re explicit about whether a change is backwards compatible or requires a new API version. Subscribe to updates via the RSS feed at /changelog/rss.xml.
2026-09-02

Redesigned order quote responses

New API version 2026-09-02. See Versioning to migrate.
We’ve reshaped the Get an order quote response. Instead of one generic object for every quote, you now get a variant specific to the instrument and order mode you asked about, carrying only the economics that apply to that combination.Breaking
  • POST /accounts/{account_id}/order-quotes no longer returns a single generic OrderQuote object. It returns a union discriminated on quote_type, with one variant per instrument and order mode: amc_market_cash, bill_market_cash, bond_fixed_coupon_market_cash, bond_zero_coupon_market_cash, etf_market_cash, etf_limit_cash, etf_market_quantity, etf_limit_quantity, mmf_market_cash, or sell. Switch on quote_type before reading a quote.
  • The flat economics fields moved under an estimate object and dropped the estimated_ prefix: estimated_price, estimated_quantity, and estimated_cash are now estimate.price, estimate.quantity, and estimate.cash. fees, net_cash_amount, max_cost, and min_proceeds moved under estimate too. Each variant only carries the fields that apply to it.
  • instrument is now the full instrument object instead of an ID string.
Added
  • order_type on every variant, indicating whether the quote is for a market or limit order.
  • currency on every variant.
  • Instrument-specific economics in estimate: yield, annual_income, and accrued_interest for fixed income, plus notional, cost, price_buffer_percentage, and asof where they apply.
  • reservation object on every variant with what a placement would set aside: a cash amount vs a unit quantity (amount, denomination).
  • created_at on every variant.
additions

Enhanced idempotency key error handling

We now return more specific error codes when idempotency keys have conflicts or have expired, giving you better visibility into retry scenarios.Added
  • idempotency_key_conflict error code when the Idempotency-Key was already used for a resource outside the scope of this request.
  • idempotency_key_expired error code when the Idempotency-Key was already used, and the resource it created is older than the replay window.
additions

Fee charge collection tracking and earnings breakdowns

Fee charges now track how much has been collected and what’s outstanding, and earnings responses include gross capital and income fields for finer-grained reporting.Added
  • collected_amount on Retrieve a fee charge for the cash collected so far.
  • outstanding_amount on Retrieve a fee charge for what’s still owed on the charge.
  • collections array on Retrieve a fee charge with a history of collection events per fee charge.
  • gross_capital on earnings responses for capital gains before fees and taxes.
  • gross_income on earnings responses for income earnings before fees and taxes.
additions

Document references and confirmation type

Account documents can now point at the related order or object, and confirmation documents include an order_confirmation type.Added
  • reference on List account documents responses for the order or object the document evidences (order ID for confirmations, null for period documents).
  • order_confirmation on DocumentType for account document requests and responses.
  • position_not_open error code when you try to update a closed or closing position.
additions

Fixed-income instrument schema updates

We cleaned up the Bill instrument schema by removing the par_value field from responses. The field remains available on Bond instruments.Changed
  • Removed par_value from Bill responses. par_value is still present on Bond instruments.
additions

Enhanced fund details and fee variant support

We expanded ETF attributes to surface fund display metadata and currency details, and added a new endpoint to retrieve fees with their scoped variants.Added
  • New fields on ETF instrument responses: display_name, headline, currency_sentence, rhp_years, and fund_base_currency.
  • Retrieve a fee endpoint to look up a specific fee by ID, including its variants.
  • variants array on Fee objects containing scoped fee variants per instrument, instrument type, portfolio type, or transaction type.
additions

OAuth token endpoint RFC 6749 compliance

The POST /auth/token endpoint now returns RFC 6749-compliant error responses so you can distinguish between bad requests and authentication failures.Added
  • 401 Unauthorized response for client authentication failures on Issue an OAuth token, with an OAuthErrorBody payload following RFC 6749 §5.2.
Changed (backwards compatible)
  • 400 Bad Request response on POST /auth/token now uses OAuthErrorBody schema with error and error_description fields (RFC 6749 §5.2) instead of the standard error envelope.
additions

Permissions and reference expansion

You can now query your effective permissions in the current realm, and we support portfolio_transfer as a reference type for activity tracking.Added
  • List permissions to retrieve effective permissions for the authenticated actor, including scope and conditional details.
  • portfolio_transfer enum value on reference types for tracking portfolio transfers.
additions

Identify the end person on each request

When a call concerns an end person, send Person-Id so we can attribute the action for compliance. Client-User-Id is optional and helps with debugging.Added
  • Person-Id request header for our person ID (per_…) you’re acting on behalf of. Send this whenever the request concerns an end person. See Attribution.
  • Optional Client-User-Id request header for your own identifier of the same end user, for log correlation and support.
  • Error codes person_id_too_long and client_user_id_too_long when either header exceeds 255 characters.
additions

Fixed person reads

Fixed
  • Retrieve a person no longer returns 500 when optional person columns are null in storage.
additions

More reliable valuation

Instrument responses carry more ETF detail, and account valuation reads are more consistent across price providers.Added
  • trading_increment on instrument responses.
Changed (backwards compatible)
  • GET /accounts/{account_id}/valuation uses the latest price per timestamp across providers.
Fixed
  • Unrealized earnings percentage on GET /accounts/{account_id}/earnings no longer errors on zero cost basis.
additions

On-the-run bills and fixed-income pricing detail

You can look up the current on-the-run treasury bill per maturity period, and price responses now include accrued interest for bonds and bills.Added
  • GET /bills/otr to retrieve the on-the-run bill matrix for an issuer country. Periods with no matching bill are omitted.
  • ETF as an instrument type on List instruments and Retrieve an instrument.
  • accrued_interest on GET /prices responses.
  • next_coupon_date on fixed income instruments.
additions

Person creation and claim history

You can create persons directly and see the full claim audit trail by default when listing claims.AddedChanged (backwards compatible)
  • List claims for a person now defaults to include_history=true (full audit trail, newest first). Pass ?include_history=false to collapse to the current pending and verified row per claim type. See Claims.
additions
We added event polling, versioned legal document reads, and a broader set of webhook event types so you can react to orders, trades, positions, and accounts without polling.Added
  • GET /legal-documents and related version and file download endpoints.
  • Retrieve a person claim.
  • Webhook event types delivered to your registered endpoints: order.placed, order.pending, order.executing, order.filled, order.settled, order.cancelled, trade.executed, trade.settled, position.opened, position.closing, position.closed, account.opened, account.suspended, account.activated, account.closing, account.closed, and customer.closed. See Webhooks.
Changed (backwards compatible)
  • POST /auth/token accepts only the client_credentials grant.
  • purpose is required on POST /signed-uploads.
additions

Event reads and webhook delivery

You can list events from the API, and we started delivering webhook payloads automatically with retries.Added
  • List events for tenant-scoped event reads.
  • Automatic webhook delivery with retries for subscribed event types. See Deliveries.
2026-01-01

Initial API release

New API version 2026-01-01. See Versioning.
We shipped the first public version of our API. This is the baseline for date-based versioning; every future breaking change will ship as a new dated version, and everything below is available on 2026-01-01.Added
  • Authentication with bearer tokens. See Authentication.
  • Onboarding for persons, claims, and applications. See Onboarding.
  • Trading, holdings, valuation, and payments endpoints across accounts.
  • Webhooks with at-least-once delivery, signature verification, and automatic retries. See Webhooks.
  • Idempotency support for write requests. See Idempotency.