curl --request GET \
--url https://hip4-api.totalis.trade/v1/markets/{outcome_id}/historyimport requests
url = "https://hip4-api.totalis.trade/v1/markets/{outcome_id}/history"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://hip4-api.totalis.trade/v1/markets/{outcome_id}/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://hip4-api.totalis.trade/v1/markets/{outcome_id}/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://hip4-api.totalis.trade/v1/markets/{outcome_id}/history"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://hip4-api.totalis.trade/v1/markets/{outcome_id}/history")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/markets/{outcome_id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"outcome_id": "1209",
"side": "YES",
"series_type": "TRADE_OHLCV",
"source": "HYPERLIQUID_TRADES",
"quality": "TRADE",
"scale": "1000000000000000000",
"volume_scale": "1000000000000000000",
"from": "2026-09-25T20:00:07.998164544Z",
"to": "2026-09-26T20:00:07.998164544Z",
"bucket_time": "HYPERLIQUID_SOURCE_TIME",
"closed_before": "2026-09-26T20:00:00Z",
"anchor": {
"minute": "2026-09-25T19:46:00Z",
"open": "330000000000000000",
"high": "330000000000000000",
"low": "330000000000000000",
"close": "330000000000000000",
"volume": "39000000000000000000",
"trade_count": 1
},
"bars": [
{
"minute": "2026-09-25T20:05:00Z",
"open": "304510000000000000",
"high": "304510000000000000",
"low": "304510000000000000",
"close": "304510000000000000",
"volume": "40000000000000000000",
"trade_count": 1
},
{
"minute": "2026-09-25T20:36:00Z",
"open": "330900000000000000",
"high": "330900000000000000",
"low": "328100000000000000",
"close": "328100000000000000",
"volume": "67000000000000000000",
"trade_count": 2
},
{
"minute": "2026-09-25T20:37:00Z",
"open": "326010000000000000",
"high": "326010000000000000",
"low": "326010000000000000",
"close": "326010000000000000",
"volume": "40000000000000000000",
"trade_count": 1
}
],
"gaps": [
{
"outcome_id": "1209",
"source": "HYPERLIQUID_TRADES",
"catalog_generation": "5770",
"feed_generation": "1790366409618",
"from": "2026-09-25T20:00:09.600639Z",
"to": "2026-09-25T20:00:09.61714Z",
"reason": "SOURCE_UNAVAILABLE"
},
{
"outcome_id": "1209",
"source": "HYPERLIQUID_TRADES",
"catalog_generation": "5771",
"feed_generation": "1790366410587",
"from": "2026-09-25T20:00:10.56027Z",
"to": "2026-09-25T20:00:10.586751Z",
"reason": "SOURCE_UNAVAILABLE"
}
],
"next_cursor": "AQAABLkAGNiowyaFzkAY2PdXt9TOQBjYqsYsGzgAAAABoNpC2_8AAAAAAAAWugUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeC2s6dkAAA",
"has_more": true
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Get market history
Get up to 24 hours of one-minute price history for one side of a market.
No API key required.
curl --request GET \
--url https://hip4-api.totalis.trade/v1/markets/{outcome_id}/historyimport requests
url = "https://hip4-api.totalis.trade/v1/markets/{outcome_id}/history"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://hip4-api.totalis.trade/v1/markets/{outcome_id}/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://hip4-api.totalis.trade/v1/markets/{outcome_id}/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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://hip4-api.totalis.trade/v1/markets/{outcome_id}/history"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://hip4-api.totalis.trade/v1/markets/{outcome_id}/history")
.asString();require 'uri'
require 'net/http'
url = URI("https://hip4-api.totalis.trade/v1/markets/{outcome_id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"outcome_id": "1209",
"side": "YES",
"series_type": "TRADE_OHLCV",
"source": "HYPERLIQUID_TRADES",
"quality": "TRADE",
"scale": "1000000000000000000",
"volume_scale": "1000000000000000000",
"from": "2026-09-25T20:00:07.998164544Z",
"to": "2026-09-26T20:00:07.998164544Z",
"bucket_time": "HYPERLIQUID_SOURCE_TIME",
"closed_before": "2026-09-26T20:00:00Z",
"anchor": {
"minute": "2026-09-25T19:46:00Z",
"open": "330000000000000000",
"high": "330000000000000000",
"low": "330000000000000000",
"close": "330000000000000000",
"volume": "39000000000000000000",
"trade_count": 1
},
"bars": [
{
"minute": "2026-09-25T20:05:00Z",
"open": "304510000000000000",
"high": "304510000000000000",
"low": "304510000000000000",
"close": "304510000000000000",
"volume": "40000000000000000000",
"trade_count": 1
},
{
"minute": "2026-09-25T20:36:00Z",
"open": "330900000000000000",
"high": "330900000000000000",
"low": "328100000000000000",
"close": "328100000000000000",
"volume": "67000000000000000000",
"trade_count": 2
},
{
"minute": "2026-09-25T20:37:00Z",
"open": "326010000000000000",
"high": "326010000000000000",
"low": "326010000000000000",
"close": "326010000000000000",
"volume": "40000000000000000000",
"trade_count": 1
}
],
"gaps": [
{
"outcome_id": "1209",
"source": "HYPERLIQUID_TRADES",
"catalog_generation": "5770",
"feed_generation": "1790366409618",
"from": "2026-09-25T20:00:09.600639Z",
"to": "2026-09-25T20:00:09.61714Z",
"reason": "SOURCE_UNAVAILABLE"
},
{
"outcome_id": "1209",
"source": "HYPERLIQUID_TRADES",
"catalog_generation": "5771",
"feed_generation": "1790366410587",
"from": "2026-09-25T20:00:10.56027Z",
"to": "2026-09-25T20:00:10.586751Z",
"reason": "SOURCE_UNAVAILABLE"
}
],
"next_cursor": "AQAABLkAGNiowyaFzkAY2PdXt9TOQBjYqsYsGzgAAAABoNpC2_8AAAAAAAAWugUEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADeC2s6dkAAA",
"has_more": true
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}{
"error": {
"code": "INVALID_REQUEST",
"field_violations": [
{
"code": "REQUIRED",
"field": "<string>"
}
],
"message": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"retry": "NEVER"
}
}Path Parameters
HIP-4 outcome ID of the market, as a decimal string.
10^(0|[1-9][0-9]{0,8}|[1-3][0-9]{9}|4[01][0-9]{8}|42[0-8][0-9]{7}|429[0-3][0-9]{6}|4294[0-8][0-9]{5}|42949[0-5][0-9]{4}|429496[0-6][0-9]{3}|4294967[0-1][0-9]{2}|42949672[0-8][0-9]|429496729[0-5])$Query Parameters
Outcome side whose price history is returned.
YES, NO Use REFERENCE_PRICE_OHLC for a line chart and TRADE_OHLCV for candles; AUTO uses trades when there are any. AUTO selects retained closed trade buckets in the window, otherwise reference history. REFERENCE_PRICE_OHLC prefers L2, then BBO, then allMids among sources with a closed bucket in the window; with none it carries the most recent earlier source inside the 90-day online window, breaking ties in that order. With no evidence the empty reference response is labelled L2/BOOK_MID. Explicit series avoids AUTO switching when trades arrive.
AUTO, REFERENCE_PRICE_OHLC, TRADE_OHLCV Inclusive RFC3339 window start. Omit from and to together for the exact rolling 24 hours ending at server time; supplying only one is rejected. The response repeats the resolved bounds, which later pages must reuse.
Exclusive RFC3339 window end, at most 24 hours after from. Omit from and to together for the server default.
Omit for the first page; then send the previous response's next_cursor unchanged. Opaque list cursor. Send a previous response's next_cursor back unchanged; never build or parse one.
1 - 2048The shared page limit with one exception: the maximum is 1,440, a full 24-hour window of one-minute bars, so a chart loads in one request.
1 <= x <= 1440Include at most 1440 retained diagnostic gap records; gaps is empty unless this is true.
Response
Exactly one labelled, sparse series: reference prices or trades. Only minutes that closed before closed_before are returned; take the current minute from the live market stream. Later pages reuse the window this first response returns.
Hyperliquid outcome ID of the market.
10^(0|[1-9][0-9]{0,8}|[1-3][0-9]{9}|4[01][0-9]{8}|42[0-8][0-9]{7}|429[0-3][0-9]{6}|4294[0-8][0-9]{5}|42949[0-5][0-9]{4}|429496[0-6][0-9]{3}|4294967[0-1][0-9]{2}|42949672[0-8][0-9]|429496729[0-5])$Market side every bar describes, YES or NO.
YES, NO TRADE_OHLCV: bars are one-minute OHLCV of executed trade prices, with base-size volume. REFERENCE_PRICE_OHLC: bars are one-minute OHLC of indicative mid prices, falling back to the last trade, without volume. Minutes without observations have no bar and are never filled in.
TRADE_OHLCV, REFERENCE_PRICE_OHLC Hyperliquid feed every bar in the response was built from. Always HYPERLIQUID_TRADES for trade history.
HYPERLIQUID_FAST_ASSET_CTXS, HYPERLIQUID_ALL_MIDS, HYPERLIQUID_L2_BOOK, HYPERLIQUID_BBO, HYPERLIQUID_TRADES Price quality every bar in the response carries. Always TRADE for trade history.
BOOK_MID, MARK_PRICE, ALL_MIDS_FALLBACK, TRADE Divisor for open, high, low and close of every bar and the anchor; null when there are neither. Currently 1000000000000000000 (18 decimals); a scale change starts a new page.
78^[1-9][0-9]*$Divisor for volume of every bar and the anchor; null for reference-price history or when there are no bars. Divisor for volume; null only when there are no bars. Always null; reference-price bars carry no volume.
78^[1-9][0-9]*$Authoritative window start. It repeats the request, or the rolling 24-hour default when from and to are both omitted. Reuse these bounds for later pages.
30^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?Z$Authoritative exclusive window end. It repeats the request, or the request time when from and to are both omitted. Reuse these bounds for later pages.
30^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?Z$minute is the inclusive UTC bucket start on this clock; bucket end is exclusive one minute later. Only full closed buckets contained in [from,to) appear in bars.
TOTALIS_RECEIVED_AT, HYPERLIQUID_SOURCE_TIME Exclusive bucket boundary, the earlier of to or server time rounded down to a minute. This is not a persistence or coverage watermark. Closed buckets can still be repaired.
30^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([.][0-9]{1,9})?Z$Latest retained earlier full bucket within the 90-day online window for the selected source and side, last received before from. Its close is an observed price, not proof that the value held through from. Null when there is none or its scale differs from the bars.
Show child attributes
Show child attributes
Closed one-minute bars in the window, ascending by minute.
1440Show child attributes
Show child attributes
Recorded data gaps overlapping the window; empty unless gaps were requested.
1440Show child attributes
Show child attributes
Pass as cursor with the same from and to to read the next page; null when there are no more bars.
1 - 2048True when more bars follow in the window.
Was this page helpful?

