curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"marginAccountId": "<string>",
"asset": "<string>",
"amount": "<string>",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"strategyKey": "<string>"
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in"
payload = {
"marginAccountId": "<string>",
"asset": "<string>",
"amount": "<string>",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"strategyKey": "<string>"
}
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({
marginAccountId: '<string>',
asset: '<string>',
amount: '<string>',
tradingPairId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
strategyKey: '<string>'
})
};
fetch('https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in', 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/margin/accounts/{marginAccountId}/collateral/transfer-in",
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([
'marginAccountId' => '<string>',
'asset' => '<string>',
'amount' => '<string>',
'tradingPairId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'strategyKey' => '<string>'
]),
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/margin/accounts/{marginAccountId}/collateral/transfer-in"
payload := strings.NewReader("{\n \"marginAccountId\": \"<string>\",\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"strategyKey\": \"<string>\"\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/margin/accounts/{marginAccountId}/collateral/transfer-in")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"marginAccountId\": \"<string>\",\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"strategyKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in")
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 \"marginAccountId\": \"<string>\",\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"strategyKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"movementId": "<string>",
"marginAccountId": "<string>",
"asset": "<string>",
"amount": "<string>",
"status": "<string>",
"newEquity": "<string>",
"newTotalCollateralValue": "<string>",
"newWithdrawableCollateral": "<string>",
"strategyKey": "<string>",
"riskBucketId": "<string>",
"marginMode": "<string>",
"selectedTradingPairIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"positionMarginCredited": true
}Post apiv1marginaccounts collateraltransfer in
DEPRECATED (0XM-2632): this endpoint overloads two unrelated operations —
with trading_pair_id it allocates into that pair’s isolated risk bucket
(crediting the sole open position’s stored margin), without it it performs
a wallet-debiting deposit to the parent margin account. Use
TransferCollateralToRiskBucket for bucket funding (which now applies the
same position-margin credit) and TransferCollateralToParentMarginAccount
for wallet-to-margin deposits. Kept for backward compatibility; no removal
date scheduled.
curl --request POST \
--url https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in \
--header 'Content-Type: application/json' \
--header 'X-Monaco-Signature: <api-key>' \
--data '
{
"marginAccountId": "<string>",
"asset": "<string>",
"amount": "<string>",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"strategyKey": "<string>"
}
'import requests
url = "https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in"
payload = {
"marginAccountId": "<string>",
"asset": "<string>",
"amount": "<string>",
"tradingPairId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"strategyKey": "<string>"
}
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({
marginAccountId: '<string>',
asset: '<string>',
amount: '<string>',
tradingPairId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
strategyKey: '<string>'
})
};
fetch('https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in', 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/margin/accounts/{marginAccountId}/collateral/transfer-in",
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([
'marginAccountId' => '<string>',
'asset' => '<string>',
'amount' => '<string>',
'tradingPairId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'strategyKey' => '<string>'
]),
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/margin/accounts/{marginAccountId}/collateral/transfer-in"
payload := strings.NewReader("{\n \"marginAccountId\": \"<string>\",\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"strategyKey\": \"<string>\"\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/margin/accounts/{marginAccountId}/collateral/transfer-in")
.header("X-Monaco-Signature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"marginAccountId\": \"<string>\",\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"strategyKey\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.apimonaco.xyz/api/v1/margin/accounts/{marginAccountId}/collateral/transfer-in")
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 \"marginAccountId\": \"<string>\",\n \"asset\": \"<string>\",\n \"amount\": \"<string>\",\n \"tradingPairId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"strategyKey\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"movementId": "<string>",
"marginAccountId": "<string>",
"asset": "<string>",
"amount": "<string>",
"status": "<string>",
"newEquity": "<string>",
"newTotalCollateralValue": "<string>",
"newWithdrawableCollateral": "<string>",
"strategyKey": "<string>",
"riskBucketId": "<string>",
"marginMode": "<string>",
"selectedTradingPairIds": [
"3c90c3cc-0d44-4b50-8888-8dd25736052a"
],
"positionMarginCredited": 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.
Path Parameters
Parent margin account UUID that receives collateral.
Body
Parent margin account UUID that receives collateral.
Optional trading pair UUID used to allocate collateral to an isolated risk bucket under the parent margin account. If omitted, the transfer applies to the parent margin account only.
Optional strategy key echoed in responses when callers scope a risk bucket.
Response
OK
The largest amount a further transfer-out will accept after this one.
See MarginAccountSummary.withdrawable_collateral: this is an
allocation-bounded figure, not clamped equity headroom.
Present when collateral was allocated to a risk bucket.
Present when collateral was allocated to a risk bucket. Values: ISOLATED, CROSS.
The cross bucket's recorded pair scope: what trading has recorded (a pair joins when a cross order on it fills and leaves when its positions close), plus any pair declared before scope became derived, until it trades and its positions close. Only on cross risk-bucket transfers, and omitted while empty — i.e. until a cross order on the bucket has filled.
1Whether the transfer was committed to a position's stored margin. Present only when a position-margin credit was in play: true — the credit landed; false — a credit was requested (or defaulted) but degraded to a plain allocation because the bucket's persisted position row was stale (close/reopen race) — re-issue the Adjust Margin once the new position row lands if the commitment still matters. Absent on plain allocations, parent deposits, and releases.
Was this page helpful?

