Place order
URL — No public environment serves this socket yet.
Op submitOrder
The owner’s verdict arrives on the order channel, correlated by the clientOrderId you chose — orderUpdate status: QUEUED, or orderRejected. The ack carries no orderId and cannot: none exists until the owner mints one.
Money is a decimal string, exact at the instrument’s own scale. price is rendered at the instrument’s priceScale and qty at its qtyScale, and a value that does not fit that scale exactly is REFUSED, never rounded: submitting a quantity you did not write is worse than refusing the one you did. Trailing zeros are fine — “0.0350” and “0.035” are the same number at scale 4.
Two aliases apiece, and the same rule for both. Name the account by account (its display name, org-scoped) or by accountId, and the instrument by instrument (its platform symbol) or by instrumentId — at least one of each pair, and both stated must agree. Sending both is fine and is what an interface holding the id it resolved and the name a trader typed will do; they are checked against each other, and only a disagreement refuses (MALFORMED), because acting on either would act on a guess about which half you meant. The HTTP lane states the identical rule for the identical body.
Prefer the ids where you hold them. A symbol is reference data’s to change and the id is not, so a rename between the read and the submit turns a symbol into UNKNOWN_INSTRUMENT while the id still resolves.
Sizing and precision come from reference data, not from this wire. price is exact at the instrument’s priceScale and qty at its qtyScale, and the owner further refuses TICK_SIZE_VIOLATION, QTY_STEP_VIOLATION, QTY_BOUND_BREACH and MIN_NOTIONAL_BREACH against the instrument’s tick, step, bounds and minimum notional. Those values live on the refdata instrument row — note a scale is not a tick: priceScale is decimal places, and a venue’s tick can be coarser than the scale, so the scales alone cannot tell you whether a price is placeable.
A reference-data API that serves the instrument row (the v2 GraphQL instruments endpoint’s successor) is planned and not yet available. Until it ships there is no way to pre-validate sizing from a published surface, and a mis-sized order costs a round trip: the refusal names the observed value against the limit it breached (observedValue/limitValue with a unit), which is what to show a trader meanwhile. This document will name that endpoint once it exists.
Request parameters
Response parameters
Offered, not accepted. The command reached the stream; nothing about admission is known yet and this frame says nothing about it. Wait for orderUpdate status: QUEUED or orderRejected on the order channel, matching on the clientOrderId you sent. There is no orderId here because none has been minted.