---
title: "Get HIP-3 L4 orderbook"
method: GET
path: "/v1/hyperliquid/hip3/orderbook/{symbol}/l4"
tags: ["HIP-3 Builder Perps - L4 Order Book"]
---

# Get HIP-3 L4 orderbook

`GET /v1/hyperliquid/hip3/orderbook/{symbol}/l4`

## Request

- Base URL: `https://api.0xarchive.io`
- URL: `https://api.0xarchive.io/v1/hyperliquid/hip3/orderbook/{symbol}/l4`
- Auth: API key in header `X-API-Key`

Get the all-level L4 (individual order-level) orderbook reconstruction for a HIP-3 symbol. Shows resting orders across all served levels with price, size, and order ID. Returns the latest snapshot if no timestamp is provided. Within each price level, bids and asks are ordered by true queue priority (ALO priority insertions included), not by placement time. Depth truncation is by order count, so the orders at a depth cut can differ from responses served before 2026-07-21.

## Path parameters

- `symbol` string, required

## Query parameters

- `timestamp` union: An instant: Unix milliseconds, or an RFC 3339 string such as `2026-01-01T00:00:00Z` (encode a `+` offset as `%2B`). An unparsable value answers 400 `invalid_time_range`.
  - integer: Unix milliseconds.
  - string, date-time: RFC 3339 instant.
- `depth` integer

## Response `200`

Typed L4 orderbook snapshot

- ApiResponseL4OrderBook
  - `success` boolean, required
  - `data` L4OrderBookSnapshot, required: Current or reconstructed Hyperliquid-family L4 orderbook snapshot.
    - `coin` string, required: Trading pair or market symbol.
    - `timestamp` string, date-time, required: Snapshot timestamp in UTC.
    - `checkpoint_timestamp` string, date-time, required: Timestamp of the checkpoint used for this snapshot.
    - `diffs_applied` integer, required: Number of L4 diffs applied after the checkpoint.
    - `last_block_number` integer, required: Last Hyperliquid block represented by this snapshot.
    - `bids` L4Order[], required: Bid-side resting orders, best price first.
      - `oid` integer, required: Hyperliquid order identifier.
      - `user_address` string, required: Address attributed to the resting order.
      - `side` 'B' | 'A', required: Book side: B for bid or A for ask.
      - `price` number, required: Venue-native resting order price.
      - `size` number, required: Venue-native remaining order size.
      - `timestamp` union, required: Queue-join time: when the order joined the queue at its price. By default an integer, Unix milliseconds. `0` when unknown. With `0xArchive-Version: 2026-10-01` an RFC 3339 UTC string with millisecond precision (`null` when unknown), and the integer moves to `timestamp_ms`.
        - integer: Default: Unix milliseconds.
        - string, date-time, nullable: Version 2026-10-01: RFC 3339 UTC.
      - `timestamp_ms` integer: With `0xArchive-Version: 2026-10-01` only: `timestamp` as Unix milliseconds. `0` means unknown.
    - `asks` L4Order[], required: Ask-side resting orders, best price first.
      - `oid` integer, required: Hyperliquid order identifier.
      - `user_address` string, required: Address attributed to the resting order.
      - `side` 'B' | 'A', required: Book side: B for bid or A for ask.
      - `price` number, required: Venue-native resting order price.
      - `size` number, required: Venue-native remaining order size.
      - `timestamp` union, required: Queue-join time: when the order joined the queue at its price. By default an integer, Unix milliseconds. `0` when unknown. With `0xArchive-Version: 2026-10-01` an RFC 3339 UTC string with millisecond precision (`null` when unknown), and the integer moves to `timestamp_ms`.
        - integer: Default: Unix milliseconds.
        - string, date-time, nullable: Version 2026-10-01: RFC 3339 UTC.
      - `timestamp_ms` integer: With `0xArchive-Version: 2026-10-01` only: `timestamp` as Unix milliseconds. `0` means unknown.
    - `bid_count` integer, required: Number of bid orders in the full stored/reconstructed checkpoint before optional depth truncates returned bids/asks.
    - `ask_count` integer, required: Number of ask orders in the full stored/reconstructed checkpoint before optional depth truncates returned bids/asks.
    - `total_bid_size` number, required: Aggregate venue-native bid size in the full stored/reconstructed checkpoint before optional depth truncates returned bids/asks.
    - `total_ask_size` number, required: Aggregate venue-native ask size in the full stored/reconstructed checkpoint before optional depth truncates returned bids/asks.
    - `is_crossed` boolean: True only when a reconstructed historical book has best bid greater than or equal to best ask; omitted for clean snapshots.
  - `meta` ResponseMeta, required: Response metadata. Every 2xx JSON response carries `meta.request_id`; list payloads add `count`; cursor-paged routes add `has_more` and, when another page follows, `next_cursor`; per-symbol routes add `symbol` and `venue`. Fields that do not apply to a route are omitted.
    - `count` integer: Number of records returned
    - `has_more` boolean: Cursor-paged routes: whether another page follows. `next_cursor` is present exactly when this is `true`. A final page can be empty when the previous page was exactly full; `has_more` is `false` on it.
    - `next_cursor` string: Opaque cursor for the next page, present exactly when `has_more` is `true`. Pass it back unchanged as `cursor` with the same filters. Do not parse or construct it.
    - `request_id` string, uuid, required: Unique request ID for support
    - `symbol` string: Per-symbol routes: the canonical public symbol the response describes (for example `BTC`, `xyz:TSLA`, `HYPE-USDC`, `#0`).
    - `venue` 'hyperliquid' | 'hip3' | 'hip4' | 'spot' | 'lighter' | 'rh-lighter': Per-symbol routes: the venue the response describes.
    - `coverage_from` string, date-time: Earliest coverage for the requested symbol and data type. Present only when the requested window ends before coverage begins.
    - `notice` string: 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.
    - `finalized_through` string, date-time: Two-tier datasets (Lighter trades): data at or before this instant is final; later data is preliminary.
    - `requested_end` string, date-time, nullable: The `end` the request asked for, echoed when it was clamped to `finalized_through`.
    - `clamped_to` string, date-time, nullable: The boundary the request's `end` was clamped to, when clamping occurred.
    - `preliminary_row_count` integer, nullable: Number of preliminary rows in this response, on routes that intentionally serve preliminary data (Lighter `/recent`).

## Other responses

- `400`: Invalid request: a parameter, symbol, interval, cursor or time range failed validation. See `error_code`.
- `401`: Authentication required: the API key is missing or invalid.
- `403`: The request is outside the plan's history window or per-request span, or the key is not allowed to make it.
- `429`: Rate limit, concurrency limit or monthly credits exceeded. See `error_code`.
- `default`: Any other error. The body is an `ErrorResponse`; branch on `error_code`. A 503 (`upstream_unavailable`) carries `Retry-After`.

---

[API](https://skmtc.dev/0xarchive/apis/0xarchive-api-2.md) · [All operations](https://skmtc.dev/0xarchive/apis/0xarchive-api-2/llms.txt) · [OpenAPI document](https://skmtc.dev/0xarchive/apis/0xarchive-api-2/revisions/27076f55595f?raw)
