curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/orders/conditional/{conditionalOrderId} \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/orders/conditional/{conditionalOrderId}"
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/conditional/{conditionalOrderId}', 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/conditional/{conditionalOrderId}",
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/conditional/{conditionalOrderId}"
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/conditional/{conditionalOrderId}")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/orders/conditional/{conditionalOrderId}")
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{
"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>"
}Get apiv1ordersconditional
Get a single conditional (TP/SL) order by its UUID.
curl --request GET \
--url https://staging.apimonaco.xyz/api/v1/orders/conditional/{conditionalOrderId} \
--header 'X-Monaco-Signature: <api-key>'import requests
url = "https://staging.apimonaco.xyz/api/v1/orders/conditional/{conditionalOrderId}"
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/conditional/{conditionalOrderId}', 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/conditional/{conditionalOrderId}",
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/conditional/{conditionalOrderId}"
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/conditional/{conditionalOrderId}")
.header("X-Monaco-Signature", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/orders/conditional/{conditionalOrderId}")
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{
"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>"
}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
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.
918342
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.
Show child attributes
Show child attributes
TRAILING_STOP only: retracement in basis points behind the watermark.
TRAILING_STOP only: mark level that starts tracking. Absent when the stop armed immediately.
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.
TRAILING_STOP only: when tracking began. Absent while the stop is still waiting for activationPrice (state stays ACTIVE in both phases).
Was this page helpful?

