curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"followId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": "25"
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin"
payload = {
"followId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": "25"
}
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({
followId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
tradingPairId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: '25'
})
};
fetch('https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin', 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/{followId}/position-margin",
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([
'followId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'tradingPairId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => '25'
]),
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/{followId}/position-margin"
payload := strings.NewReader("{\n \"followId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": \"25\"\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/{followId}/position-margin")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"followId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": \"25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin")
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 \"followId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": \"25\"\n}"
response = http.request(request)
puts response.read_body{
"followId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"riskBucketId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positionMargin": "125",
"copyAccountAvailable": "875"
}Add margin to a copy position
Add margin to a copy position (0XM-2971).
Moves collateral from the follow’s copy account into the margin of its
isolated copy position on one trading pair: the position’s margin rises
by exactly amount, the copy account’s remaining collateral falls by the
same, and your margin account is never touched. It lowers the position’s
leverage and moves its liquidation price away; it opens no exposure, so
it works while copy trading is switched off and on a CLOSE_ONLY follow.
There is no margin reduction: a follow exits by being stopped. Follow
writes need a master account session (not a delegated agent or a
sub-account). 404 unless the follow is yours; 409 while it is stopping
or once it is stopped, and when copy trading is not available on the
platform at all (the platform then runs copy trading exits only). It
spends the per-user movement budget withdrawals and collateral transfers
share. It is not idempotent: a retry after a timeout whose first attempt
landed adds the amount twice, so read the follow before retrying.
curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"followId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": "25"
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin"
payload = {
"followId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": "25"
}
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({
followId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
tradingPairId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
amount: '25'
})
};
fetch('https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin', 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/{followId}/position-margin",
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([
'followId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'tradingPairId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => '25'
]),
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/{followId}/position-margin"
payload := strings.NewReader("{\n \"followId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": \"25\"\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/{followId}/position-margin")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"followId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": \"25\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/copy-trading/follows/{followId}/position-margin")
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 \"followId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": \"25\"\n}"
response = http.request(request)
puts response.read_body{
"followId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"riskBucketId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positionMargin": "125",
"copyAccountAvailable": "875"
}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
Body
Response
OK
The follow's id
Trading pair UUID of the copy position
The copy position's isolated risk bucket
The copy position's id
The copy position's margin after the add, in quote units
"125"
What the copy account can still put into this position, in quote units, after the add
"875"
Was this page helpful?

