Batch create orders
curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/orders/batch-create \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"orders": [
{
"tradingPairId": "456e7890-e12b-12d3-a456-426614174000",
"orderType": "LIMIT",
"side": "BUY",
"quantity": "0.5",
"price": "35000.00",
"tradingMode": "SPOT",
"slippageToleranceBps": 50,
"useMasterBalance": false,
"expirationDate": "2026-06-01T00:00:00Z",
"timeInForce": "GTC",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"riskBucketId": "123e4567-e89b-12d3-a456-426614174001",
"riskBucketCollateral": "1000",
"positionSide": "LONG",
"leverage": "5",
"reduceOnly": false,
"strategyKey": "my-strategy",
"marginMode": "CROSS",
"postOnly": false,
"clientOrderId": "quote-btc-1130-a",
"idempotencyKey": "<string>",
"selfTradePreventionMode": "CANCEL_TAKER"
}
]
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/orders/batch-create"
payload = { "orders": [
{
"tradingPairId": "456e7890-e12b-12d3-a456-426614174000",
"orderType": "LIMIT",
"side": "BUY",
"quantity": "0.5",
"price": "35000.00",
"tradingMode": "SPOT",
"slippageToleranceBps": 50,
"useMasterBalance": False,
"expirationDate": "2026-06-01T00:00:00Z",
"timeInForce": "GTC",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"riskBucketId": "123e4567-e89b-12d3-a456-426614174001",
"riskBucketCollateral": "1000",
"positionSide": "LONG",
"leverage": "5",
"reduceOnly": False,
"strategyKey": "my-strategy",
"marginMode": "CROSS",
"postOnly": False,
"clientOrderId": "quote-btc-1130-a",
"idempotencyKey": "<string>",
"selfTradePreventionMode": "CANCEL_TAKER"
}
] }
headers = {
"X-Monaco-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Monaco-Signature': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
orders: [
{
tradingPairId: '456e7890-e12b-12d3-a456-426614174000',
orderType: 'LIMIT',
side: 'BUY',
quantity: '0.5',
price: '35000.00',
tradingMode: 'SPOT',
slippageToleranceBps: 50,
useMasterBalance: false,
expirationDate: '2026-06-01T00:00:00Z',
timeInForce: 'GTC',
marginAccountId: '123e4567-e89b-12d3-a456-426614174000',
riskBucketId: '123e4567-e89b-12d3-a456-426614174001',
riskBucketCollateral: '1000',
positionSide: 'LONG',
leverage: '5',
reduceOnly: false,
strategyKey: 'my-strategy',
marginMode: 'CROSS',
postOnly: false,
clientOrderId: 'quote-btc-1130-a',
idempotencyKey: '<string>',
selfTradePreventionMode: 'CANCEL_TAKER'
}
]
})
};
fetch('https://staging.apimonaco.xyz/api/v1/orders/batch-create', 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/batch-create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'orders' => [
[
'tradingPairId' => '456e7890-e12b-12d3-a456-426614174000',
'orderType' => 'LIMIT',
'side' => 'BUY',
'quantity' => '0.5',
'price' => '35000.00',
'tradingMode' => 'SPOT',
'slippageToleranceBps' => 50,
'useMasterBalance' => false,
'expirationDate' => '2026-06-01T00:00:00Z',
'timeInForce' => 'GTC',
'marginAccountId' => '123e4567-e89b-12d3-a456-426614174000',
'riskBucketId' => '123e4567-e89b-12d3-a456-426614174001',
'riskBucketCollateral' => '1000',
'positionSide' => 'LONG',
'leverage' => '5',
'reduceOnly' => false,
'strategyKey' => 'my-strategy',
'marginMode' => 'CROSS',
'postOnly' => false,
'clientOrderId' => 'quote-btc-1130-a',
'idempotencyKey' => '<string>',
'selfTradePreventionMode' => 'CANCEL_TAKER'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.apimonaco.xyz/api/v1/orders/batch-create"
payload := strings.NewReader("{\n \"orders\": [\n {\n \"tradingPairId\": \"456e7890-e12b-12d3-a456-426614174000\",\n \"orderType\": \"LIMIT\",\n \"side\": \"BUY\",\n \"quantity\": \"0.5\",\n \"price\": \"35000.00\",\n \"tradingMode\": \"SPOT\",\n \"slippageToleranceBps\": 50,\n \"useMasterBalance\": false,\n \"expirationDate\": \"2026-06-01T00:00:00Z\",\n \"timeInForce\": \"GTC\",\n \"marginAccountId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"riskBucketId\": \"123e4567-e89b-12d3-a456-426614174001\",\n \"riskBucketCollateral\": \"1000\",\n \"positionSide\": \"LONG\",\n \"leverage\": \"5\",\n \"reduceOnly\": false,\n \"strategyKey\": \"my-strategy\",\n \"marginMode\": \"CROSS\",\n \"postOnly\": false,\n \"clientOrderId\": \"quote-btc-1130-a\",\n \"idempotencyKey\": \"<string>\",\n \"selfTradePreventionMode\": \"CANCEL_TAKER\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Monaco-Signature", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.apimonaco.xyz/api/v1/orders/batch-create")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"orders\": [\n {\n \"tradingPairId\": \"456e7890-e12b-12d3-a456-426614174000\",\n \"orderType\": \"LIMIT\",\n \"side\": \"BUY\",\n \"quantity\": \"0.5\",\n \"price\": \"35000.00\",\n \"tradingMode\": \"SPOT\",\n \"slippageToleranceBps\": 50,\n \"useMasterBalance\": false,\n \"expirationDate\": \"2026-06-01T00:00:00Z\",\n \"timeInForce\": \"GTC\",\n \"marginAccountId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"riskBucketId\": \"123e4567-e89b-12d3-a456-426614174001\",\n \"riskBucketCollateral\": \"1000\",\n \"positionSide\": \"LONG\",\n \"leverage\": \"5\",\n \"reduceOnly\": false,\n \"strategyKey\": \"my-strategy\",\n \"marginMode\": \"CROSS\",\n \"postOnly\": false,\n \"clientOrderId\": \"quote-btc-1130-a\",\n \"idempotencyKey\": \"<string>\",\n \"selfTradePreventionMode\": \"CANCEL_TAKER\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/orders/batch-create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Monaco-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"orders\": [\n {\n \"tradingPairId\": \"456e7890-e12b-12d3-a456-426614174000\",\n \"orderType\": \"LIMIT\",\n \"side\": \"BUY\",\n \"quantity\": \"0.5\",\n \"price\": \"35000.00\",\n \"tradingMode\": \"SPOT\",\n \"slippageToleranceBps\": 50,\n \"useMasterBalance\": false,\n \"expirationDate\": \"2026-06-01T00:00:00Z\",\n \"timeInForce\": \"GTC\",\n \"marginAccountId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"riskBucketId\": \"123e4567-e89b-12d3-a456-426614174001\",\n \"riskBucketCollateral\": \"1000\",\n \"positionSide\": \"LONG\",\n \"leverage\": \"5\",\n \"reduceOnly\": false,\n \"strategyKey\": \"my-strategy\",\n \"marginMode\": \"CROSS\",\n \"postOnly\": false,\n \"clientOrderId\": \"quote-btc-1130-a\",\n \"idempotencyKey\": \"<string>\",\n \"selfTradePreventionMode\": \"CANCEL_TAKER\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"totalRequested": 5,
"totalSucceeded": 4,
"totalFailed": 1,
"results": [
{
"orderId": "123e4567-e89b-12d3-a456-426614174000",
"matchResult": {
"tradesCount": 2,
"totalFilled": "0.2",
"remainingQuantity": "0.3",
"averageFillPrice": "35100.00",
"status": "PARTIALLY_FILLED",
"actualSlippageBps": 15,
"maxSlippageBps": 50,
"executionPriceRange": {
"bestPrice": "2045.00",
"worstPrice": "2052.00"
}
},
"error": {
"code": "INSUFFICIENT_BALANCE",
"message": "Insufficient balance to place order"
}
}
]
}Orders
Batch create orders
Batch create orders.
Create multiple orders in a single batch. Each order is processed sequentially through the matching engine.
POST
/
api
/
v1
/
orders
/
batch-create
Batch create orders
curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/orders/batch-create \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"orders": [
{
"tradingPairId": "456e7890-e12b-12d3-a456-426614174000",
"orderType": "LIMIT",
"side": "BUY",
"quantity": "0.5",
"price": "35000.00",
"tradingMode": "SPOT",
"slippageToleranceBps": 50,
"useMasterBalance": false,
"expirationDate": "2026-06-01T00:00:00Z",
"timeInForce": "GTC",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"riskBucketId": "123e4567-e89b-12d3-a456-426614174001",
"riskBucketCollateral": "1000",
"positionSide": "LONG",
"leverage": "5",
"reduceOnly": false,
"strategyKey": "my-strategy",
"marginMode": "CROSS",
"postOnly": false,
"clientOrderId": "quote-btc-1130-a",
"idempotencyKey": "<string>",
"selfTradePreventionMode": "CANCEL_TAKER"
}
]
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/orders/batch-create"
payload = { "orders": [
{
"tradingPairId": "456e7890-e12b-12d3-a456-426614174000",
"orderType": "LIMIT",
"side": "BUY",
"quantity": "0.5",
"price": "35000.00",
"tradingMode": "SPOT",
"slippageToleranceBps": 50,
"useMasterBalance": False,
"expirationDate": "2026-06-01T00:00:00Z",
"timeInForce": "GTC",
"marginAccountId": "123e4567-e89b-12d3-a456-426614174000",
"riskBucketId": "123e4567-e89b-12d3-a456-426614174001",
"riskBucketCollateral": "1000",
"positionSide": "LONG",
"leverage": "5",
"reduceOnly": False,
"strategyKey": "my-strategy",
"marginMode": "CROSS",
"postOnly": False,
"clientOrderId": "quote-btc-1130-a",
"idempotencyKey": "<string>",
"selfTradePreventionMode": "CANCEL_TAKER"
}
] }
headers = {
"X-Monaco-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Monaco-Signature': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
orders: [
{
tradingPairId: '456e7890-e12b-12d3-a456-426614174000',
orderType: 'LIMIT',
side: 'BUY',
quantity: '0.5',
price: '35000.00',
tradingMode: 'SPOT',
slippageToleranceBps: 50,
useMasterBalance: false,
expirationDate: '2026-06-01T00:00:00Z',
timeInForce: 'GTC',
marginAccountId: '123e4567-e89b-12d3-a456-426614174000',
riskBucketId: '123e4567-e89b-12d3-a456-426614174001',
riskBucketCollateral: '1000',
positionSide: 'LONG',
leverage: '5',
reduceOnly: false,
strategyKey: 'my-strategy',
marginMode: 'CROSS',
postOnly: false,
clientOrderId: 'quote-btc-1130-a',
idempotencyKey: '<string>',
selfTradePreventionMode: 'CANCEL_TAKER'
}
]
})
};
fetch('https://staging.apimonaco.xyz/api/v1/orders/batch-create', 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/batch-create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'orders' => [
[
'tradingPairId' => '456e7890-e12b-12d3-a456-426614174000',
'orderType' => 'LIMIT',
'side' => 'BUY',
'quantity' => '0.5',
'price' => '35000.00',
'tradingMode' => 'SPOT',
'slippageToleranceBps' => 50,
'useMasterBalance' => false,
'expirationDate' => '2026-06-01T00:00:00Z',
'timeInForce' => 'GTC',
'marginAccountId' => '123e4567-e89b-12d3-a456-426614174000',
'riskBucketId' => '123e4567-e89b-12d3-a456-426614174001',
'riskBucketCollateral' => '1000',
'positionSide' => 'LONG',
'leverage' => '5',
'reduceOnly' => false,
'strategyKey' => 'my-strategy',
'marginMode' => 'CROSS',
'postOnly' => false,
'clientOrderId' => 'quote-btc-1130-a',
'idempotencyKey' => '<string>',
'selfTradePreventionMode' => 'CANCEL_TAKER'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://staging.apimonaco.xyz/api/v1/orders/batch-create"
payload := strings.NewReader("{\n \"orders\": [\n {\n \"tradingPairId\": \"456e7890-e12b-12d3-a456-426614174000\",\n \"orderType\": \"LIMIT\",\n \"side\": \"BUY\",\n \"quantity\": \"0.5\",\n \"price\": \"35000.00\",\n \"tradingMode\": \"SPOT\",\n \"slippageToleranceBps\": 50,\n \"useMasterBalance\": false,\n \"expirationDate\": \"2026-06-01T00:00:00Z\",\n \"timeInForce\": \"GTC\",\n \"marginAccountId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"riskBucketId\": \"123e4567-e89b-12d3-a456-426614174001\",\n \"riskBucketCollateral\": \"1000\",\n \"positionSide\": \"LONG\",\n \"leverage\": \"5\",\n \"reduceOnly\": false,\n \"strategyKey\": \"my-strategy\",\n \"marginMode\": \"CROSS\",\n \"postOnly\": false,\n \"clientOrderId\": \"quote-btc-1130-a\",\n \"idempotencyKey\": \"<string>\",\n \"selfTradePreventionMode\": \"CANCEL_TAKER\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Monaco-Signature", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://staging.apimonaco.xyz/api/v1/orders/batch-create")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"orders\": [\n {\n \"tradingPairId\": \"456e7890-e12b-12d3-a456-426614174000\",\n \"orderType\": \"LIMIT\",\n \"side\": \"BUY\",\n \"quantity\": \"0.5\",\n \"price\": \"35000.00\",\n \"tradingMode\": \"SPOT\",\n \"slippageToleranceBps\": 50,\n \"useMasterBalance\": false,\n \"expirationDate\": \"2026-06-01T00:00:00Z\",\n \"timeInForce\": \"GTC\",\n \"marginAccountId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"riskBucketId\": \"123e4567-e89b-12d3-a456-426614174001\",\n \"riskBucketCollateral\": \"1000\",\n \"positionSide\": \"LONG\",\n \"leverage\": \"5\",\n \"reduceOnly\": false,\n \"strategyKey\": \"my-strategy\",\n \"marginMode\": \"CROSS\",\n \"postOnly\": false,\n \"clientOrderId\": \"quote-btc-1130-a\",\n \"idempotencyKey\": \"<string>\",\n \"selfTradePreventionMode\": \"CANCEL_TAKER\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/orders/batch-create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Monaco-Signature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"orders\": [\n {\n \"tradingPairId\": \"456e7890-e12b-12d3-a456-426614174000\",\n \"orderType\": \"LIMIT\",\n \"side\": \"BUY\",\n \"quantity\": \"0.5\",\n \"price\": \"35000.00\",\n \"tradingMode\": \"SPOT\",\n \"slippageToleranceBps\": 50,\n \"useMasterBalance\": false,\n \"expirationDate\": \"2026-06-01T00:00:00Z\",\n \"timeInForce\": \"GTC\",\n \"marginAccountId\": \"123e4567-e89b-12d3-a456-426614174000\",\n \"riskBucketId\": \"123e4567-e89b-12d3-a456-426614174001\",\n \"riskBucketCollateral\": \"1000\",\n \"positionSide\": \"LONG\",\n \"leverage\": \"5\",\n \"reduceOnly\": false,\n \"strategyKey\": \"my-strategy\",\n \"marginMode\": \"CROSS\",\n \"postOnly\": false,\n \"clientOrderId\": \"quote-btc-1130-a\",\n \"idempotencyKey\": \"<string>\",\n \"selfTradePreventionMode\": \"CANCEL_TAKER\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"totalRequested": 5,
"totalSucceeded": 4,
"totalFailed": 1,
"results": [
{
"orderId": "123e4567-e89b-12d3-a456-426614174000",
"matchResult": {
"tradesCount": 2,
"totalFilled": "0.2",
"remainingQuantity": "0.3",
"averageFillPrice": "35100.00",
"status": "PARTIALLY_FILLED",
"actualSlippageBps": 15,
"maxSlippageBps": 50,
"executionPriceRange": {
"bestPrice": "2045.00",
"worstPrice": "2052.00"
}
},
"error": {
"code": "INSUFFICIENT_BALANCE",
"message": "Insufficient balance to place order"
}
}
]
}Authorizations
monacoSignaturemonacoHttpSignature
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.
Body
application/json
Required array length:
1 - 100 elementsShow child attributes
Show child attributes
Was this page helpful?

