private/send_quote
Maker-side call that submits a priced, signed quote in response to an existing RFQ. You provide the priced legs, direction, max fee, an EIP-712 signature (signer, signature, nonce, expiry), and optional label or MMP flag. The quote’s signature is verified and validated against the referenced RFQ before it is stored. Returns the created quote. Requires trade scope for every instrument quoted.
curl --request POST \
--url https://api.derive.xyz/v3/private/send_quote \
--header 'Content-Type: application/json' \
--header 'X-DeriveSignature: <api-key>' \
--header 'X-DeriveTimestamp: <api-key>' \
--header 'X-DeriveWallet: <api-key>' \
--data '
{
"legs": [
{
"amount": "<string>",
"instrument_name": "<string>",
"price": "<string>"
}
],
"max_fee": "<string>",
"nonce": "<string>",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signature": "<string>",
"signature_expiry_sec": 123,
"signer": "<string>",
"subaccount_id": 1,
"client": "",
"extra_fee": "0",
"label": "",
"mmp": false,
"referral_code": ""
}
'import requests
url = "https://api.derive.xyz/v3/private/send_quote"
payload = {
"legs": [
{
"amount": "<string>",
"instrument_name": "<string>",
"price": "<string>"
}
],
"max_fee": "<string>",
"nonce": "<string>",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signature": "<string>",
"signature_expiry_sec": 123,
"signer": "<string>",
"subaccount_id": 1,
"client": "",
"extra_fee": "0",
"label": "",
"mmp": False,
"referral_code": ""
}
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({
legs: [{amount: '<string>', instrument_name: '<string>', price: '<string>'}],
max_fee: '<string>',
nonce: '<string>',
rfq_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
signature: '<string>',
signature_expiry_sec: 123,
signer: '<string>',
subaccount_id: 1,
client: '',
extra_fee: '0',
label: '',
mmp: false,
referral_code: ''
})
};
fetch('https://api.derive.xyz/v3/private/send_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/send_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([
'legs' => [
[
'amount' => '<string>',
'instrument_name' => '<string>',
'price' => '<string>'
]
],
'max_fee' => '<string>',
'nonce' => '<string>',
'rfq_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'signature' => '<string>',
'signature_expiry_sec' => 123,
'signer' => '<string>',
'subaccount_id' => 1,
'client' => '',
'extra_fee' => '0',
'label' => '',
'mmp' => false,
'referral_code' => ''
]),
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/send_quote"
payload := strings.NewReader("{\n \"legs\": [\n {\n \"amount\": \"<string>\",\n \"instrument_name\": \"<string>\",\n \"price\": \"<string>\"\n }\n ],\n \"max_fee\": \"<string>\",\n \"nonce\": \"<string>\",\n \"rfq_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signature\": \"<string>\",\n \"signature_expiry_sec\": 123,\n \"signer\": \"<string>\",\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"extra_fee\": \"0\",\n \"label\": \"\",\n \"mmp\": false,\n \"referral_code\": \"\"\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/send_quote")
.header("X-DeriveWallet", "<api-key>")
.header("X-DeriveTimestamp", "<api-key>")
.header("X-DeriveSignature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legs\": [\n {\n \"amount\": \"<string>\",\n \"instrument_name\": \"<string>\",\n \"price\": \"<string>\"\n }\n ],\n \"max_fee\": \"<string>\",\n \"nonce\": \"<string>\",\n \"rfq_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signature\": \"<string>\",\n \"signature_expiry_sec\": 123,\n \"signer\": \"<string>\",\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"extra_fee\": \"0\",\n \"label\": \"\",\n \"mmp\": false,\n \"referral_code\": \"\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.derive.xyz/v3/private/send_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 \"legs\": [\n {\n \"amount\": \"<string>\",\n \"instrument_name\": \"<string>\",\n \"price\": \"<string>\"\n }\n ],\n \"max_fee\": \"<string>\",\n \"nonce\": \"<string>\",\n \"rfq_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signature\": \"<string>\",\n \"signature_expiry_sec\": 123,\n \"signer\": \"<string>\",\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"extra_fee\": \"0\",\n \"label\": \"\",\n \"mmp\": false,\n \"referral_code\": \"\"\n}"
response = http.request(request)
puts response.read_body{
"cancel_reason": "",
"creation_timestamp": 123,
"direction": "buy",
"extra_fee": "<string>",
"fee": "<string>",
"fill_pct": "<string>",
"is_transfer": true,
"label": "<string>",
"last_update_timestamp": 123,
"legs": [
{
"amount": "<string>",
"direction": "buy",
"instrument_name": "<string>",
"price": "<string>"
}
],
"legs_hash": "<string>",
"liquidity_role": "maker",
"max_fee": "<string>",
"mmp": true,
"nonce": "<string>",
"quote_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signature_expiry_sec": 123,
"status": "open",
"subaccount_id": 123,
"batch_status": "Batching",
"tx_hash": "<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
buy, sell Show child attributes
Show child attributes
Non-negative decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
UUID v4 string
20-byte Ethereum address as a 0x-prefixed lowercase hex string.
42^0x[0-9a-fA-F]{40}$x >= 0Non-negative decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
Response
Success
, user_request, insufficient_margin, signed_max_fee_too_low, mmp_trigger, cancel_on_disconnect, session_key_deregistered, subaccount_withdrawn, rfq_no_longer_open, compliance, validation_failed buy, 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
Non-negative 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
Show child attributes
Show child attributes
maker, taker Non-negative decimal string of the human value (e.g. "1.5"), up to 12 fractional digits; a string or JSON number is accepted
UUID v4 string
UUID v4 string
open, filled, cancelled, expired Settlement batch status (only for executed quotes).
Batching, Executing, Da, Proving, Settling, Settled, BatchingError, ExecutingError, DaError, ProvingError, SettlingError, SettledError Blockchain transaction hash (only for executed quotes).
curl --request POST \
--url https://api.derive.xyz/v3/private/send_quote \
--header 'Content-Type: application/json' \
--header 'X-DeriveSignature: <api-key>' \
--header 'X-DeriveTimestamp: <api-key>' \
--header 'X-DeriveWallet: <api-key>' \
--data '
{
"legs": [
{
"amount": "<string>",
"instrument_name": "<string>",
"price": "<string>"
}
],
"max_fee": "<string>",
"nonce": "<string>",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signature": "<string>",
"signature_expiry_sec": 123,
"signer": "<string>",
"subaccount_id": 1,
"client": "",
"extra_fee": "0",
"label": "",
"mmp": false,
"referral_code": ""
}
'import requests
url = "https://api.derive.xyz/v3/private/send_quote"
payload = {
"legs": [
{
"amount": "<string>",
"instrument_name": "<string>",
"price": "<string>"
}
],
"max_fee": "<string>",
"nonce": "<string>",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signature": "<string>",
"signature_expiry_sec": 123,
"signer": "<string>",
"subaccount_id": 1,
"client": "",
"extra_fee": "0",
"label": "",
"mmp": False,
"referral_code": ""
}
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({
legs: [{amount: '<string>', instrument_name: '<string>', price: '<string>'}],
max_fee: '<string>',
nonce: '<string>',
rfq_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
signature: '<string>',
signature_expiry_sec: 123,
signer: '<string>',
subaccount_id: 1,
client: '',
extra_fee: '0',
label: '',
mmp: false,
referral_code: ''
})
};
fetch('https://api.derive.xyz/v3/private/send_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/send_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([
'legs' => [
[
'amount' => '<string>',
'instrument_name' => '<string>',
'price' => '<string>'
]
],
'max_fee' => '<string>',
'nonce' => '<string>',
'rfq_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'signature' => '<string>',
'signature_expiry_sec' => 123,
'signer' => '<string>',
'subaccount_id' => 1,
'client' => '',
'extra_fee' => '0',
'label' => '',
'mmp' => false,
'referral_code' => ''
]),
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/send_quote"
payload := strings.NewReader("{\n \"legs\": [\n {\n \"amount\": \"<string>\",\n \"instrument_name\": \"<string>\",\n \"price\": \"<string>\"\n }\n ],\n \"max_fee\": \"<string>\",\n \"nonce\": \"<string>\",\n \"rfq_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signature\": \"<string>\",\n \"signature_expiry_sec\": 123,\n \"signer\": \"<string>\",\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"extra_fee\": \"0\",\n \"label\": \"\",\n \"mmp\": false,\n \"referral_code\": \"\"\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/send_quote")
.header("X-DeriveWallet", "<api-key>")
.header("X-DeriveTimestamp", "<api-key>")
.header("X-DeriveSignature", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"legs\": [\n {\n \"amount\": \"<string>\",\n \"instrument_name\": \"<string>\",\n \"price\": \"<string>\"\n }\n ],\n \"max_fee\": \"<string>\",\n \"nonce\": \"<string>\",\n \"rfq_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signature\": \"<string>\",\n \"signature_expiry_sec\": 123,\n \"signer\": \"<string>\",\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"extra_fee\": \"0\",\n \"label\": \"\",\n \"mmp\": false,\n \"referral_code\": \"\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.derive.xyz/v3/private/send_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 \"legs\": [\n {\n \"amount\": \"<string>\",\n \"instrument_name\": \"<string>\",\n \"price\": \"<string>\"\n }\n ],\n \"max_fee\": \"<string>\",\n \"nonce\": \"<string>\",\n \"rfq_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signature\": \"<string>\",\n \"signature_expiry_sec\": 123,\n \"signer\": \"<string>\",\n \"subaccount_id\": 1,\n \"client\": \"\",\n \"extra_fee\": \"0\",\n \"label\": \"\",\n \"mmp\": false,\n \"referral_code\": \"\"\n}"
response = http.request(request)
puts response.read_body{
"cancel_reason": "",
"creation_timestamp": 123,
"direction": "buy",
"extra_fee": "<string>",
"fee": "<string>",
"fill_pct": "<string>",
"is_transfer": true,
"label": "<string>",
"last_update_timestamp": 123,
"legs": [
{
"amount": "<string>",
"direction": "buy",
"instrument_name": "<string>",
"price": "<string>"
}
],
"legs_hash": "<string>",
"liquidity_role": "maker",
"max_fee": "<string>",
"mmp": true,
"nonce": "<string>",
"quote_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signature_expiry_sec": 123,
"status": "open",
"subaccount_id": 123,
"batch_status": "Batching",
"tx_hash": "<string>"
}{
"error": {
"code": 123,
"message": "<string>",
"data": "<string>"
}
}