Orders and matching
Orders act for one desk and one orderable bundle instrument. Spot and forward orders share the same route while keeping separate size fields; new exposure is accepted only when the selected instrument is enabled.
Before submitting
Call POST /api/v1/orders/preview with the intended order fields to inspect its product, notional basis, and available maker/taker fee projections. Preview does not place an order or promise a fill.
An order body names an instrument_symbol, side, order_type, time_in_force, and exactly one size:
- spot: integer
size_tokens; - forward: decimal-string
size_mft.
Prices are decimal strings. Size and price must respect the instrument's lot and tick increments.
Retry identity
Ordinary direct REST and FIX placement requires a non-empty account-scoped
client_order_id; FIX carries the same identity as ClOrdID. Voice placement
may omit it because the gateway derives a stable voice:{session_id} identity.
Mint one value for one intended order and reuse it only when retrying that same
intent.
If the identity already names a durable order for the selected account, POST /api/v1/orders returns 409 with problem type client-order-id-conflict and machine field existing_order_id. Reconcile that order in the account's order records before choosing a new identity.
This is duplicate prevention and durable recovery, not an instruction to submit
a changed request. An unchanged retry can return the original committed result;
pending or ambiguous results can be reconciled through
GET /api/v1/orders/outcome. Another account may independently use the same
text; a conflict never returns an order from outside the calling account.
Order types
| Type | limit_price | stop_price | Behavior |
|---|---|---|---|
MARKET | absent | absent | Trades against available opposing prices and never rests |
LIMIT | required | absent | Trades at the limit or better, then may rest |
STOP | absent | required | Activates as a market order after its trigger |
STOP_LIMIT | required | required | Activates as a limit order after its trigger |
PEG | absent | absent | Joins the same-side non-pegged touch using the route's default peg policy |
A stop uses the instrument's last trade as its trigger reference. A stop on a book with no trade remains parked. A peg needs an available same-side non-pegged reference and does not accept a client-supplied offset through the current order body.
Time in force
| Value | Behavior |
|---|---|
GTC | Remainder can rest |
DAY | Remainder can rest until the venue session closes |
IOC | Trades immediately and cancels any remainder |
FOK | Requires the complete executable size or rejects without a partial fill |
See Venue clock and sessions for the current boundary and timestamp state.
Matching and cancellation
Resting orders match by price, then arrival order within a price. A trade executes at the resting order's price. Self-trade prevention is applied by desk identity.
PATCH /api/v1/orders/{id}/cancel cancels an order owned by the selected desk. Cancellation remains available to an eligible trading membership when account, venue, instrument, or timestamp controls block new exposure.
Book snapshots aggregate price, size_tokens, and order_count at each level. Request at most 200 levels per side. Realtime clients that detect a sequence gap should refresh the corresponding REST snapshot.