public/get_trade_history
Returns paginated, anonymized trades with optional filters: trade_id (a UUID, which overrides all other filters), instrument_name, instrument_type (erc20/option/perp), currency, subaccount_id, batch_status (a batch-status name; unset returns trades in every batch state), and from_timestamp/to_timestamp. Without trade_id, subaccount_id or instrument_name, or whenever batch_status is set, the window is limited to the 30 days ending at to_timestamp (or now). Each trade is enriched with its settlement status and transaction hash. Public endpoint.
curl --request POST \
--url https://api.derive.xyz/v3/public/get_trade_history \
--header 'Content-Type: application/json' \
--data '
{
"currency": null,
"from_timestamp": null,
"instrument_name": null,
"page": null,
"page_size": null,
"subaccount_id": null,
"to_timestamp": null,
"trade_id": null
}
'import requests
url = "https://api.derive.xyz/v3/public/get_trade_history"
payload = {
"currency": None,
"from_timestamp": None,
"instrument_name": None,
"page": None,
"page_size": None,
"subaccount_id": None,
"to_timestamp": None,
"trade_id": None
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
currency: null,
from_timestamp: null,
instrument_name: null,
page: null,
page_size: null,
subaccount_id: null,
to_timestamp: null,
trade_id: null
})
};
fetch('https://api.derive.xyz/v3/public/get_trade_history', 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/public/get_trade_history",
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([
'currency' => null,
'from_timestamp' => null,
'instrument_name' => null,
'page' => null,
'page_size' => null,
'subaccount_id' => null,
'to_timestamp' => null,
'trade_id' => null
]),
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://api.derive.xyz/v3/public/get_trade_history"
payload := strings.NewReader("{\n \"currency\": null,\n \"from_timestamp\": null,\n \"instrument_name\": null,\n \"page\": null,\n \"page_size\": null,\n \"subaccount_id\": null,\n \"to_timestamp\": null,\n \"trade_id\": null\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.derive.xyz/v3/public/get_trade_history")
.header("Content-Type", "application/json")
.body("{\n \"currency\": null,\n \"from_timestamp\": null,\n \"instrument_name\": null,\n \"page\": null,\n \"page_size\": null,\n \"subaccount_id\": null,\n \"to_timestamp\": null,\n \"trade_id\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.derive.xyz/v3/public/get_trade_history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"currency\": null,\n \"from_timestamp\": null,\n \"instrument_name\": null,\n \"page\": null,\n \"page_size\": null,\n \"subaccount_id\": null,\n \"to_timestamp\": null,\n \"trade_id\": null\n}"
response = http.request(request)
puts response.read_body{
"pagination": {
"count": 1,
"num_pages": 1
},
"trades": [
{
"direction": "buy",
"expected_rebate": "<string>",
"extra_fee": "<string>",
"index_price": "<string>",
"instrument_name": "<string>",
"liquidity_role": "maker",
"mark_price": "<string>",
"quote_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"realized_pnl": "<string>",
"realized_pnl_excl_fees": "<string>",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subaccount_id": 123,
"timestamp": 123,
"trade_amount": "<string>",
"trade_fee": "<string>",
"trade_id": "<string>",
"trade_price": "<string>",
"tx_hash": "<string>",
"wallet": "<string>",
"batch_status": "Batching"
}
]
}Body
Batch lifecycle status — the single source of lifecycle truth for every operation in the batch (individual ops carry no status of their own). Each stage has a healthy variant and a corresponding ...Error variant meaning that stage failed. Serialized as the variant name (string) in API responses.
Batching, Executing, Da, Proving, Settling, Settled, BatchingError, ExecutingError, DaError, ProvingError, SettlingError, SettledError Asset type of the instrument: "option", "perp", or "erc20".
option, perp, erc20 x >= 0x >= 0curl --request POST \
--url https://api.derive.xyz/v3/public/get_trade_history \
--header 'Content-Type: application/json' \
--data '
{
"currency": null,
"from_timestamp": null,
"instrument_name": null,
"page": null,
"page_size": null,
"subaccount_id": null,
"to_timestamp": null,
"trade_id": null
}
'import requests
url = "https://api.derive.xyz/v3/public/get_trade_history"
payload = {
"currency": None,
"from_timestamp": None,
"instrument_name": None,
"page": None,
"page_size": None,
"subaccount_id": None,
"to_timestamp": None,
"trade_id": None
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
currency: null,
from_timestamp: null,
instrument_name: null,
page: null,
page_size: null,
subaccount_id: null,
to_timestamp: null,
trade_id: null
})
};
fetch('https://api.derive.xyz/v3/public/get_trade_history', 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/public/get_trade_history",
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([
'currency' => null,
'from_timestamp' => null,
'instrument_name' => null,
'page' => null,
'page_size' => null,
'subaccount_id' => null,
'to_timestamp' => null,
'trade_id' => null
]),
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://api.derive.xyz/v3/public/get_trade_history"
payload := strings.NewReader("{\n \"currency\": null,\n \"from_timestamp\": null,\n \"instrument_name\": null,\n \"page\": null,\n \"page_size\": null,\n \"subaccount_id\": null,\n \"to_timestamp\": null,\n \"trade_id\": null\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.derive.xyz/v3/public/get_trade_history")
.header("Content-Type", "application/json")
.body("{\n \"currency\": null,\n \"from_timestamp\": null,\n \"instrument_name\": null,\n \"page\": null,\n \"page_size\": null,\n \"subaccount_id\": null,\n \"to_timestamp\": null,\n \"trade_id\": null\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.derive.xyz/v3/public/get_trade_history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"currency\": null,\n \"from_timestamp\": null,\n \"instrument_name\": null,\n \"page\": null,\n \"page_size\": null,\n \"subaccount_id\": null,\n \"to_timestamp\": null,\n \"trade_id\": null\n}"
response = http.request(request)
puts response.read_body{
"pagination": {
"count": 1,
"num_pages": 1
},
"trades": [
{
"direction": "buy",
"expected_rebate": "<string>",
"extra_fee": "<string>",
"index_price": "<string>",
"instrument_name": "<string>",
"liquidity_role": "maker",
"mark_price": "<string>",
"quote_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"realized_pnl": "<string>",
"realized_pnl_excl_fees": "<string>",
"rfq_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"subaccount_id": 123,
"timestamp": 123,
"trade_amount": "<string>",
"trade_fee": "<string>",
"trade_id": "<string>",
"trade_price": "<string>",
"tx_hash": "<string>",
"wallet": "<string>",
"batch_status": "Batching"
}
]
}