Skip to main content
GET
cURL

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

conditionalOrderId
string
default:2b1a5f9c-0000-4000-8000-000000000004
required

Response

OK

conditionalOrderId
string | null
tradingPairId
string<uuid> | null
marginAccountId
string | null
positionId
string | null
linkedGroupId
string | null
conditionType
string | null
triggerSource
string | null
triggerPrice
string | null
side
string | null
positionSide
string | null
orderType
string | null
limitPrice
string | null
quantity
string | null
slippageToleranceBps
integer<int32> | null
reduceOnly
boolean | null
timeInForce
string | null
state
string | null
triggeredOrderId
string | null
triggeredAt
string | null
cancelledAt
string | null
expiresAt
string | null
failureReason
string | null
createdAt
string | null
updatedAt
string | null
parentOrderId
string | null
associationType
string | null
activatedAt
string | null
version
integer<int64> | null

Opaque, compare-only revision counter for this conditional order's state: the sequencer step that wrote it. A strictly higher value is strictly newer state for that conditional order. The SAME counter is carried on the conditional_orders WebSocket SNAPSHOT frame — but deliberately NOT on the live conditional_orders events, which build from the row as it stood before the sequencer acted and so could only report the version the row held BEFORE the change they announce. So seed conditional state from the snapshot frame and REST, reconciling on (conditionalOrderId, version) — take the REST row when snapshot.version >= local.version, else keep local state — and apply the live events as state without ranking them. Note >=, not >: equal versions mean the SAME STEP rather than identical state, because one step can write several conditional rows (a trigger writes the triggered row and cancels its OCO sibling under one step). A REST row is that step's FINAL state, so it wins a tie. One consequence to plan for: the snapshot is read from the database, which lags the matching engine, so a transition that fires during the read is in neither the snapshot nor the delivered stream and cannot be ranked — re-read the affected rows if a conditional order's state matters at reconnect. Do not read anything else into the number: it is drawn from the same global sequence plain orders use, so values are sparse, gaps are normal, and it is not comparable across different conditional orders — nor against a plain order's version. Absent means unknown: a row last written before this field existed. Fall back to a full field comparison for those rather than treating absent as version zero.

Example:

918342

triggeredOrder
object | null

Present only when state is TRIGGERED: the execution outcome of the order this conditional fired into (triggeredOrderId) — status, filled quantity, volume-weighted average fill price, taker fees and fill time — read from that order at request time. Trigger price and fill price are different numbers: the trigger fires on the mark price and the leg then trades against the book, so a MARKET leg fills at least the half-spread plus its own impact away from triggerPrice, and a LIMIT leg may still be resting (SUBMITTED / PARTIALLY_FILLED) or have been cut by the protective band (CANCELLED with a terminalReason). Absent while waiting on the trigger, on the conditional_orders WebSocket frames, and in the rare case the triggered order cannot be read.

trailBps
integer<int32> | null

TRAILING_STOP only: retracement in basis points behind the watermark.

activationPrice
string | null

TRAILING_STOP only: mark level that starts tracking. Absent when the stop armed immediately.

watermarkPrice
string | null

TRAILING_STOP only: best mark (highest for a long, lowest for a short) observed since arming. triggerPrice is derived from it and only ever moves in the position's favour. Absent until the first mark is observed after arming.

trailArmedAt
string | null

TRAILING_STOP only: when tracking began. Absent while the stop is still waiting for activationPrice (state stays ACTIVE in both phases).