curl --request POST \
--url 'https://api.hypedexer.com/info#historicalOrders' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "historicalOrders",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"limit": 1
}
'import requests
url = "https://api.hypedexer.com/info#historicalOrders"
payload = {
"type": "historicalOrders",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"limit": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'historicalOrders',
user: '0x010461c14e146ac35fe42271bdc1134ee31c703a',
limit: 1
})
};
fetch('https://api.hypedexer.com/info#historicalOrders', 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.hypedexer.com/info#historicalOrders",
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([
'type' => 'historicalOrders',
'user' => '0x010461c14e146ac35fe42271bdc1134ee31c703a',
'limit' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.hypedexer.com/info#historicalOrders"
payload := strings.NewReader("{\n \"type\": \"historicalOrders\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"limit\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.hypedexer.com/info#historicalOrders")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"historicalOrders\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"limit\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hypedexer.com/info#historicalOrders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"historicalOrders\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"limit\": 1\n}"
response = http.request(request)
puts response.read_body[
{
"order": {
"coin": "XPL",
"side": "A",
"limitPx": "0.11161",
"sz": "216095.0",
"origSz": "248829.0",
"oid": 557019688085,
"orderType": "Limit",
"tif": "Gtc",
"reduceOnly": true,
"isTrigger": false,
"triggerPx": "0.0",
"triggerCondition": "N/A",
"isPositionTpsl": false,
"timestamp": 1790395641208,
"cloid": null,
"children": []
},
"status": "selfTradeCanceled",
"statusTimestamp": 1790395662053
}
]{
"error": "Invalid API key"
}Historical orders
The wallet’s orders with their latest status, in Hyperliquid’s shape. Trigger orders (stop, take-profit) also come with their open and triggered states, as in Hyperliquid’s response.
Default mode (no startTime, endTime or cursor): the limit most recent orders whatever their age, latest status first, as Hyperliquid does. lookbackDays restricts the result to statuses from the last N days. Beyond the limit most recent orders, an older order whose status changes today is not returned.
Window mode (startTime and/or endTime, inclusive bounds on the status timestamp): complete traversal of the window, limit orders per page, sorted by oid descending (unique per wallet and increasing with placement time, so no ties). The response headers X-Has-More (true/false) and X-Next-Cursor tell whether a next page exists; pass X-Next-Cursor as cursor to get it. Each order comes with its latest status within the window, plus, for a trigger order, its open and triggered states within the window, so statusTimestamp always falls inside it. An order is included when any of these states falls in the window: a window around a stop’s placement returns its open state. Measured: 19,989 orders of one wallet over 24 hours in 10 pages of about 0.3 s each.
Trigger orders. The open and triggered states carry isTrigger: true, triggerPx, triggerCondition and the creation timestamp. The final filled state of an executed stop has, as in Hyperliquid, isTrigger: false, triggerPx: "0.0", triggerCondition: "Triggered" and the execution timestamp; triggered and filled usually share the same statusTimestamp. A trigger order therefore spans several rows, and limit counts orders, not rows. When a stop was modified before triggering, its open state is the last version. These states are indexed since 2026-09-30; before that date they are only partially available.
Prices and sizes use Hyperliquid’s format, always with at least one decimal ("93604.0", "0.0"). cloid and tif are always present, null when absent. isPositionTpsl is true for a TP/SL order attached to the whole position (its size follows the position), false for a fixed-size trigger order. children is always []: TP/SL children are not indexed. Order statuses are indexed in the EU region and served from there whatever the client’s location; coverage starts 2026-06-27.
curl --request POST \
--url 'https://api.hypedexer.com/info#historicalOrders' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "historicalOrders",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"limit": 1
}
'import requests
url = "https://api.hypedexer.com/info#historicalOrders"
payload = {
"type": "historicalOrders",
"user": "0x010461c14e146ac35fe42271bdc1134ee31c703a",
"limit": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'historicalOrders',
user: '0x010461c14e146ac35fe42271bdc1134ee31c703a',
limit: 1
})
};
fetch('https://api.hypedexer.com/info#historicalOrders', 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.hypedexer.com/info#historicalOrders",
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([
'type' => 'historicalOrders',
'user' => '0x010461c14e146ac35fe42271bdc1134ee31c703a',
'limit' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.hypedexer.com/info#historicalOrders"
payload := strings.NewReader("{\n \"type\": \"historicalOrders\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"limit\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.hypedexer.com/info#historicalOrders")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"historicalOrders\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"limit\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hypedexer.com/info#historicalOrders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"historicalOrders\",\n \"user\": \"0x010461c14e146ac35fe42271bdc1134ee31c703a\",\n \"limit\": 1\n}"
response = http.request(request)
puts response.read_body[
{
"order": {
"coin": "XPL",
"side": "A",
"limitPx": "0.11161",
"sz": "216095.0",
"origSz": "248829.0",
"oid": 557019688085,
"orderType": "Limit",
"tif": "Gtc",
"reduceOnly": true,
"isTrigger": false,
"triggerPx": "0.0",
"triggerCondition": "N/A",
"isPositionTpsl": false,
"timestamp": 1790395641208,
"cloid": null,
"children": []
},
"status": "selfTradeCanceled",
"statusTimestamp": 1790395662053
}
]{
"error": "Invalid API key"
}Authorizations
Your Hypedexer API key, sent as Authorization: Bearer <key>. The X-API-Key: <key> header and the api_key query parameter are accepted as well.
Body
historicalOrders Wallet address (0x-prefixed, case-insensitive)
1 <= x <= 5000Optional. Only statuses from the last N days
1 <= x <= 365Window mode: inclusive lower bound on the status timestamp, epoch milliseconds
Window mode: inclusive upper bound on the status timestamp, epoch milliseconds
Window mode: the X-Next-Cursor header of the previous page