curl --request GET \
--url https://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history \
--header 'Authorization: Bearer <token>'import requests
url = "https://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history"
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/users/{user_pubkey}/liquidation-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://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history",
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/users/{user_pubkey}/liquidation-history"
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/users/{user_pubkey}/liquidation-history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history")
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": [
{
"eventIndex": 123,
"ixName": "<string>",
"kind": "market_order",
"market": "<string>",
"role": "liquidatee",
"slot": 123,
"slotIndex": 123,
"symbol": "<string>",
"timestamp": 123,
"type": "market",
"atLossCloseValue": "<string>",
"atLossCollateralChange": "<string>",
"baseLotsFilled": "<string>",
"caller": "<string>",
"closedLong": "<string>",
"closedShort": "<string>",
"haircutRateBps": 123,
"inProfitAccount": "<string>",
"inProfitCloseValue": "<string>",
"inProfitCollateralChange": "<string>",
"liquidatee": "<string>",
"liquidateeCollateralChange": "<string>",
"liquidator": "<string>",
"liquidatorCollateralChange": "<string>",
"positionClosed": true,
"price": "<string>",
"quoteLotsFilled": "<string>",
"quoteSize": "<string>",
"side": "<string>",
"signature": "<string>",
"size": "<string>",
"subaccountIndex": 123
}
],
"hasMore": true,
"nextCursor": "<string>",
"prevCursor": "<string>"
}Get user liquidation history
Handles GET /v1/users/{user_pubkey}/liquidation-history via get.v1.users.by_user_pubkey.liquidation_history.
curl --request GET \
--url https://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history \
--header 'Authorization: Bearer <token>'import requests
url = "https://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history"
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/users/{user_pubkey}/liquidation-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://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history",
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/users/{user_pubkey}/liquidation-history"
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/users/{user_pubkey}/liquidation-history")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://perp-api.phoenix.trade/v1/users/{user_pubkey}/liquidation-history")
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": [
{
"eventIndex": 123,
"ixName": "<string>",
"kind": "market_order",
"market": "<string>",
"role": "liquidatee",
"slot": 123,
"slotIndex": 123,
"symbol": "<string>",
"timestamp": 123,
"type": "market",
"atLossCloseValue": "<string>",
"atLossCollateralChange": "<string>",
"baseLotsFilled": "<string>",
"caller": "<string>",
"closedLong": "<string>",
"closedShort": "<string>",
"haircutRateBps": 123,
"inProfitAccount": "<string>",
"inProfitCloseValue": "<string>",
"inProfitCollateralChange": "<string>",
"liquidatee": "<string>",
"liquidateeCollateralChange": "<string>",
"liquidator": "<string>",
"liquidatorCollateralChange": "<string>",
"positionClosed": true,
"price": "<string>",
"quoteLotsFilled": "<string>",
"quoteSize": "<string>",
"side": "<string>",
"signature": "<string>",
"size": "<string>",
"subaccountIndex": 123
}
],
"hasMore": true,
"nextCursor": "<string>",
"prevCursor": "<string>"
}Authorizations
Bearer access token issued by /v1/auth/* login endpoints.
Path Parameters
Query Parameters
Trader PDA index to scope history. Defaults to 0.
Optional subaccount index. If omitted, all subaccounts under the PDA are included.
Optional market symbol filter.
Maximum number of events to return (max 100, default 100).
Opaque cursor for older or newer pagination.
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.