userTwapSliceFillsByTime | 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>",
"startTime": 123,
"endTime": 123
}
'import requests
url = "https://hypercore.goldrushdata.com/info"
payload = {
"type": "<string>",
"user": "<string>",
"startTime": 123,
"endTime": 123
}
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>', startTime: 123, endTime: 123})
};
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>',
'startTime' => 123,
'endTime' => 123
]),
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 \"startTime\": 123,\n \"endTime\": 123\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 \"startTime\": 123,\n \"endTime\": 123\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 \"startTime\": 123,\n \"endTime\": 123\n}"
response = http.request(request)
puts response.read_body{
"fill": {
"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>"
},
"twapId": 123
}Info API
userTwapSliceFillsByTime | Hyperliquid Info API
Hyperliquid userTwapSliceFillsByTime: fetch a user’s TWAP slice fills within a time window for execution-quality reconciliation on algorithmic orders.
POST
/
info
userTwapSliceFillsByTime | 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>",
"startTime": 123,
"endTime": 123
}
'import requests
url = "https://hypercore.goldrushdata.com/info"
payload = {
"type": "<string>",
"user": "<string>",
"startTime": 123,
"endTime": 123
}
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>', startTime: 123, endTime: 123})
};
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>',
'startTime' => 123,
'endTime' => 123
]),
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 \"startTime\": 123,\n \"endTime\": 123\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 \"startTime\": 123,\n \"endTime\": 123\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 \"startTime\": 123,\n \"endTime\": 123\n}"
response = http.request(request)
puts response.read_body{
"fill": {
"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>"
},
"twapId": 123
}Credit Cost
1 per call
Processing
Realtime
type: "userTwapSliceFillsByTime" is used to fetch a user’s TWAP slice fills within a time window for execution-quality reconciliation on algorithmic orders.
Estimate your monthly cost for this API using the Pricing Calculator.
- Wire-equal to
POST api.hyperliquid.xyz/infowith{"type": "userTwapSliceFillsByTime", "user": "...", "startTime": ...}. - Each response contains at most 2,000 slice fills; widen the window in chunks or page by advancing
startTimeif you need more. - GoldRush serves this
typefrom a dedicated HyperCore historical store, so windows older than upstream Hyperliquid’s 10,000-fill retention are still fulfilled. - TWAP slice fills have a
hashof all zeros - use that, or the presence oftwapId, to distinguish them from regular fills. - Use
userTwapSliceFills(noByTimesuffix) when you only need the most recent N slice fills without specifying a window.
[startTime, endTime) window in milliseconds. Each entry is a {fill, twapId} pair, where twapId ties the slice back to its parent TWAP order. Use this when you want execution-quality data for TWAP orders within a specific window - daily slice recaps, post-deploy backfills, or reconciling realized TWAP execution against benchmarks.
User-keyed. The upstream Hyperliquid API caps each response at 2,000 slice fills; page by advancing startTime. NOT LIMITED TO THE 10,000 MOST RECENT FILLS. GoldRush serves this type from a dedicated HyperCore historical store so windows extending past the upstream retention limit are fulfilled from GoldRush data rather than truncated.
Endpoint
POST https://hypercore.goldrushdata.com/info
Authorization: Bearer <GOLDRUSH_API_KEY>
Content-Type: application/json
Request
string
default:"userTwapSliceFillsByTime"
required
Always
"userTwapSliceFillsByTime".string
required
The wallet address (lowercase 0x-prefixed hex).
int
required
Unix timestamp in milliseconds. Inclusive lower bound.
int
Unix timestamp in milliseconds. Exclusive upper bound. Defaults to current server time when omitted.
Example
curl -X POST https://hypercore.goldrushdata.com/info \
-H "Authorization: Bearer $GOLDRUSH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "userTwapSliceFillsByTime",
"user": "0x31ca8395cf837de08b24da3f660e77761dfb974b",
"startTime": 1735689600000
}'
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: "userTwapSliceFillsByTime",
user: "0x31ca8395cf837de08b24da3f660e77761dfb974b",
startTime: 1735689600000,
}),
});
const slices = 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": "userTwapSliceFillsByTime",
"user": "0x31ca8395cf837de08b24da3f660e77761dfb974b",
"startTime": 1735689600000,
},
)
slices = response.json()
Response
An array of TWAP slice fill objects ordered bytime.
[
{
"fill": {
"closedPnl": "0.0",
"coin": "AVAX",
"crossed": true,
"dir": "Open Long",
"hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"oid": 90542681,
"px": "18.435",
"side": "B",
"startPosition": "26.86",
"sz": "93.53",
"time": 1681222254710,
"fee": "0.01",
"feeToken": "USDC",
"tid": 118906512037719
},
"twapId": 3156
}
]
Field descriptions
All numeric
fill fields (px, sz, startPosition, closedPnl, fee) 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.object
The slice’s fill payload - the same shape as one entry from
userFillsByTime.Show properties
Show properties
string
Asset symbol - e.g.
"BTC", "ETH" for perps; spot pairs use the @N form (e.g. "@107").string
Fill execution price for this slice.
string
Slice fill size.
string
"B" for buy/long, "A" for ask/short.int
Unix timestamp in milliseconds when the slice executed.
string
Signed position size on the same coin immediately before this slice.
string
Human-readable direction label - e.g.
"Open Long", "Close Short", "Buy", "Sell".string
Realized PnL in USDC attributable to this slice (zero when the slice opens or extends a position).
string
All-zero (
0x000…000) for TWAP slice fills - the distinguishing marker versus regular fills, which carry an L1 transaction hash.int
Order ID for the slice.
int
Unique trade ID for the slice.
boolean
true when the slice came from the taker side, false when it was the maker side.string
Trading fee paid for this slice, denominated in
feeToken.string
Symbol the fee was paid in - typically
"USDC".int
Identifier of the parent TWAP order. Multiple slice fills from the same TWAP share this value - group by
twapId to reconstruct per-TWAP execution.Related endpoints
userTwapSliceFills
fetch a user’s most recent TWAP slice fills for execution-quality analytics on algorithmic orders.
userFillsByTime
fetch a user’s trade fills within a time window for P&L recaps and tax ledger reconstruction.
userFills
fetch a user’s most recent trade fills without specifying a time window.
builderFillsByTime
fetch a builder’s attributed trade fills within a time window for revenue attribution and fee accounting.
builderFills
fetch a builder’s most recent attributed trade fills for revenue attribution and order-flow analytics.