private/rfq_get_best_quote
Taker-side dry run that evaluates a prospective RFQ (its legs and intended direction) without creating anything. Returns the best available maker quote if one exists. It returns no quote when the best quote breaks the RFQ’s max_total_cost or min_total_cost. The response also includes the expected fee, validity, projected liquidation prices, and realized-PnL estimate for taking it.
curl --request POST \
--url https://api.derive.xyz/v3/private/rfq_get_best_quote \
--header 'Content-Type: application/json' \
--header 'X-DeriveSignature: <api-key>' \
--header 'X-DeriveTimestamp: <api-key>' \
--header 'X-DeriveWallet: <api-key>' \
--data '
{
"subaccount_id": 1,
"client": "",
"direction": "buy",
"extra_fee": "0",
"legs": [],
"rfq_id": null
}
'import requests
url = "https://api.derive.xyz/v3/private/rfq_get_best_quote"
payload = {
"subaccount_id": 1,
"client": "",
"direction": "buy",
"extra_fee": "0",
"legs": [],
"rfq_id": None
}
headers = {
"X-DeriveWallet": "<api-key>",
"X-DeriveTimestamp": "<api-key>",
"X-DeriveSignature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-DeriveWallet': '<api-key>',
'X-DeriveTimestamp': '<api-key>',
'X-DeriveSignature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
subaccount_id: 1,
client: '',
direction: 'buy',
extra_fee: '0',
legs: [],
rfq_id: null
})
};
fetch('https://api.derive.xyz/v3/private/rfq_get_best_quote', 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://api.derive.xyz/v3/private/rfq_get_best_quote",
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([
'subaccount_id' => 1,
'client' => '',
'direction' => 'buy',
'extra_fee' => '0',
'legs' => [
],
'rfq_id' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-DeriveSignature: <api-key>",
"X-DeriveTimestamp: <api-key>",
"X-DeriveWallet: <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://api.derive.xyz/v3/private/rfq_get_best_quote"
payload := strings.NewReader("{\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"direction\": \"buy\",\n \"extra_fee\": \"0\",\n \"legs\": [],\n \"rfq_id\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-DeriveWallet", "<api-key>")
req.Header.Add("X-DeriveTimestamp", "<api-key>")
req.Header.Add("X-DeriveSignature", "<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://api.derive.xyz/v3/private/rfq_get_best_quote")
.header("X-DeriveWallet", "<api-key>")
.header("X-DeriveTimestamp", "<api-key>")
.header("X-DeriveSignature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"direction\": \"buy\",\n \"extra_fee\": \"0\",\n \"legs\": [],\n \"rfq_id\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.derive.xyz/v3/private/rfq_get_best_quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-DeriveWallet"] = '<api-key>'
request["X-DeriveTimestamp"] = '<api-key>'
request["X-DeriveSignature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"direction\": \"buy\",\n \"extra_fee\": \"0\",\n \"legs\": [],\n \"rfq_id\": null\n}"
response = http.request(request)
puts response.read_body{
"direction": "buy",
"down_liquidation_price": "<string>",
"estimated_fee": "<string>",
"estimated_realized_pnl": "<string>",
"estimated_realized_pnl_excl_fees": "<string>",
"estimated_total_cost": "<string>",
"filled_pct": "<string>",
"is_valid": true,
"orderbook_total_cost": "<string>",
"post_initial_margin": "<string>",
"post_liquidation_price": "<string>",
"pre_initial_margin": "<string>",
"suggested_max_fee": "<string>",
"up_liquidation_price": "<string>",
"best_quote": {
"cancel_reason": "",
"creation_timestamp": 123,
"direction": "buy",
"fill_pct": "<string>",
"last_update_timestamp": 123,
"legs": [
{
"amount": "<string>",
"direction": "buy",
"instrument_name": "<string>",
"price": "<string>"
}
],
"legs_hash": "<string>",
"liquidity_role": "maker",
"quote_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "open",
"subaccount_id": 123,
"wallet": "<string>"
},
"invalid_reason": "<string>"
}{
"error": {
"code": 123,
"message": "<string>",
"data": "<string>"
}
}Authorizations
The wallet the request acts for.
The current time in milliseconds, as a decimal string.
EIP-191 signature of the timestamp, by the wallet or one of its session keys.
Body
x >= 0buy, sell Non-negative decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Show child attributes
Show child attributes
RFQ ID to get best quote for.
If not provided, will return estimates based on mark prices.
Response
Success
buy, sell Optional decimal string of the human value (e.g. "1.5"), up to 12 fractional digits, or null; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Non-negative decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Optional decimal string of the human value (e.g. "1.5"), up to 12 fractional digits, or null; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Optional decimal string of the human value (e.g. "1.5"), up to 12 fractional digits, or null; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Optional decimal string of the human value (e.g. "1.5"), up to 12 fractional digits, or null; a string or JSON number is accepted
Show child attributes
Show child attributes
curl --request POST \
--url https://api.derive.xyz/v3/private/rfq_get_best_quote \
--header 'Content-Type: application/json' \
--header 'X-DeriveSignature: <api-key>' \
--header 'X-DeriveTimestamp: <api-key>' \
--header 'X-DeriveWallet: <api-key>' \
--data '
{
"subaccount_id": 1,
"client": "",
"direction": "buy",
"extra_fee": "0",
"legs": [],
"rfq_id": null
}
'import requests
url = "https://api.derive.xyz/v3/private/rfq_get_best_quote"
payload = {
"subaccount_id": 1,
"client": "",
"direction": "buy",
"extra_fee": "0",
"legs": [],
"rfq_id": None
}
headers = {
"X-DeriveWallet": "<api-key>",
"X-DeriveTimestamp": "<api-key>",
"X-DeriveSignature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-DeriveWallet': '<api-key>',
'X-DeriveTimestamp': '<api-key>',
'X-DeriveSignature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
subaccount_id: 1,
client: '',
direction: 'buy',
extra_fee: '0',
legs: [],
rfq_id: null
})
};
fetch('https://api.derive.xyz/v3/private/rfq_get_best_quote', 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://api.derive.xyz/v3/private/rfq_get_best_quote",
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([
'subaccount_id' => 1,
'client' => '',
'direction' => 'buy',
'extra_fee' => '0',
'legs' => [
],
'rfq_id' => null
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-DeriveSignature: <api-key>",
"X-DeriveTimestamp: <api-key>",
"X-DeriveWallet: <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://api.derive.xyz/v3/private/rfq_get_best_quote"
payload := strings.NewReader("{\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"direction\": \"buy\",\n \"extra_fee\": \"0\",\n \"legs\": [],\n \"rfq_id\": null\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-DeriveWallet", "<api-key>")
req.Header.Add("X-DeriveTimestamp", "<api-key>")
req.Header.Add("X-DeriveSignature", "<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://api.derive.xyz/v3/private/rfq_get_best_quote")
.header("X-DeriveWallet", "<api-key>")
.header("X-DeriveTimestamp", "<api-key>")
.header("X-DeriveSignature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"direction\": \"buy\",\n \"extra_fee\": \"0\",\n \"legs\": [],\n \"rfq_id\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.derive.xyz/v3/private/rfq_get_best_quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-DeriveWallet"] = '<api-key>'
request["X-DeriveTimestamp"] = '<api-key>'
request["X-DeriveSignature"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"direction\": \"buy\",\n \"extra_fee\": \"0\",\n \"legs\": [],\n \"rfq_id\": null\n}"
response = http.request(request)
puts response.read_body{
"direction": "buy",
"down_liquidation_price": "<string>",
"estimated_fee": "<string>",
"estimated_realized_pnl": "<string>",
"estimated_realized_pnl_excl_fees": "<string>",
"estimated_total_cost": "<string>",
"filled_pct": "<string>",
"is_valid": true,
"orderbook_total_cost": "<string>",
"post_initial_margin": "<string>",
"post_liquidation_price": "<string>",
"pre_initial_margin": "<string>",
"suggested_max_fee": "<string>",
"up_liquidation_price": "<string>",
"best_quote": {
"cancel_reason": "",
"creation_timestamp": 123,
"direction": "buy",
"fill_pct": "<string>",
"last_update_timestamp": 123,
"legs": [
{
"amount": "<string>",
"direction": "buy",
"instrument_name": "<string>",
"price": "<string>"
}
],
"legs_hash": "<string>",
"liquidity_role": "maker",
"quote_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "open",
"subaccount_id": 123,
"wallet": "<string>"
},
"invalid_reason": "<string>"
}{
"error": {
"code": 123,
"message": "<string>",
"data": "<string>"
}
}