curl --request GET \
--url https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"success": true,
"data": [
{
"symbol": "BTC",
"coin": "BTC",
"timestamp": "2025-01-21T10:30:45.123Z",
"bids": [
{
"px": "42150.00",
"sz": "1.5",
"n": 15
}
],
"asks": [
{
"px": "42150.00",
"sz": "1.5",
"n": 15
}
],
"mid_price": "42150.50",
"spread": "1.00",
"spread_bps": "2.37",
"bid_levels": 9842,
"ask_levels": 10318,
"total_bid_size": 10234.56,
"total_ask_size": 9876.54
}
],
"meta": {
"count": 123,
"next_cursor": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"coverage_from": "2023-11-07T05:31:56Z",
"notice": "<string>",
"has_more": true,
"symbol": "<string>",
"venue": "<string>"
}
}{
"code": 400,
"error": "Failed to deserialize query string: limit: invalid digit found in string",
"error_code": "invalid_query_params",
"param": "limit",
"request_id": "3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05",
"success": false
}{
"code": 401,
"error": "Missing authentication credentials. Provide X-API-Key header or Bearer token.",
"error_code": "unauthorized",
"request_id": "71ed4b6f-63ef-4ae1-a123-07ffa47c1c14",
"success": false
}{
"code": 404,
"error": "No L4 checkpoint available before requested timestamp",
"error_code": "not_found",
"request_id": "ad7df471-eb8a-477c-bd9f-c685a9825f5b",
"success": false
}{
"code": 429,
"error": "Rate limit exceeded"
}Get HIP-3 full-depth L2 order book history
0xArchive API reference for Get HIP-3 full-depth L2 order book history. Includes route metadata, schemas, examples, and implementation notes.
curl --request GET \
--url https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l2/history"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"success": true,
"data": [
{
"symbol": "BTC",
"coin": "BTC",
"timestamp": "2025-01-21T10:30:45.123Z",
"bids": [
{
"px": "42150.00",
"sz": "1.5",
"n": 15
}
],
"asks": [
{
"px": "42150.00",
"sz": "1.5",
"n": 15
}
],
"mid_price": "42150.50",
"spread": "1.00",
"spread_bps": "2.37",
"bid_levels": 9842,
"ask_levels": 10318,
"total_bid_size": 10234.56,
"total_ask_size": 9876.54
}
],
"meta": {
"count": 123,
"next_cursor": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"coverage_from": "2023-11-07T05:31:56Z",
"notice": "<string>",
"has_more": true,
"symbol": "<string>",
"venue": "<string>"
}
}{
"code": 400,
"error": "Failed to deserialize query string: limit: invalid digit found in string",
"error_code": "invalid_query_params",
"param": "limit",
"request_id": "3f2a9c71-5b0e-4d68-9a4c-7e1d2b6f8a05",
"success": false
}{
"code": 401,
"error": "Missing authentication credentials. Provide X-API-Key header or Bearer token.",
"error_code": "unauthorized",
"request_id": "71ed4b6f-63ef-4ae1-a123-07ffa47c1c14",
"success": false
}{
"code": 404,
"error": "No L4 checkpoint available before requested timestamp",
"error_code": "not_found",
"request_id": "ad7df471-eb8a-477c-bd9f-c685a9825f5b",
"success": false
}{
"code": 429,
"error": "Rate limit exceeded"
}X-API-Key with this request. See REST authentication.Shared request rules
Shared request rules
Machine schema
Machine schema
Authorizations
API key for authentication. Get yours at https://0xarchive.io/dashboard
Path Parameters
HIP-3 symbol (case-sensitive, e.g., hyna:BTC, km:US500)
"km:US500"
Query Parameters
Start timestamp in Unix milliseconds. Defaults to 24h ago.
1767225600000
End timestamp in Unix milliseconds. Defaults to now.
1767229200000
Cursor for pagination (timestamp from previous response's next_cursor)
Maximum number of checkpoint snapshots (default: 100, max: 1000)
x <= 1000Response
Full-depth L2 checkpoint snapshots
true
Hide child attributes
Hide child attributes
Trading pair symbol
"BTC"
Trading pair symbol (deprecated, use symbol instead)
"BTC"
Snapshot timestamp (UTC)
"2025-01-21T10:30:45.123Z"
Mid price (best bid + best ask) / 2
"42150.50"
Spread in absolute terms (best ask - best bid)
"1.00"
Spread in basis points
"2.37"
Total bid price levels available before any depth truncation
9842
Total ask price levels available before any depth truncation
10318
Aggregate bid size across the available full-depth L2 book
10234.56
Aggregate ask size across the available full-depth L2 book
9876.54
Response metadata
Hide child attributes
Hide child attributes
Number of records returned
Cursor for pagination (timestamp). Use this value as the cursor parameter to fetch the next page of results.
Unique request ID for support
Earliest coverage for the requested symbol and data type. Present only when the requested window ends before coverage begins.
Human-readable advisory about the response. Used when the requested window ends before coverage begins for the symbol, and on CVD responses that are one page of several; may carry other advisories in future.
Present on cursor-paged routes: true when another page exists. next_cursor is present exactly when it is true.
Present on per-symbol routes: the symbol the response covers.
Present on per-symbol routes: the venue the response covers, for example hyperliquid or hip3.
Was this page helpful?