l4BookSnapshot | Hyperliquid Info API
curl --request POST \
--url https://hypercore.goldrushdata.com/info \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"coin": "<string>"
}
'import requests
url = "https://hypercore.goldrushdata.com/info"
payload = {
"type": "<string>",
"coin": "<string>"
}
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>', coin: '<string>'})
};
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>',
'coin' => '<string>'
]),
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 \"coin\": \"<string>\"\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 \"coin\": \"<string>\"\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 \"coin\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"coin": "<string>",
"time": 123,
"height": 123,
"epoch": "<string>",
"seq": 123,
"levels": [
[
{}
]
],
"user": "<string>",
"side": "<string>",
"limitPx": "<string>",
"sz": "<string>",
"oid": 123,
"timestamp": 123,
"triggerCondition": "<string>",
"isTrigger": true,
"triggerPx": "<string>",
"isPositionTpsl": true,
"reduceOnly": true,
"orderType": "<string>",
"tif": "<string>",
"cloid": {}
}Info API
l4BookSnapshot | Hyperliquid Info API
Hyperliquid l4BookSnapshot: fetch a full order-level (L4) order book snapshot for one coin, with height, epoch, and seq to bootstrap the l4BookUpdates stream.
POST
/
info
l4BookSnapshot | Hyperliquid Info API
curl --request POST \
--url https://hypercore.goldrushdata.com/info \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"type": "<string>",
"coin": "<string>"
}
'import requests
url = "https://hypercore.goldrushdata.com/info"
payload = {
"type": "<string>",
"coin": "<string>"
}
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>', coin: '<string>'})
};
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>',
'coin' => '<string>'
]),
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 \"coin\": \"<string>\"\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 \"coin\": \"<string>\"\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 \"coin\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"coin": "<string>",
"time": 123,
"height": 123,
"epoch": "<string>",
"seq": 123,
"levels": [
[
{}
]
],
"user": "<string>",
"side": "<string>",
"limitPx": "<string>",
"sz": "<string>",
"oid": 123,
"timestamp": 123,
"triggerCondition": "<string>",
"isTrigger": true,
"triggerPx": "<string>",
"isPositionTpsl": true,
"reduceOnly": true,
"orderType": "<string>",
"tif": "<string>",
"cloid": {}
}Credit Cost
1 per call
Processing
Realtime
type: "l4BookSnapshot" is used to fetch a full order-level (L4) order book snapshot for one coin - every resting order, not aggregated price levels - carrying the height, epoch, and per-coin seq needed to bootstrap and align the l4BookUpdates diff stream.
- GoldRush-native.
l4BookSnapshotis not aPOST api.hyperliquid.xyz/infomethod - it is served only by the GoldRush endpoint. - Bootstrap for
l4BookUpdates. That WebSocket stream is diff-only; this endpoint provides the initial order-level book to seed from, plus theheight/epoch/seqto align the diffs onto it. - Order-level. Unlike the aggregated
l2BookDiffSnapshot, each entry is an individual order (user,oid,side,sz,tif, trigger metadata), enabling queue-position reconstruction and per-trader flow attribution. - Perps only. No spot or prediction-market assets.
- The snapshot already reflects every diff up to and including its own
height(it is taken after that block is applied), so discard any diff at or below it.
coin - two arrays of individual orders (bids first, then asks, each in queue order at its price) - together with the height, epoch, and per-coin seq that tie the snapshot to the l4BookUpdates stream.
Endpoint
POST https://hypercore.goldrushdata.com/info
Authorization: Bearer <GOLDRUSH_API_KEY>
Content-Type: application/json
Request
string
default:"l4BookSnapshot"
required
Always
"l4BookSnapshot".string
required
The perp asset symbol, e.g.
"BTC". For HIP-3 markets use the deployer-prefixed form.Example
curl -X POST https://hypercore.goldrushdata.com/info \
-H "Authorization: Bearer $GOLDRUSH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "l4BookSnapshot",
"coin": "BTC"
}'
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: "l4BookSnapshot",
coin: "BTC",
}),
});
const snap = await response.json();
const { height, epoch, seq } = snap;
const [bids, asks] = snap.levels;
import os, requests
response = requests.post(
"https://hypercore.goldrushdata.com/info",
headers={"Authorization": f"Bearer {os.environ['GOLDRUSH_API_KEY']}"},
json={"type": "l4BookSnapshot", "coin": "BTC"},
)
snap = response.json()
height, epoch, seq = snap["height"], snap["epoch"], snap["seq"]
bids, asks = snap["levels"]
Response
A single JSON object.levels is a two-element array: element 0 is the bid side, element 1 is the ask side. Each entry is an individual order (not an aggregated level), in queue order at its price.
{
"coin": "BTC",
"time": 1778865761968,
"height": 997719816,
"epoch": "466bf60f-bb7a-4591-89a3-a2660234fef5",
"seq": 4229977,
"levels": [
[
{
"user": "0xa62b923a112d50d03e1e096bbd53422490dac104",
"coin": "BTC",
"side": "B",
"limitPx": "79242",
"sz": "0.74831",
"oid": 427632406005,
"timestamp": 1778865761305,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"tif": "Alo",
"cloid": "0x00000000000000000000019e2c8b7d66"
}
],
[
{
"user": "0xfcf104006bfff47695c1dc21dad3e9de1e72098e",
"coin": "BTC",
"side": "A",
"limitPx": "79250",
"sz": "0.2961",
"oid": 427632406032,
"timestamp": 1778865761305,
"triggerCondition": "N/A",
"isTrigger": false,
"triggerPx": "0.0",
"isPositionTpsl": false,
"reduceOnly": false,
"orderType": "Limit",
"tif": "Gtc",
"cloid": null
}
]
]
}
Field descriptions
limitPx, sz, and triggerPx are returned as decimal strings, preserving upstream precision. Do not parse them as floats.string
The asset the book is for - echoes the request
coin.int
Snapshot timestamp in milliseconds since Unix epoch.
int
HyperCore block height the snapshot was taken at. Discard any
l4BookUpdates batch whose block_height is ≤ this value.string
Server generation (UUID). Must match the
epoch on the l4BookUpdates batches you apply; a different epoch means the stream reset and you should re-fetch.int
The per-coin sequence this snapshot is aligned to. The first
l4BookUpdates entry you apply for this coin should have prev_seq == seq.array<array<Order>>
Two-element array:
levels[0] are bids, levels[1] are asks. Each side is an array of individual Order objects (see below), in queue order at their respective price.Order object
string
Wallet address that owns the order.
string
Asset symbol.
string
"B" for bid, "A" for ask.string
Limit price (decimal string).
string
Resting size (decimal string, base units).
int
Hyperliquid order id - stable for the lifetime of the order.
int
Order-placement timestamp in HyperCore milliseconds.
string
Trigger condition string (e.g.
"N/A" for plain limit orders).boolean
True if this is a stop / take-profit trigger order.
string
Trigger price (decimal string,
"0.0" for non-trigger orders).boolean
True if this is a position-level TP/SL.
boolean
True if the order is flagged reduce-only.
string
Hyperliquid order type (e.g.
"Limit").string
Time-in-force (e.g.
"Alo", "Gtc", "Ioc").string | null
Client-supplied order id (hex string), or
null if none was provided.Bootstrapping the l4BookUpdates stream
Use this snapshot to seed a local order-level book, then keep it current with thel4BookUpdates WebSocket stream:
- Subscribe to
l4BookUpdatesfor your coin(s) and start bufferingUpdates. - Fetch this snapshot; note
height,epoch, andseq. - Drop any buffered batch whose
block_height≤height. - Confirm each remaining batch’s
epochequals this snapshot’sepoch(else re-fetch). - Apply diffs in order - the first for the coin has
prev_seq == seq. Insert (new), resize (update), or delete (remove) each order byoid. - Keep checking per-coin
prev_seqcontinuity; on a gap orepochchange, re-fetch and re-bootstrap.
Related endpoints
l4BookUpdates
subscribe to a strictly-ordered, diff-only order-level (L4) book stream with per-coin sequence numbers and a server epoch for gap detection.
l4Book
subscribe to GoldRush’s order-level Hyperliquid book - initial snapshot of every resting order plus per-block diffs with full metadata.
l2BookDiffSnapshot
fetch a full-depth L2 order book snapshot for one coin, with height, epoch, and seq to bootstrap the l2BookDiff2 stream.