curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/orders/{orderId} \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/orders/{orderId}"
headers = {"X-Monaco-Signature": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Monaco-Signature': '<api-key>'}};
fetch('https://staging.apimonaco.xyz/api/v1/orders/{orderId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.apimonaco.xyz/api/v1/orders/{orderId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Monaco-Signature: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://staging.apimonaco.xyz/api/v1/orders/{orderId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Monaco-Signature", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://staging.apimonaco.xyz/api/v1/orders/{orderId}")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/orders/{orderId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Monaco-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"tradingPairId": "456e7890-e12b-12d3-a456-426614174000",
"orderType": "LIMIT",
"side": "BUY",
"price": "35000.00",
"quantity": "0.5",
"filledQuantity": "0.2",
"averageFillPrice": "35050.00",
"status": "PARTIALLY_FILLED",
"tradingMode": "SPOT",
"timeInForce": "GTC",
"createdAt": "2023-11-13T10:30:00Z",
"updatedAt": "2023-11-13T10:35:00Z",
"expirationDate": "2023-11-13T10:35:00Z",
"applicationTakerFee": "5",
"monacoTakerFee": "10",
"monacoMakerRebate": "-2",
"totalTakerFees": "2.63",
"takerTotalPayment": "17502.63",
"makerTotalReceipt": "17496.50",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"positionSide": "LONG",
"leverage": "5",
"reduceOnly": false,
"positionId": "123e4567-e89b-12d3-a456-426614174000",
"quantityRaw": "500000000",
"filledQuantityRaw": "200000000",
"remainingQuantity": "0.3",
"remainingQuantityRaw": "300000000",
"clientOrderId": "quote-btc-1130-a",
"cancelledAt": "2023-11-13T10:35:00Z",
"filledAt": "2023-11-13T10:35:00Z",
"expiredAt": "2023-11-13T10:35:00Z",
"submittedAt": "2023-11-13T10:35:00Z",
"acknowledgedAt": "2023-11-13T10:35:00Z",
"triggerPrice": "34000.00",
"quoteVolume": "17500.00",
"applicationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parentOrderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"batchId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"terminalReason": "REDUCE_ONLY_EXHAUSTED",
"postOnly": false,
"twap": {
"twapOrderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"side": "BUY",
"tradingMode": "SPOT",
"totalQuantity": "10",
"executedQuantity": "4.5",
"executedNotional": "157500.00",
"averageFillPrice": "35000.00",
"progress": "0.45",
"limitPrice": "35000.00",
"slippageToleranceBps": 100,
"reduceOnly": false,
"marginAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"riskBucketId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leverage": "5",
"useMasterBalance": false,
"strategyKey": "<string>",
"clientTwapId": "<string>",
"randomize": true,
"startTime": "2026-08-01T10:00:00Z",
"endTime": "2026-08-01T11:00:00Z",
"intervalMs": 30000,
"plannedSlices": 120,
"slicesPlaced": 54,
"slicesSkipped": 2,
"nextSliceAt": "2026-08-01T10:27:30Z",
"state": "ACTIVE",
"terminalReason": "<string>",
"createdAt": "2026-08-01T09:59:58Z",
"updatedAt": "<string>",
"cancelledAt": "<string>",
"completedAt": "<string>",
"executionStyle": "TAKER",
"triggerPrice": "<string>",
"triggerDirection": "<string>",
"conditionalExpiry": "<string>",
"triggeredAt": "<string>"
},
"conditional": {
"conditionalOrderId": "<string>",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"marginAccountId": "<string>",
"positionId": "<string>",
"linkedGroupId": "<string>",
"conditionType": "<string>",
"triggerSource": "<string>",
"triggerPrice": "<string>",
"side": "<string>",
"positionSide": "<string>",
"orderType": "<string>",
"limitPrice": "<string>",
"quantity": "<string>",
"slippageToleranceBps": 123,
"reduceOnly": true,
"timeInForce": "<string>",
"state": "<string>",
"triggeredOrderId": "<string>",
"triggeredAt": "<string>",
"cancelledAt": "<string>",
"expiresAt": "<string>",
"failureReason": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"parentOrderId": "<string>",
"associationType": "<string>",
"activatedAt": "<string>",
"version": 918342,
"triggeredOrder": {
"orderId": "01a0887b-8e7c-7612-983f-b7ee89c2cbbf",
"status": "SETTLED",
"filledQuantity": "3090659.3",
"averageFillPrice": "0.145611",
"totalTakerFees": "202.52",
"filledAt": "2026-09-09T23:23:13.936682Z",
"terminalReason": "SYSTEM"
},
"trailBps": 123,
"activationPrice": "<string>",
"watermarkPrice": "<string>",
"trailArmedAt": "<string>"
},
"version": 918342,
"selfTradePreventionMode": "CANCEL_TAKER",
"conditionalOrderId": "019aefab-f665-854c-99dc-ced6db9014aa"
}Get order by ID
Get order by ID.
Get a single order by its ID. Users can only access their own orders.
curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/orders/{orderId} \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/orders/{orderId}"
headers = {"X-Monaco-Signature": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Monaco-Signature': '<api-key>'}};
fetch('https://staging.apimonaco.xyz/api/v1/orders/{orderId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.apimonaco.xyz/api/v1/orders/{orderId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-Monaco-Signature: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://staging.apimonaco.xyz/api/v1/orders/{orderId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Monaco-Signature", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://staging.apimonaco.xyz/api/v1/orders/{orderId}")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/orders/{orderId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Monaco-Signature"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "123e4567-e89b-12d3-a456-426614174000",
"tradingPairId": "456e7890-e12b-12d3-a456-426614174000",
"orderType": "LIMIT",
"side": "BUY",
"price": "35000.00",
"quantity": "0.5",
"filledQuantity": "0.2",
"averageFillPrice": "35050.00",
"status": "PARTIALLY_FILLED",
"tradingMode": "SPOT",
"timeInForce": "GTC",
"createdAt": "2023-11-13T10:30:00Z",
"updatedAt": "2023-11-13T10:35:00Z",
"expirationDate": "2023-11-13T10:35:00Z",
"applicationTakerFee": "5",
"monacoTakerFee": "10",
"monacoMakerRebate": "-2",
"totalTakerFees": "2.63",
"takerTotalPayment": "17502.63",
"makerTotalReceipt": "17496.50",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"positionSide": "LONG",
"leverage": "5",
"reduceOnly": false,
"positionId": "123e4567-e89b-12d3-a456-426614174000",
"quantityRaw": "500000000",
"filledQuantityRaw": "200000000",
"remainingQuantity": "0.3",
"remainingQuantityRaw": "300000000",
"clientOrderId": "quote-btc-1130-a",
"cancelledAt": "2023-11-13T10:35:00Z",
"filledAt": "2023-11-13T10:35:00Z",
"expiredAt": "2023-11-13T10:35:00Z",
"submittedAt": "2023-11-13T10:35:00Z",
"acknowledgedAt": "2023-11-13T10:35:00Z",
"triggerPrice": "34000.00",
"quoteVolume": "17500.00",
"applicationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parentOrderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"batchId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"terminalReason": "REDUCE_ONLY_EXHAUSTED",
"postOnly": false,
"twap": {
"twapOrderId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"side": "BUY",
"tradingMode": "SPOT",
"totalQuantity": "10",
"executedQuantity": "4.5",
"executedNotional": "157500.00",
"averageFillPrice": "35000.00",
"progress": "0.45",
"limitPrice": "35000.00",
"slippageToleranceBps": 100,
"reduceOnly": false,
"marginAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"riskBucketId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leverage": "5",
"useMasterBalance": false,
"strategyKey": "<string>",
"clientTwapId": "<string>",
"randomize": true,
"startTime": "2026-08-01T10:00:00Z",
"endTime": "2026-08-01T11:00:00Z",
"intervalMs": 30000,
"plannedSlices": 120,
"slicesPlaced": 54,
"slicesSkipped": 2,
"nextSliceAt": "2026-08-01T10:27:30Z",
"state": "ACTIVE",
"terminalReason": "<string>",
"createdAt": "2026-08-01T09:59:58Z",
"updatedAt": "<string>",
"cancelledAt": "<string>",
"completedAt": "<string>",
"executionStyle": "TAKER",
"triggerPrice": "<string>",
"triggerDirection": "<string>",
"conditionalExpiry": "<string>",
"triggeredAt": "<string>"
},
"conditional": {
"conditionalOrderId": "<string>",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"marginAccountId": "<string>",
"positionId": "<string>",
"linkedGroupId": "<string>",
"conditionType": "<string>",
"triggerSource": "<string>",
"triggerPrice": "<string>",
"side": "<string>",
"positionSide": "<string>",
"orderType": "<string>",
"limitPrice": "<string>",
"quantity": "<string>",
"slippageToleranceBps": 123,
"reduceOnly": true,
"timeInForce": "<string>",
"state": "<string>",
"triggeredOrderId": "<string>",
"triggeredAt": "<string>",
"cancelledAt": "<string>",
"expiresAt": "<string>",
"failureReason": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"parentOrderId": "<string>",
"associationType": "<string>",
"activatedAt": "<string>",
"version": 918342,
"triggeredOrder": {
"orderId": "01a0887b-8e7c-7612-983f-b7ee89c2cbbf",
"status": "SETTLED",
"filledQuantity": "3090659.3",
"averageFillPrice": "0.145611",
"totalTakerFees": "202.52",
"filledAt": "2026-09-09T23:23:13.936682Z",
"terminalReason": "SYSTEM"
},
"trailBps": 123,
"activationPrice": "<string>",
"watermarkPrice": "<string>",
"trailArmedAt": "<string>"
},
"version": 918342,
"selfTradePreventionMode": "CANCEL_TAKER",
"conditionalOrderId": "019aefab-f665-854c-99dc-ced6db9014aa"
}Authorizations
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
Response
OK
Order UUID
"123e4567-e89b-12d3-a456-426614174000"
Trading pair UUID
"456e7890-e12b-12d3-a456-426614174000"
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.
"LIMIT"
Order side: BUY or SELL
"BUY"
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).
"35000.00"
Original order quantity
"0.5"
Quantity filled so far
"0.2"
Volume-weighted average fill price
"35050.00"
Order status: SUBMITTED, PARTIALLY_FILLED, FILLED, CANCELLED, REJECTED, or EXPIRED
"PARTIALLY_FILLED"
Trading mode: SPOT or MARGIN
"SPOT"
Time in force: GTC, IOC, or FOK
"GTC"
Order creation timestamp (ISO 8601)
"2023-11-13T10:30:00Z"
Last update timestamp (ISO 8601)
"2023-11-13T10:35:00Z"
Order expiration date (ISO 8601)
"2023-11-13T10:35:00Z"
Application taker fee in bps
"5"
Monaco protocol taker fee in bps
"10"
Monaco maker rebate in bps (negative)
"-2"
Total taker fees charged in quote token
"2.63"
Total amount paid by taker (price * qty + fees)
"17502.63"
Total amount received by maker (price * qty - rebate)
"17496.50"
Margin account UUID for margin orders
"123e4567-e89b-12d3-a456-426614174000"
DEPRECATED derived compatibility value. Order side is authoritative.
"LONG"
Leverage for margin orders
"5"
Whether the order is reduce-only
false
Associated margin position UUID
"123e4567-e89b-12d3-a456-426614174000"
Original order quantity in raw format (for precision)
"500000000"
Filled quantity in raw format (for precision)
"200000000"
Remaining unfilled quantity (normalized for display)
"0.3"
Remaining unfilled quantity in raw format (for precision)
"300000000"
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.
"quote-btc-1130-a"
Timestamp when the order was cancelled (ISO 8601)
"2023-11-13T10:35:00Z"
Timestamp when the order was fully filled (ISO 8601)
"2023-11-13T10:35:00Z"
Timestamp when the order expired (ISO 8601)
"2023-11-13T10:35:00Z"
Timestamp when the order was submitted (ISO 8601)
"2023-11-13T10:35:00Z"
Timestamp when the order was acknowledged (ISO 8601)
"2023-11-13T10:35:00Z"
Trigger price for stop/conditional orders
"34000.00"
Quote volume of the order
"17500.00"
Application UUID that created the order
Parent order UUID for linked orders
Batch UUID for batch orders
Stable terminal cause for a cancelled order: USER_REQUESTED, REPLACED, LIQUIDATION, INSUFFICIENT_MARGIN, REDUCE_ONLY_EXHAUSTED, POSITION_CLOSED, OCO_SIBLING_TRIGGERED, or SYSTEM
"REDUCE_ONLY_EXHAUSTED"
Whether the order was placed post-only (maker-only). Absent for orders placed before the flag was persisted.
false
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.
Show child attributes
Show child attributes
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.
Show child attributes
Show child attributes
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.
918342
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.
CANCEL_MAKER, CANCEL_TAKER, CANCEL_BOTH, SKIP "CANCEL_TAKER"
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.
"019aefab-f665-854c-99dc-ced6db9014aa"
Was this page helpful?

