Skip to main content
GET
Get order by ID

Authorizations

X-Monaco-Signature
string
header
required

Ed25519 session-key request signing. Every authenticated request carries three headers: X-Monaco-PublicKey (64-char lowercase-hex session public key), X-Monaco-Timestamp (Unix milliseconds, within 30s of server time), and X-Monaco-Signature (hex ed25519 signature). The signature is over METHOD\npath?query\ntimestamp_ms\nSHA256_hex(body), where the body hash is the SHA-256 of the empty byte string when there is no body. Obtain the session keypair from POST /api/v1/auth/challenge followed by POST /api/v1/auth/verify.

Path Parameters

orderId
string
default:2b1a5f9c-0000-4000-8000-000000000003
required

Response

OK

id
string<uuid> | null

Order UUID

Example:

"123e4567-e89b-12d3-a456-426614174000"

tradingPairId
string<uuid> | null

Trading pair UUID

Example:

"456e7890-e12b-12d3-a456-426614174000"

orderType
string | null

What kind of order this row is: LIMIT or MARKET for a book order, TWAP for a TWAP parent, CONDITIONAL for a price-triggered order. TWAP and CONDITIONAL appear only in responses — they name a row's kind and cannot be placed through the create-order request, which still takes LIMIT, MARKET or IOC. A row of either kind carries its kind-specific fields in twap or conditional; the fields shared by every kind (id, side, quantity, status, timestamps) are populated in place as usual.

Example:

"LIMIT"

side
string | null

Order side: BUY or SELL

Example:

"BUY"

price
string | null

Limit price (null for market orders). For a TWAP parent this is its optional parent-level limit price, and for a conditional order the limit price its triggered order will carry (null when it triggers as a market order).

Example:

"35000.00"

quantity
string | null

Original order quantity

Example:

"0.5"

filledQuantity
string | null

Quantity filled so far

Example:

"0.2"

averageFillPrice
string | null

Volume-weighted average fill price

Example:

"35050.00"

status
string | null

Order status: SUBMITTED, PARTIALLY_FILLED, FILLED, CANCELLED, REJECTED, or EXPIRED

Example:

"PARTIALLY_FILLED"

tradingMode
string | null

Trading mode: SPOT or MARGIN

Example:

"SPOT"

timeInForce
string | null

Time in force: GTC, IOC, or FOK

Example:

"GTC"

createdAt
string | null

Order creation timestamp (ISO 8601)

Example:

"2023-11-13T10:30:00Z"

updatedAt
string | null

Last update timestamp (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

expirationDate
string | null

Order expiration date (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

applicationTakerFee
string | null

Application taker fee in bps

Example:

"5"

monacoTakerFee
string | null

Monaco protocol taker fee in bps

Example:

"10"

monacoMakerRebate
string | null

Monaco maker rebate in bps (negative)

Example:

"-2"

totalTakerFees
string | null

Total taker fees charged in quote token

Example:

"2.63"

takerTotalPayment
string | null

Total amount paid by taker (price * qty + fees)

Example:

"17502.63"

makerTotalReceipt
string | null

Total amount received by maker (price * qty - rebate)

Example:

"17496.50"

marginAccountId
string<uuid> | null

Margin account UUID for margin orders

Example:

"123e4567-e89b-12d3-a456-426614174000"

positionSide
string | null
deprecated

DEPRECATED derived compatibility value. Order side is authoritative.

Example:

"LONG"

leverage
string | null

Leverage for margin orders

Example:

"5"

reduceOnly
boolean | null

Whether the order is reduce-only

Example:

false

positionId
string<uuid> | null

Associated margin position UUID

Example:

"123e4567-e89b-12d3-a456-426614174000"

quantityRaw
string | null

Original order quantity in raw format (for precision)

Example:

"500000000"

filledQuantityRaw
string | null

Filled quantity in raw format (for precision)

Example:

"200000000"

remainingQuantity
string | null

Remaining unfilled quantity (normalized for display)

Example:

"0.3"

remainingQuantityRaw
string | null

Remaining unfilled quantity in raw format (for precision)

Example:

"300000000"

clientOrderId
string | null

Client-assigned correlation handle as stored: the value supplied on create or replace, with surrounding whitespace trimmed. Absent when the order carried none, including every order placed before the field was accepted on write. Uniqueness is enforced only among your orders that are RESTING on the book, so several of your orders may share one value over time and a lookup by it can be ambiguous: an order that never rests never takes the handle, and the value is released the moment any order reaches a terminal state. It is a correlation handle, not an idempotency key.

Example:

"quote-btc-1130-a"

cancelledAt
string | null

Timestamp when the order was cancelled (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

filledAt
string | null

Timestamp when the order was fully filled (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

expiredAt
string | null

Timestamp when the order expired (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

submittedAt
string | null

Timestamp when the order was submitted (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

acknowledgedAt
string | null

Timestamp when the order was acknowledged (ISO 8601)

Example:

"2023-11-13T10:35:00Z"

triggerPrice
string | null

Trigger price for stop/conditional orders

Example:

"34000.00"

quoteVolume
string | null

Quote volume of the order

Example:

"17500.00"

applicationId
string<uuid> | null

Application UUID that created the order

parentOrderId
string<uuid> | null

Parent order UUID for linked orders

batchId
string<uuid> | null

Batch UUID for batch orders

terminalReason
string | null

Stable terminal cause for a cancelled order: USER_REQUESTED, REPLACED, LIQUIDATION, INSUFFICIENT_MARGIN, REDUCE_ONLY_EXHAUSTED, POSITION_CLOSED, OCO_SIBLING_TRIGGERED, or SYSTEM

Example:

"REDUCE_ONLY_EXHAUSTED"

postOnly
boolean | null

Whether the order was placed post-only (maker-only). Absent for orders placed before the flag was persisted.

Example:

false

twap
object | null

Present only when orderType is TWAP: the full TWAP parent, identical to what GET /api/v1/orders/twap/{twapOrderId} returns — schedule, slice counters, progress, and terminal reason. The row's shared fields mirror it: quantity is the parent's total quantity, filledQuantity its executed quantity, and status maps its state onto the order statuses.

conditional
object | null

Present only when orderType is CONDITIONAL: the full conditional order, identical to what the conditional-order endpoints return — trigger price and direction, condition type, linked group, and the order it triggers into. The row's shared fields mirror it, with status mapping its state onto the order statuses.

version
integer<int64> | null

Opaque, compare-only revision counter for this order's state: the sequencer step that wrote it. A strictly higher value is strictly newer state for that order. The SAME counter is carried on every order WebSocket event and on the orders snapshot frame, so a reconnecting client reconciles on (id, version) — take the REST row when snapshot.version >= local.version, else keep local state. Note >=, not >: on the stream, equal versions mean the SAME STEP rather than identical state, because one step emits several events for one order (an OrderPlaced and then its fills) and a batch shares one step across every item. A REST row is that step's FINAL state, so it wins a tie. Between two REST reads the comparison is simpler — equal there does mean identical state. Do not read anything else into the number: it is not a count of updates, consecutive values are not expected (it is drawn from a global sequence shared by every order, so per-order values are sparse and gaps are normal), and it is not comparable across different orders. Absent means unknown: an order last written before this field existed. Fall back to a full field comparison for those rather than treating absent as version zero — and note that a comparison against an absent value is false in both directions, so an order held locally without one is never refreshed by the merge above; take the REST row unconditionally for those. Reconciling on this counter does NOT on its own close a reconnect gap: an order that filled or was cancelled while the socket was down appears in neither the resting snapshot nor the stream, so recover fills from listUserTrades (ordered by execution time) and resolve anything your local state believes is resting that the snapshot no longer lists with a targeted getOrder. Unlike updatedAt, this value is identical on every REST endpoint that serves the same order state, and never advances without a state change.

Example:

918342

selfTradePreventionMode
enum<string> | null

The per-order self-trade-prevention override REQUESTED when this order was placed or replaced: CANCEL_MAKER, CANCEL_TAKER, CANCEL_BOTH, or SKIP. Absent when the order carried no override — including every order placed before the field was accepted on write — even though a wallet or platform default still governed its matching. This echoes the request, not the resolved default.

Available options:
CANCEL_MAKER,
CANCEL_TAKER,
CANCEL_BOTH,
SKIP
Example:

"CANCEL_TAKER"

conditionalOrderId
string | null

Present only on an order the engine placed for a take-profit or stop-loss trigger: the conditional order (GET /api/v1/orders/conditional/{conditionalOrderId}) that fired it. The reverse of ConditionalOrder.triggeredOrderId, so a close in order history can be attributed to the TP/SL that produced it without scanning the conditional list. Absent on every order a client placed itself, on TWAP slice children (those carry parentOrderId), and on triggered closes written before the field existed — there is no backfill, so a missing key on an older close means unknown, not placed by hand.

Example:

"019aefab-f665-854c-99dc-ced6db9014aa"