API

Get Started

WelcomeQuickstartGuidesChangelogSDKs and ToolsAdditional InfoFAQ

Authorization

POSTCreate personal access token

List Accounts

GETGet accounts

Account Details

GETGet account portfolio v2GETGet history

Tax Lot Selling

GETGet unrealized tax lotsGETGet unrealized tax lots for symbolGETGet unrealized tax lots csv

Instrument Details

GETGet all instrumentsGETGet instrumentGETSearch bonds

Market Data

POSTGet quotesGETGet bond detailsPOSTGet option expirationsPOSTGet option chainGETGet bars v2GETGet bars v2 with aggregation

Orders

POSTPreflight single legPOSTPreflight multi legPOSTPlace orderPUTReplace orderPOSTSearch ordersPOSTPlace multileg orderGETGet orderDELETECancel order

Option Details

GETGet option greeksPOSTGet strategy quote

Event Contracts

POSTGet event summaryGETGet event categoriesGETGet event details
HelpFeedback

Additional Info

Order Lifecycle & Reconciliation

What to expect from an order between preflight and the transaction ledger: validation, bracket legs, tracking, fill details, and matching executions back to the orders that created them.

Validating orders with preflight

The single-leg and multi-leg preflight endpoints are non-mutating. They return the estimated cost and impact of an order, including commission and fees, without placing it.

A successful preflight is not a guarantee that placement will succeed. Some checks only run at placement. For example, an account without crypto enabled can pass preflight and then be rejected with error 50154. See Crypto entitlement.

Recommended

Run preflight to show users an estimate before they confirm, and still handle rejections from the place order request.

Bracket order legs

A bracket pairs an entry order with take-profit and/or stop-loss exit legs. See Placing your first bracket order for how to place one.

BehaviorResult
Time in force and expirationExit legs inherit the entry's. A DAY entry gets DAY exit legs, and a GTD entry gets exit legs with the same expirationTime.
An invalid legEvery leg is validated against the live market at submission. If any leg is invalid, the whole bracket is rejected with 400 and nothing is placed.
Cancelling an unfilled entryCancels both exit legs.
Manually cancelling one exit legDoes not cancel the other exit leg. Cancel it separately if you want both gone.

Finding and tracking orders

There is no endpoint that lists every order on an account. Use these instead:

To findUse
Open ordersGet portfolio v2
One order you placedGet order with its orderId
Recent orders matching criteriaSearch orders, which returns up to 500 orders created in the last 30 days
Posted transactionsGet history

Polling for updates

There is no WebSocket, webhook, or event stream for orders or fills. Poll for order and fill status instead.

The rate limit is 10 requests per second per account, across all endpoints. Requests over the limit return 429.

Recommended

Keep polling well under 10 requests per second per account, leaving room for the rest of your traffic, and retry 429 responses with exponential backoff.

Fill details

Get order reports fills as aggregates, such as filledQuantity and averagePrice. It doesn't return individual fills, execution IDs, or per-fill fees.

For the amounts and fees of an execution, use the transaction history once it posts.

Reconciling history with orders

Get history rows don't include the ID of the order that created them. Each row has these fields:

FieldDescription
idTransaction ID
timestampWhen the transaction happened
accountNumberAccount the transaction happened on
typeTRADE, MONEY_MOVEMENT, or POSITION_ADJUSTMENT
subTypeSubtype of the transaction
symbolSymbol of the transaction
securityTypeSecurity type of the transaction
sideBUY or SELL, for trades
directionINCOMING or OUTGOING
quantityQuantity of the transaction
principalAmountPrincipal amount of the transaction
feesFees of the transaction
netAmountNet amount of the transaction
descriptionDescription of the transaction

History posting lag

A filled trade isn't always in history right away. The ledger can post after the order shows as filled.

Recommended

  • Record each order you submit on your side, including its orderId, symbol, side, quantity, and submission time.
  • Match history rows to those records by symbol, side, quantity, and timestamp.
  • Retry reconciliation with backoff so trades that haven't posted yet are picked up on a later pass.