info (userTwapSliceFillsByTime)
curl --request POST \
--url https://api.hyperliquid.xyz/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "userTwapSliceFillsByTime",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
"startTime": 0,
"endTime": 123
}
'import requests
url = "https://api.hyperliquid.xyz/info"
payload = {
"type": "userTwapSliceFillsByTime",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
"startTime": 0,
"endTime": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'userTwapSliceFillsByTime',
user: '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568',
startTime: 0,
endTime: 123
})
};
fetch('https://api.hyperliquid.xyz/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://api.hyperliquid.xyz/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' => 'userTwapSliceFillsByTime',
'user' => '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568',
'startTime' => 0,
'endTime' => 123
]),
CURLOPT_HTTPHEADER => [
"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.hyperliquid.xyz/info"
payload := strings.NewReader("{\n \"type\": \"userTwapSliceFillsByTime\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\",\n \"startTime\": 0,\n \"endTime\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.hyperliquid.xyz/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"userTwapSliceFillsByTime\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\",\n \"startTime\": 0,\n \"endTime\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperliquid.xyz/info")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"userTwapSliceFillsByTime\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\",\n \"startTime\": 0,\n \"endTime\": 123\n}"
response = http.request(request)
puts response.read_body[
{}
]Hyperliquid node API
userTwapSliceFillsByTime | Hyperliquid info
The info endpoint with type: “userTwapSliceFillsByTime” returns a user’s TWAP slice fills within a time range on Hyperliquid.
POST
/
info
info (userTwapSliceFillsByTime)
curl --request POST \
--url https://api.hyperliquid.xyz/info \
--header 'Content-Type: application/json' \
--data '
{
"type": "userTwapSliceFillsByTime",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
"startTime": 0,
"endTime": 123
}
'import requests
url = "https://api.hyperliquid.xyz/info"
payload = {
"type": "userTwapSliceFillsByTime",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
"startTime": 0,
"endTime": 123
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'userTwapSliceFillsByTime',
user: '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568',
startTime: 0,
endTime: 123
})
};
fetch('https://api.hyperliquid.xyz/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://api.hyperliquid.xyz/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' => 'userTwapSliceFillsByTime',
'user' => '0x1442ad477ded1b0028b57621aa7b6f7eadb8f568',
'startTime' => 0,
'endTime' => 123
]),
CURLOPT_HTTPHEADER => [
"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.hyperliquid.xyz/info"
payload := strings.NewReader("{\n \"type\": \"userTwapSliceFillsByTime\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\",\n \"startTime\": 0,\n \"endTime\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
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.hyperliquid.xyz/info")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"userTwapSliceFillsByTime\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\",\n \"startTime\": 0,\n \"endTime\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperliquid.xyz/info")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"userTwapSliceFillsByTime\",\n \"user\": \"0x1442ad477ded1b0028b57621aa7b6f7eadb8f568\",\n \"startTime\": 0,\n \"endTime\": 123\n}"
response = http.request(request)
puts response.read_body[
{}
]You can only use this endpoint on the official Hyperliquid public API. It is not available through Chainstack, as the open-source node implementation does not support it yet. See Hyperliquid methods for the full availability breakdown.
info endpoint with type: "userTwapSliceFillsByTime" returns a user’s TWAP slice fills within a time range. Each TWAP order executes as a series of slices; this method returns those individual slice fills filtered by time.
Get your own node endpoint todayStart for free and get your app to production levels immediately. No credit card required.You can sign up with your GitHub, X, Google, or Microsoft account.
Parameters
Request body
type(string, required) — The request type. Must be"userTwapSliceFillsByTime".user(string, required) — Address in 42-character hexadecimal format.startTime(integer, required) — Start time in milliseconds since epoch (inclusive).endTime(integer, optional) — End time in milliseconds since epoch (inclusive). Defaults to the current time.
Response
Returns an array of TWAP slice fills. Each entry is a fill record (with the standard fill fields such ascoin, px, sz, side, time, and hash) paired with the TWAP order ID it belongs to.
Example request
curl -X POST \
-H "Content-Type: application/json" \
-d '{"type": "userTwapSliceFillsByTime", "user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568", "startTime": 0}' \
https://api.hyperliquid.xyz/info
from hyperliquid.info import Info
from hyperliquid.utils import constants
info = Info(constants.MAINNET_API_URL, skip_ws=True)
# The SDK has no dedicated userTwapSliceFillsByTime helper, so post the request directly.
fills = info.post("/info", {
"type": "userTwapSliceFillsByTime",
"user": "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
"startTime": 0,
})
print(fills)
import { HttpTransport, InfoClient } from "@nktkas/hyperliquid";
const transport = new HttpTransport();
const info = new InfoClient({ transport });
const fills = await info.userTwapSliceFillsByTime({
user: "0x1442ad477ded1b0028b57621aa7b6f7eadb8f568",
startTime: 0,
});
console.log(fills);
Example response
[]
Use cases
Theinfo endpoint with type: "userTwapSliceFillsByTime" is useful for:
- Reconciling TWAP executions within a specific time window
- Backtesting and performance analysis of TWAP strategies
- Reporting on slice-level execution detail
Body
application/json
Request type
Available options:
userTwapSliceFillsByTime User address in 42-character hexadecimal format.
Start time in milliseconds since epoch (inclusive).
End time in milliseconds since epoch (inclusive). Optional; defaults to now.
Response
200 - application/json
The user's TWAP slice fills within the time range.
Last modified on June 24, 2026
Was this page helpful?