One endpoint places every order. You always
POST /v1/orders. You never pick the order type in the URL — the platform infers it from the fields you send (see How the order type is decided). This is why the per-type pages all hit the same endpoint with a different body.The two halves of trading on Aries
Placing an order is a request/response action over REST. But an order is not “done” when the REST call returns — it then lives a life on the exchange (working, partially filling, filling, getting cancelled, etc.). You watch that life over a WebSocket. So a robust trading app does both, in this order:- Subscribe first to the Account Updates WebSocket — authenticate and subscribe to the
accounttopic for youraccountId. You get a snapshot of current orders, positions, and balance right away, and won’t miss any update that fires the moment you place. - Then place the order over
POST /v1/orders. The response is an acknowledgement, not a fill — it confirms the order was accepted and returns theclOrdIdyou use to track, cancel, or replace it. - Watch it resolve on the WebSocket. State changes arrive as
account.orderevents —NEW → PARTIALLY_FILLED → FILLED, or terminalREJECTED/CANCELED/EXPIRED. These come only over the socket; REST never sends a second response.
Order types you can place
Aries supports four order types (how the order is priced and triggered) across three asset shapes (equity, single option, multi-leg option).By pricing / trigger
| Type | What it does | Required price fields | Guide |
|---|---|---|---|
| Market | Fills immediately at the best available price. No price guarantee. | none | Market order |
| Limit | Fills only at your price or better. Price guarantee, no fill guarantee. | price | Limit order |
| Stop | Dormant until the stop price is touched, then becomes a market order. | stopPrice | Stop order |
| Stop-Limit | Dormant until the stop price is touched, then becomes a limit order. | stopPrice + price | Stop-limit order |
By instrument
| Shape | How you express it | Guide |
|---|---|---|
| Equity | No legs array — just a symbol. | All four type pages above |
| Single-leg option | Exactly 1 entry in legs. | Single-leg option |
| Multi-leg option | 2–4 entries in legs (verticals, calendars, ratio spreads, etc.). | Multi-leg option |
Any of the four pricing types can apply to equities or single options. Multi-leg option orders in practice use Market or Limit (a limit price on a spread is the net debit/credit across all legs).
How the order type is decided
You never send a field called “this is an equity order.” Instead:- No
legs→ equity order. The top-levelsymbolis the stock/ETF. - 1 leg → single-leg option order.
- 2–4 legs → multi-leg option order.
type field (MARKET, LIMIT, STOP, STOP_LIMIT), and the price fields you must include depend on it. Each per-type page shows the exact body.
Anatomy of a place-order request
Every order — equity or option — shares this core. The per-type pages only change which optional fields are present.| Field | Required | Description |
|---|---|---|
tradingAccountId | yes | The trading account placing the order. |
symbol | yes | The instrument symbol (underlying symbol for options). |
side | yes | BUY, SELL, SELL_SHORT, or BUY_TO_COVER. |
type | yes | MARKET, LIMIT, STOP, or STOP_LIMIT. |
qty | yes | Quantity as a decimal string (e.g. "100"). |
timeInForce | yes | DAY, GTC, IOC, FOK (options: DAY/GTC only). |
price | conditional | Limit price. Required for LIMIT and STOP_LIMIT. |
stopPrice | conditional | Trigger price. Required for STOP and STOP_LIMIT. |
legs | conditional | 1–4 option legs. Presence makes it an option order. |
clientId | no | Your own correlation identifier, echoed back. |
currency | no | 3-letter currency code; defaults to USD. |
exDestination | no | Routing hint (MNGD). Managed routing is applied automatically; you normally omit this. |
All monetary and quantity values are sent and returned as JSON strings, not numbers, to preserve decimal precision. Send
"150.50", not 150.5.What you get back
A successfulPOST /v1/orders returns an acknowledgement, not a fill. The key fields:
| Field | Meaning |
|---|---|
success | Whether the order was accepted. |
clOrdId | The client order ID. Track the order by this and use it as origClOrdId to cancel or replace. |
status | Initial status — usually PENDING_NEW or NEW. |
cumQty / leavesQty | Filled vs. remaining quantity (usually 0 / full at acknowledgement). |
avgPrice | Average fill price (fills as they happen). |
ordRejReason | Populated only if the order was rejected. |
transactTime | Server timestamp. |
The order lifecycle
Orders move through a well-defined set of states. You’ll see these as theordStatus field on account.order WebSocket events.
| Status | Meaning |
|---|---|
PENDING_NEW | Submitted, not yet accepted by the exchange. |
NEW | Live and working on the book. |
PARTIALLY_FILLED | Some quantity executed; rest still working. |
FILLED | Fully executed. Terminal. |
PENDING_CANCEL | Cancel requested, awaiting confirmation. |
CANCELED | Cancelled. Terminal. |
PENDING_REPLACE | Replace requested, awaiting confirmation. |
REJECTED | Refused (bad params, halted symbol, insufficient buying power). Terminal. |
EXPIRED | Hit its time-in-force limit without filling. Terminal. |
Where to watch and listen for updates
All order status changes flow over the Account Updates WebSocket, on theaccount topic, as events named account.order.
- Connect to
wss://api.aries.com/v1/accounts/ws. - Authenticate within 5 seconds with your access token.
- Subscribe to the
accounttopic with youraccountId. - Receive an initial snapshot (current open orders, positions, balance), then a live stream of
account.orderevents as your orders change.
If the connection drops. A dropped socket means you may have missed events while disconnected. On reconnect: re-authenticate, re-subscribe to the
account topic, and use the snapshot the server returns to reset your view. To be sure nothing was missed, also reload working orders over REST from Today’s Orders and reconcile against your local state before resuming.Modifying and cancelling
Two more endpoints round out the module:Replace (modify) an order
POST /v1/orders/replace — change price, quantity, or time-in-force on a working order. Each replace returns a new clOrdId you must use for the next replace.Cancel an order
POST /v1/orders/cancel — cancel a working or partially-filled order by origClOrdId. Any quantity already filled is preserved.Preview before you place.
POST /v1/orders/preview accepts the exact same body as place-order and returns estimated cost, commission, buying-power impact, fees, and any warnings — without sending the order. Use it to show a confirmation screen. See Preview Order.Next steps
Market order
The simplest order. Buy or sell now at the best available price.
Limit order
Set your price. Includes the full REST + WebSocket round-trip.
Single-leg option
Buy or sell one call or put.
Multi-leg option
Verticals, calendars, and ratio spreads in a single order.