userFills | Hyperliquid Info API
curl --request POST \
--url https://hypercore.goldrushdata.com/info \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"user": "<string>",
"aggregateByTime": true
}
'import requests
url = "https://hypercore.goldrushdata.com/info"
payload = {
"type": "<string>",
"user": "<string>",
"aggregateByTime": True
}
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: '<string>', user: '<string>', aggregateByTime: true})
};
fetch('https://hypercore.goldrushdata.com/info', 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://hypercore.goldrushdata.com/info",
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' => '<string>',
'user' => '<string>',
'aggregateByTime' => true
]),
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://hypercore.goldrushdata.com/info"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"user\": \"<string>\",\n \"aggregateByTime\": true\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://hypercore.goldrushdata.com/info")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"user\": \"<string>\",\n \"aggregateByTime\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hypercore.goldrushdata.com/info")
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\": \"<string>\",\n \"user\": \"<string>\",\n \"aggregateByTime\": true\n}"
response = http.request(request)
puts response.read_body{
"coin": "<string>",
"px": "<string>",
"sz": "<string>",
"side": "<string>",
"time": 123,
"startPosition": "<string>",
"dir": "<string>",
"closedPnl": "<string>",
"hash": "<string>",
"oid": 123,
"tid": 123,
"crossed": true,
"fee": "<string>",
"feeToken": "<string>",
"builderFee": "<string>",
"twapId": {},
"cloid": {}
}Info API
userFills | Hyperliquid Info API
Hyperliquid userFills: fetch a user’s most recent trade fills without specifying a time window.
POST
/
info
userFills | Hyperliquid Info API
curl --request POST \
--url https://hypercore.goldrushdata.com/info \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"user": "<string>",
"aggregateByTime": true
}
'import requests
url = "https://hypercore.goldrushdata.com/info"
payload = {
"type": "<string>",
"user": "<string>",
"aggregateByTime": True
}
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: '<string>', user: '<string>', aggregateByTime: true})
};
fetch('https://hypercore.goldrushdata.com/info', 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://hypercore.goldrushdata.com/info",
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' => '<string>',
'user' => '<string>',
'aggregateByTime' => true
]),
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://hypercore.goldrushdata.com/info"
payload := strings.NewReader("{\n \"type\": \"<string>\",\n \"user\": \"<string>\",\n \"aggregateByTime\": true\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://hypercore.goldrushdata.com/info")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"<string>\",\n \"user\": \"<string>\",\n \"aggregateByTime\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://hypercore.goldrushdata.com/info")
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\": \"<string>\",\n \"user\": \"<string>\",\n \"aggregateByTime\": true\n}"
response = http.request(request)
puts response.read_body{
"coin": "<string>",
"px": "<string>",
"sz": "<string>",
"side": "<string>",
"time": 123,
"startPosition": "<string>",
"dir": "<string>",
"closedPnl": "<string>",
"hash": "<string>",
"oid": 123,
"tid": 123,
"crossed": true,
"fee": "<string>",
"feeToken": "<string>",
"builderFee": "<string>",
"twapId": {},
"cloid": {}
}Credit Cost
1 per call
Processing
Realtime
type: "userFills" is used to fetch a user’s most recent trade fills without specifying a time window.
Estimate your monthly cost for this API using the Pricing Calculator.
- Wire-equal to
POST api.hyperliquid.xyz/infowith{"type": "userFills", "user": "..."}. - Each response contains at most 2,000 fills.
Endpoint
POST https://hypercore.goldrushdata.com/info
Authorization: Bearer <GOLDRUSH_API_KEY>
Content-Type: application/json
Request
string
required
Always
"userFills".string
required
The wallet address (lowercase 0x-prefixed hex).
boolean
When
true, partial fills sharing the same timestamp are consolidated into one row. Default false.Example
curl -X POST https://hypercore.goldrushdata.com/info \
-H "Authorization: Bearer $GOLDRUSH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "userFills",
"user": "0x31ca8395cf837de08b24da3f660e77761dfb974b"
}'
const response = await fetch("https://hypercore.goldrushdata.com/info", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.GOLDRUSH_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
type: "userFills",
user: "0x31ca8395cf837de08b24da3f660e77761dfb974b",
}),
});
const fills = await response.json();
import os, requests
response = requests.post(
"https://hypercore.goldrushdata.com/info",
headers={"Authorization": f"Bearer {os.environ['GOLDRUSH_API_KEY']}"},
json={
"type": "userFills",
"user": "0x31ca8395cf837de08b24da3f660e77761dfb974b",
},
)
fills = response.json()
Response
An array of fill objects ordered most-recent-first.[
{
"coin": "BTC",
"px": "43250.5",
"sz": "0.1",
"side": "B",
"time": 1735689600000,
"startPosition": "0",
"dir": "Open Long",
"closedPnl": "0",
"hash": "0x6b9c0a4a3d54b0d4d6b1a0c4d8c9e7f2b6e5d3c2a1f0e9d8c7b6a5f4e3d2c1b0a",
"oid": 95012345,
"tid": 678900012345,
"crossed": true,
"fee": "2.16",
"feeToken": "USDC"
}
]
Field descriptions
All numeric fields (
px, sz, startPosition, closedPnl, fee, builderFee) are returned as decimal strings, preserving upstream precision. Do not parse them as floats - keep them as strings or use a fixed-precision decimal type.string
Asset symbol - e.g.
"BTC", "ETH" for perps; spot pairs use the @N form (e.g. "@107").string
Fill execution price.
string
Fill size.
string
"B" for buy/long, "A" for ask/short.int
Unix timestamp in milliseconds when the fill executed.
string
Signed position size on the same coin immediately before this fill.
string
Human-readable direction label - e.g.
"Open Long", "Close Short", "Buy", "Sell".string
Realized PnL in USDC attributable to this fill (zero when the fill opens or extends a position).
string
L1 transaction hash that included this fill.
int
Parent order ID.
int
Unique trade ID.
boolean
true when the fill came from the taker side of the order, false when it was the maker side.string
Trading fee paid for this fill, denominated in
feeToken.string
Symbol the fee was paid in - typically
"USDC".string
Optional. Builder fee paid for this fill if the order routed through a builder code.
int | null
Optional TWAP order ID if this fill is a slice of a TWAP order.
string | null
Optional client order ID if one was set at order placement.
Related endpoints
userFillsByTime
fetch a user’s trade fills within a time window for P&L recaps and tax ledger reconstruction.
userTwapSliceFills
fetch a user’s most recent TWAP slice fills for execution-quality analytics on algorithmic orders.
userTwapSliceFillsByTime
fetch a user’s TWAP slice fills within a time window for execution-quality reconciliation on algorithmic orders.
userBorrowLendInterest
fetch a user’s borrow/lend interest accrual history.
userFunding
fetch a user’s per-coin funding payment history within a time window for funding-only P&L attribution.
userNonFundingLedgerUpdates
fetch a user’s non-funding USDC ledger history (deposits, withdrawals, transfers, vault flows) within a time window.