curl --request GET \
--url https://test.deribit.com/api/v2/private/get_margins \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 7,
"method": "private/get_margins",
"params": {
"instrument_name": "BTC-PERPETUAL",
"amount": 10000,
"price": 3725
}
}
'import requests
url = "https://test.deribit.com/api/v2/private/get_margins"
payload = {
"jsonrpc": "2.0",
"id": 7,
"method": "private/get_margins",
"params": {
"instrument_name": "BTC-PERPETUAL",
"amount": 10000,
"price": 3725
}
}
headers = {"Content-Type": "application/json"}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: 7,
method: 'private/get_margins',
params: {instrument_name: 'BTC-PERPETUAL', amount: 10000, price: 3725}
})
};
fetch('https://test.deribit.com/api/v2/private/get_margins', 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://test.deribit.com/api/v2/private/get_margins",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => 7,
'method' => 'private/get_margins',
'params' => [
'instrument_name' => 'BTC-PERPETUAL',
'amount' => 10000,
'price' => 3725
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://test.deribit.com/api/v2/private/get_margins"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 7,\n \"method\": \"private/get_margins\",\n \"params\": {\n \"instrument_name\": \"BTC-PERPETUAL\",\n \"amount\": 10000,\n \"price\": 3725\n }\n}")
req, _ := http.NewRequest("GET", url, payload)
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.get("https://test.deribit.com/api/v2/private/get_margins")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 7,\n \"method\": \"private/get_margins\",\n \"params\": {\n \"instrument_name\": \"BTC-PERPETUAL\",\n \"amount\": 10000,\n \"price\": 3725\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/private/get_margins")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": 7,\n \"method\": \"private/get_margins\",\n \"params\": {\n \"instrument_name\": \"BTC-PERPETUAL\",\n \"amount\": 10000,\n \"price\": 3725\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 7,
"result": {
"sell": 0,
"min_price": 3684.8,
"max_price": 3759.24,
"buy": 0.0219949,
"buy_taker_fee": 0.000085,
"buy_maker_fee": 0.000017,
"sell_taker_fee": 0.000085,
"sell_maker_fee": 0.000017
}
}private/get_margins
Calculates margin requirements for a hypothetical order on a given instrument. Returns initial margin and maintenance margin for the specified instrument, quantity, and price.
This method is useful for estimating margin requirements before placing an order, helping to ensure sufficient funds are available and understanding the margin impact of potential trades.
For spot instruments, amount_type selects whether amount is a base currency quantity (fees charged on top) or a total quote currency spend (fees included).
๐ Related Article: Using the currency Parameter
Scope: trade:read
curl --request GET \
--url https://test.deribit.com/api/v2/private/get_margins \
--header 'Content-Type: application/json' \
--data '
{
"jsonrpc": "2.0",
"id": 7,
"method": "private/get_margins",
"params": {
"instrument_name": "BTC-PERPETUAL",
"amount": 10000,
"price": 3725
}
}
'import requests
url = "https://test.deribit.com/api/v2/private/get_margins"
payload = {
"jsonrpc": "2.0",
"id": 7,
"method": "private/get_margins",
"params": {
"instrument_name": "BTC-PERPETUAL",
"amount": 10000,
"price": 3725
}
}
headers = {"Content-Type": "application/json"}
response = requests.get(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
jsonrpc: '2.0',
id: 7,
method: 'private/get_margins',
params: {instrument_name: 'BTC-PERPETUAL', amount: 10000, price: 3725}
})
};
fetch('https://test.deribit.com/api/v2/private/get_margins', 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://test.deribit.com/api/v2/private/get_margins",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_POSTFIELDS => json_encode([
'jsonrpc' => '2.0',
'id' => 7,
'method' => 'private/get_margins',
'params' => [
'instrument_name' => 'BTC-PERPETUAL',
'amount' => 10000,
'price' => 3725
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$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://test.deribit.com/api/v2/private/get_margins"
payload := strings.NewReader("{\n \"jsonrpc\": \"2.0\",\n \"id\": 7,\n \"method\": \"private/get_margins\",\n \"params\": {\n \"instrument_name\": \"BTC-PERPETUAL\",\n \"amount\": 10000,\n \"price\": 3725\n }\n}")
req, _ := http.NewRequest("GET", url, payload)
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.get("https://test.deribit.com/api/v2/private/get_margins")
.header("Content-Type", "application/json")
.body("{\n \"jsonrpc\": \"2.0\",\n \"id\": 7,\n \"method\": \"private/get_margins\",\n \"params\": {\n \"instrument_name\": \"BTC-PERPETUAL\",\n \"amount\": 10000,\n \"price\": 3725\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://test.deribit.com/api/v2/private/get_margins")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"jsonrpc\": \"2.0\",\n \"id\": 7,\n \"method\": \"private/get_margins\",\n \"params\": {\n \"instrument_name\": \"BTC-PERPETUAL\",\n \"amount\": 10000,\n \"price\": 3725\n }\n}"
response = http.request(request)
puts response.read_body{
"jsonrpc": "2.0",
"id": 7,
"result": {
"sell": 0,
"min_price": 3684.8,
"max_price": 3759.24,
"buy": 0.0219949,
"buy_taker_fee": 0.000085,
"buy_maker_fee": 0.000017,
"sell_taker_fee": 0.000085,
"sell_maker_fee": 0.000017
}
}Query Parameters
Instrument name Unique instrument identifier
"BTC-PERPETUAL"
It represents the requested order size. For perpetual and inverse futures the amount is in USD units. For options and linear futures it is the underlying base currency coin. For spot instruments the unit is controlled by amount_type.
How the amount parameter is interpreted. Spot instruments only.
base (the default) reads amount as a quantity of the base currency, with fees charged on top of it. quote reads amount as a total spend in the quote currency, with fees included in it. For every spot order the matching base amounts are returned in taker_base_amount and maker_base_amount.
Because the taker and maker fee rates differ, a fee-inclusive spend buys a slightly different quantity in each role. Both quantities are floored to a whole multiple of the instrument's min_trade_amount, so the cost plus the fee never exceeds the requested spend. Where the fee rate is negative (a maker rebate) the cost alone exceeds the spend and the rebate brings the total back within it.
In quote mode the buy field reports the taker notional. The maker notional differs, and the fee-inclusive maker total is in maker_margin_required.
On the sell side the spend is the gross proceeds: the base amount sold is worth exactly that, and the fee is deducted from what is received. The sell quantity does not depend on the fee role, so it is the same in taker_base_amount and maker_base_amount.
base, quote Price
3725
Response
Success response
The JSON-RPC version (2.0)
2.0 Hide child attributes
Hide child attributes
Margin when buying. For spot instruments with amount_type set to quote this is the taker notional; the fee-inclusive maker total is in maker_margin_required.
0.01681367
Margin when selling
0.01680479
Estimated fee when buying as a taker
0.000017
Estimated fee when buying as a maker
0.000017
Estimated fee when selling as a taker
0.000017
Estimated fee when selling as a maker
0.000017
The minimum price for the future. Any sell orders you submit lower than this price will be clamped to this minimum.
The maximum price for the future. Any buy orders you submit higher than this price, will be clamped to this maximum.
Base currency amount a taker order would trade. Spot only. When amount_type is base this equals the requested amount on both sides. When amount_type is quote the buy side is derived so cost plus the taker fee comes to the spend.
Base currency amount a maker order would trade. Spot only. Equals taker_base_amount when amount_type is base. When amount_type is quote the buy side differs because the maker fee rate differs; the sell side is always identical.
The id that was sent in the request
Was this page helpful?