curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"leader": "alpha_trader",
"marginModePolicy": "FOLLOW",
"sizingMode": "PROPORTIONAL",
"sizingParam": "<string>",
"leverageMode": "FOLLOW",
"fixedLeverage": "<string>",
"allocation": "1000",
"markets": {
"tradingPairIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview"
payload = {
"leader": "alpha_trader",
"marginModePolicy": "FOLLOW",
"sizingMode": "PROPORTIONAL",
"sizingParam": "<string>",
"leverageMode": "FOLLOW",
"fixedLeverage": "<string>",
"allocation": "1000",
"markets": { "tradingPairIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"] }
}
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({
leader: 'alpha_trader',
marginModePolicy: 'FOLLOW',
sizingMode: 'PROPORTIONAL',
sizingParam: '<string>',
leverageMode: 'FOLLOW',
fixedLeverage: '<string>',
allocation: '1000',
markets: {tradingPairIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']}
})
};
fetch('https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview', 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/copy-trading/follows/preview",
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([
'leader' => 'alpha_trader',
'marginModePolicy' => 'FOLLOW',
'sizingMode' => 'PROPORTIONAL',
'sizingParam' => '<string>',
'leverageMode' => 'FOLLOW',
'fixedLeverage' => '<string>',
'allocation' => '1000',
'markets' => [
'tradingPairIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]),
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/copy-trading/follows/preview"
payload := strings.NewReader("{\n \"leader\": \"alpha_trader\",\n \"marginModePolicy\": \"FOLLOW\",\n \"sizingMode\": \"PROPORTIONAL\",\n \"sizingParam\": \"<string>\",\n \"leverageMode\": \"FOLLOW\",\n \"fixedLeverage\": \"<string>\",\n \"allocation\": \"1000\",\n \"markets\": {\n \"tradingPairIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/copy-trading/follows/preview")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"leader\": \"alpha_trader\",\n \"marginModePolicy\": \"FOLLOW\",\n \"sizingMode\": \"PROPORTIONAL\",\n \"sizingParam\": \"<string>\",\n \"leverageMode\": \"FOLLOW\",\n \"fixedLeverage\": \"<string>\",\n \"allocation\": \"1000\",\n \"markets\": {\n \"tradingPairIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview")
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 \"leader\": \"alpha_trader\",\n \"marginModePolicy\": \"FOLLOW\",\n \"sizingMode\": \"PROPORTIONAL\",\n \"sizingParam\": \"<string>\",\n \"leverageMode\": \"FOLLOW\",\n \"fixedLeverage\": \"<string>\",\n \"allocation\": \"1000\",\n \"markets\": {\n \"tradingPairIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"estimatedMargin": "125.40",
"estimatedFee": "0.35",
"copiedPositions": 2,
"skippedPositions": 1,
"truncated": true
}Preview copying a lead trader's open positions
Preview copying a leader’s open positions.
What a follow with these terms would open if it set copyExisting, as
totals only: the estimated margin and fees, and how many of the leader’s
positions would and would not be copied. It names no pair, side or
reason. Read-only; nothing is placed or reserved. The same session rules
and follow terms rules as following apply, it is refused while copy
trading is off, and it spends the order-risk preview budget. At most 64
positions are sized; truncated says when more matched.
curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"leader": "alpha_trader",
"marginModePolicy": "FOLLOW",
"sizingMode": "PROPORTIONAL",
"sizingParam": "<string>",
"leverageMode": "FOLLOW",
"fixedLeverage": "<string>",
"allocation": "1000",
"markets": {
"tradingPairIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
]
}
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview"
payload = {
"leader": "alpha_trader",
"marginModePolicy": "FOLLOW",
"sizingMode": "PROPORTIONAL",
"sizingParam": "<string>",
"leverageMode": "FOLLOW",
"fixedLeverage": "<string>",
"allocation": "1000",
"markets": { "tradingPairIds": ["3c90c3cc-0d44-4b50-8888-8dd25736052a"] }
}
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({
leader: 'alpha_trader',
marginModePolicy: 'FOLLOW',
sizingMode: 'PROPORTIONAL',
sizingParam: '<string>',
leverageMode: 'FOLLOW',
fixedLeverage: '<string>',
allocation: '1000',
markets: {tradingPairIds: ['3c90c3cc-0d44-4b50-8888-8dd25736052a']}
})
};
fetch('https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview', 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/copy-trading/follows/preview",
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([
'leader' => 'alpha_trader',
'marginModePolicy' => 'FOLLOW',
'sizingMode' => 'PROPORTIONAL',
'sizingParam' => '<string>',
'leverageMode' => 'FOLLOW',
'fixedLeverage' => '<string>',
'allocation' => '1000',
'markets' => [
'tradingPairIds' => [
'3c90c3cc-0d44-4b50-8888-8dd25736052a'
]
]
]),
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/copy-trading/follows/preview"
payload := strings.NewReader("{\n \"leader\": \"alpha_trader\",\n \"marginModePolicy\": \"FOLLOW\",\n \"sizingMode\": \"PROPORTIONAL\",\n \"sizingParam\": \"<string>\",\n \"leverageMode\": \"FOLLOW\",\n \"fixedLeverage\": \"<string>\",\n \"allocation\": \"1000\",\n \"markets\": {\n \"tradingPairIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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/copy-trading/follows/preview")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"leader\": \"alpha_trader\",\n \"marginModePolicy\": \"FOLLOW\",\n \"sizingMode\": \"PROPORTIONAL\",\n \"sizingParam\": \"<string>\",\n \"leverageMode\": \"FOLLOW\",\n \"fixedLeverage\": \"<string>\",\n \"allocation\": \"1000\",\n \"markets\": {\n \"tradingPairIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/copy-trading/follows/preview")
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 \"leader\": \"alpha_trader\",\n \"marginModePolicy\": \"FOLLOW\",\n \"sizingMode\": \"PROPORTIONAL\",\n \"sizingParam\": \"<string>\",\n \"leverageMode\": \"FOLLOW\",\n \"fixedLeverage\": \"<string>\",\n \"allocation\": \"1000\",\n \"markets\": {\n \"tradingPairIds\": [\n \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n ]\n }\n}"
response = http.request(request)
puts response.read_body{
"estimatedMargin": "125.40",
"estimatedFee": "0.35",
"copiedPositions": 2,
"skippedPositions": 1,
"truncated": true
}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.
Body
The leader's custom TraderCode handle
"alpha_trader"
FOLLOW (default), CROSS or ISOLATED
"FOLLOW"
PROPORTIONAL (default) or FIXED_MARGIN
"PROPORTIONAL"
Margin per leader order in quote units; required for FIXED_MARGIN, omitted otherwise
FOLLOW (default) or FIXED
"FOLLOW"
Leverage for every copy; required for FIXED, omitted otherwise
Collateral the copy account would start with, in quote units
"1000"
Markets to copy; omit to copy every market the leader trades.
Show child attributes
Show child attributes
Response
OK
What following with copyExisting would open, as totals only. The caller
of a preview is never a follower of the leader (copyExisting applies only
on a create), so the response names no pair, side, size, mark or skip
reason, and a leader whose positions cannot be copied at all gives
copiedPositions = 0 with no reason. The totals are rounded UP to cents
(the settlement currency's display precision). A residual aggregate signal
remains: the counts and the rounded totals across varied allocations
bound the size of the leader's book, never its markets or direction.
Estimated collateral the copied positions would reserve at placement, in quote units, rounded up to cents
"125.40"
Estimated taker fees of the copies, in quote units, rounded up to cents
"0.35"
The leader's positions (in the copied markets) that would be copied
2
The leader's positions (in the copied markets) that would not be copied
1
True when the leader holds more positions in the copied markets than one preview sizes (64); the totals and counts cover the first ones only
Was this page helpful?

