Before you start
To place an order, you’ll need:- An authenticated API session with a valid Bearer token
- An account ID for the customer placing the order
- The instrument ID for the security being traded; you can look these up via the instruments endpoints
- Sufficient cash balance (for buy orders) or position units (for sell orders) in the account
Placing an order
Send aPOST request to /accounts/{account_id}/orders. The request body depends on whether you’re buying or selling.
Buy orders
Buy orders are cash-based: you specify how much money to invest, not how many units to buy. We calculate the quantity based on the current price.Sell orders
Sell orders are unit-based: you specify how many units to sell, not how much cash to receive.Request body
The response
A successful request returns201 Created with the order object:
statusstarts atplaced. See the order lifecycle for how it progresses.positionisnulluntil the order is executed; it gets populated when a trade is recorded.traded_quantityandtraded_notionalare"0"initially and increase as trades execute.feesreflects the total fee amount for this order.net_cash_amountis the amount that actually gets traded (cash amount minus fees).tradesis an empty array until execution happens.purposeis set by us. Orders you place through the API will always haveuser_request.
Order creation is synchronous; we validate the request and return the order immediately. Everything after that (execution, settlement) happens asynchronously. Use webhooks or poll the Retrieve order endpoint to track progress.