curl --request POST \
--url https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"type": "metaAndAssetCtxs",
"dex": "",
"startTime": 1757340000000,
"endTime": 1757340180000,
"interval": "1m"
}
'import requests
url = "https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs"
payload = {
"type": "metaAndAssetCtxs",
"dex": "",
"startTime": 1757340000000,
"endTime": 1757340180000,
"interval": "1m"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'metaAndAssetCtxs',
dex: '',
startTime: 1757340000000,
endTime: 1757340180000,
interval: '1m'
})
};
fetch('https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs', 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.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs",
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' => 'metaAndAssetCtxs',
'dex' => '',
'startTime' => 1757340000000,
'endTime' => 1757340180000,
'interval' => '1m'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs"
payload := strings.NewReader("{\n \"type\": \"metaAndAssetCtxs\",\n \"dex\": \"\",\n \"startTime\": 1757340000000,\n \"endTime\": 1757340180000,\n \"interval\": \"1m\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"metaAndAssetCtxs\",\n \"dex\": \"\",\n \"startTime\": 1757340000000,\n \"endTime\": 1757340180000,\n \"interval\": \"1m\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"metaAndAssetCtxs\",\n \"dex\": \"\",\n \"startTime\": 1757340000000,\n \"endTime\": 1757340180000,\n \"interval\": \"1m\"\n}"
response = http.request(request)
puts response.read_body[
[
{
"timestamp": 123,
"coin": "<string>",
"dayNtlVlm": "<string>",
"funding": "<string>",
"impactPxs": [
"<string>"
],
"markPx": "<string>",
"midPx": "<string>",
"openInterest": "<string>",
"oraclePx": "<string>",
"premium": "<string>",
"prevDayPx": "<string>",
"maxLeverage": 123
}
]
]"<string>""<string>"Asset contexts
Hyperliquid’s metaAndAssetCtxs with history: mark, oracle and mid prices, funding and open interest for every coin in a dex, one snapshot per minute
curl --request POST \
--url https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"type": "metaAndAssetCtxs",
"dex": "",
"startTime": 1757340000000,
"endTime": 1757340180000,
"interval": "1m"
}
'import requests
url = "https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs"
payload = {
"type": "metaAndAssetCtxs",
"dex": "",
"startTime": 1757340000000,
"endTime": 1757340180000,
"interval": "1m"
}
headers = {
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-KEY': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
type: 'metaAndAssetCtxs',
dex: '',
startTime: 1757340000000,
endTime: 1757340180000,
interval: '1m'
})
};
fetch('https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs', 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.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs",
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' => 'metaAndAssetCtxs',
'dex' => '',
'startTime' => 1757340000000,
'endTime' => 1757340180000,
'interval' => '1m'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>"
],
]);
$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.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs"
payload := strings.NewReader("{\n \"type\": \"metaAndAssetCtxs\",\n \"dex\": \"\",\n \"startTime\": 1757340000000,\n \"endTime\": 1757340180000,\n \"interval\": \"1m\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-KEY", "<api-key>")
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.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"type\": \"metaAndAssetCtxs\",\n \"dex\": \"\",\n \"startTime\": 1757340000000,\n \"endTime\": 1757340180000,\n \"interval\": \"1m\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.allium.so/api/v1/developer/trading/hyperliquid/info/assetctxs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"type\": \"metaAndAssetCtxs\",\n \"dex\": \"\",\n \"startTime\": 1757340000000,\n \"endTime\": 1757340180000,\n \"interval\": \"1m\"\n}"
response = http.request(request)
puts response.read_body[
[
{
"timestamp": 123,
"coin": "<string>",
"dayNtlVlm": "<string>",
"funding": "<string>",
"impactPxs": [
"<string>"
],
"markPx": "<string>",
"midPx": "<string>",
"openInterest": "<string>",
"oraclePx": "<string>",
"premium": "<string>",
"prevDayPx": "<string>",
"maxLeverage": 123
}
]
]"<string>""<string>"metaAndAssetCtxs from Allium’s realtime store and adds history. Each snapshot holds every coin in the dex with its mark price, oracle price, mid price, funding, open interest, premium, previous-day price and 24-hour notional volume.
{"type": "metaAndAssetCtxs", "dex": ""}, returns the latest complete snapshot, typically two to three minutes behind the exchange. Add startTime and endTime to get one snapshot per interval across the window. The Snowflake table hyperliquid.raw.perpetual_market_asset_contexts carries the same data 30 to 60 minutes later.The universe half of Hyperliquid’s response is not included, so each asset context carries coin and timestamp, and maxLeverage is folded in. impactPxs is null for now.startTime and endTime must be given together and may span at most 30 days. Without a coin filter a request may cover at most 60 snapshots, about one hour at 1m; with coin it may cover 2000. Requests over the limit are rejected with 400, never truncated.History is available from 14 January 2026. Earlier windows return an empty array.Response shape
An array of snapshots ascending bytimestamp. Each snapshot is an array of asset contexts ascending by coin, one per coin in the dex, or a single element when coin is given.
Buckets and paging
BothstartTime and endTime are rounded down to interval boundaries, so every returned snapshot is a complete bucket holding each coin’s last sample in it. The bucket in progress is never returned; for the freshest value use 1m or omit the times. A window that contains no complete bucket after rounding is rejected with 400. To page a long range, pass the previous request’s endTime as the next request’s startTime; consecutive pages tile exactly, with identical values to a single request.
HIP-3 builder markets can be addressed with "dex": "xyz" for the whole dex, or filtered with "coin": "xyz:XYZ100" or "coin": "XYZ100", "dex": "xyz". The response always uses the prefixed form, matching Hyperliquid.Authorizations
Body
Request type. Same as Hyperliquid's.
metaAndAssetCtxs Builder DEX name for HIP-3 markets, e.g. xyz. Omit or pass an empty string for core perps.
Optional filter to one market. Hyperliquid's prefixed form for HIP-3 markets, e.g. xyz:XYZ100, or the bare coin with dex set. Omit for every coin in the dex.
Window start, inclusive (Unix ms). Rounded down to the bucket boundary of the chosen interval. Omit both times for the latest snapshot.
Window end, exclusive (Unix ms). Rounded down to the bucket boundary, so only complete buckets are returned. Span at most 30 days; at most 60 snapshots without a coin filter, 2000 with one; the rounded window must contain at least one bucket.
Snapshot spacing. Each coin's last sample in the bucket is returned. Ignored when times are omitted.
1m, 5m, 15m, 1h, 4h, 1d Response
Array of snapshots ascending by timestamp; each snapshot is an array of asset contexts ascending by coin. Empty array when there is no data.
Snapshot time (Unix ms, UTC).
Coin in Hyperliquid's form, e.g. BTC, or xyz:XYZ100 for HIP-3 markets.
Rolling 24-hour notional volume.
Current funding rate.
[bid, ask] impact prices. Currently always null; not yet persisted.
Mark price.
Mid price. Null for bookless markets.
Open interest in base units.
Oracle price.
Premium of mark over oracle.
Price 24 hours earlier.
Maximum leverage for the market (from Hyperliquid's universe).
Was this page helpful?