curl --request GET \
--url https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2 \
--header 'Authorization: Bearer <token>'import requests
url = "https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2', 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://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"baseLotsAfter": "<string>",
"baseLotsBefore": "<string>",
"baseLotsDelta": "<string>",
"eventIndex": 123,
"fees": "<string>",
"instructionIndex": 123,
"instructionType": "<string>",
"liquidity": "maker",
"marketSymbol": "<string>",
"price": "<string>",
"realizedPnl": "<string>",
"slot": 123,
"slotIndex": 123,
"subaccountIndex": 123,
"timestamp": "2023-11-07T05:31:56Z",
"tradeType": "limit",
"traderId": 123,
"traderPdaIndex": 123,
"userId": 123,
"virtualQuoteLotsAfter": "<string>",
"virtualQuoteLotsBefore": "<string>",
"virtualQuoteLotsDelta": "<string>",
"fillId": "<string>",
"orderSequenceNumber": 123,
"signature": "<string>",
"splineSequenceNumber": 123
}
],
"hasMore": true,
"nextCursor": "<string>",
"prevCursor": "<string>"
}Get trader trade history v2
Handles GET /v1/traders/{trader_pubkey}/trades_v2 via get.v1.traders.by_trader_pubkey.trades_v2.
curl --request GET \
--url https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2 \
--header 'Authorization: Bearer <token>'import requests
url = "https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2', 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://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://perp-api.phoenix.trade/v1/traders/{trader_pubkey}/trades_v2")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"baseLotsAfter": "<string>",
"baseLotsBefore": "<string>",
"baseLotsDelta": "<string>",
"eventIndex": 123,
"fees": "<string>",
"instructionIndex": 123,
"instructionType": "<string>",
"liquidity": "maker",
"marketSymbol": "<string>",
"price": "<string>",
"realizedPnl": "<string>",
"slot": 123,
"slotIndex": 123,
"subaccountIndex": 123,
"timestamp": "2023-11-07T05:31:56Z",
"tradeType": "limit",
"traderId": 123,
"traderPdaIndex": 123,
"userId": 123,
"virtualQuoteLotsAfter": "<string>",
"virtualQuoteLotsBefore": "<string>",
"virtualQuoteLotsDelta": "<string>",
"fillId": "<string>",
"orderSequenceNumber": 123,
"signature": "<string>",
"splineSequenceNumber": 123
}
],
"hasMore": true,
"nextCursor": "<string>",
"prevCursor": "<string>"
}Authorizations
Bearer access token issued by /v1/auth/* login endpoints.
Path Parameters
Query Parameters
Optional market symbol to filter by (e.g., "SOL-PERP")
Optional trader PDA index to scope results for a specific trader PDA
Number of items to return (max 1000)
Optional cursor for pagination (format: "slot" or "slot,slot_index") Items returned will be older than (exclusive of) this cursor
Privy user ID (optional)
Response
Generic paginated response wrapper with bidirectional cursor support.
The cursor system supports both forward (newer) and backward (older) pagination:
prev_cursor: Use this cursor to poll for new items (items newer than the current result set)next_cursor: Use this cursor to load more items (items older than the current result set)
The direction is embedded in the cursor itself, so clients just need to pass
the appropriate cursor to the cursor parameter.
Show child attributes
Show child attributes
Whether there are more results available after this page
Opaque cursor for fetching the next page of older results.
Pass this value as the cursor parameter in the next request to load
more.
Opaque cursor for fetching newer items (for polling).
Pass this value as the cursor parameter to get items newer than the
first item in data.