> ## Documentation Index
> Fetch the complete documentation index at: https://docs.0xarchive.io/llms.txt
> Use this file to discover all available pages before exploring further.

# L3 order book

> L3 order-level depth on Lighter: up to 250 resting orders per side with order index, owner account index, price, and remaining size.

L3 is the order-level book on Lighter: up to 250 resting orders per side shown individually, each with its order index, owner account index, price, and remaining size, rather than the aggregated price levels of [L2](/rest-api/order-books-l2).

Lighter exposes individual orders where Hyperliquid families expose [L4](/rest-api/order-books-l4). The two are different reconstructions, so a Lighter L3 route is not interchangeable with a Hyperliquid L4 route. L3 answers queue position, per-order size, and order-level microstructure on Lighter; [L2](/rest-api/order-books-l2) is enough when aggregated levels answer the question.

## Get an L3 snapshot

L3 is served only on Lighter. Find symbols on `/v1/lighter/instruments`.

```bash theme={"theme":"github-dark"}
curl "https://api.0xarchive.io/v1/lighter/l3orderbook/BTC?depth=50" \
  -H "X-API-Key: $OXARCHIVE_API_KEY"
```

| Job | Route |
| - | - |
| L3 individual-order snapshot | `/v1/lighter/l3orderbook/{symbol}` |
| L3 order-level history | `/v1/lighter/l3orderbook/{symbol}/history` |

For aggregated price-level depth on Lighter, use the L2 routes (`/v1/lighter/orderbook/{symbol}` and `/history`) covered on [L2 order book](/rest-api/order-books-l2). L3 is order-level; L2 is the levels those orders aggregate into.

## Request parameters

| Parameter | Description |
| - | - |
| `symbol` | Path, required, string. Lighter market symbol, e.g. `BTC` |
| `timestamp` | Query, optional, integer (ms) or string. Snapshot route only. Unix milliseconds or RFC 3339; omit for the latest snapshot. |
| `account` | Query, optional, integer. Numeric Lighter account-index filter on snapshot and history routes. This is not a wallet-address filter. |
| `depth` | Query, optional, integer. Snapshot route only. Maximum resting orders returned per side; values are clamped to 1–250. |
| `start`, `end` | Query, optional, integer (ms) or string. History route window. `start` defaults to 24 hours before the request and `end` defaults to now |
| `cursor` | Query, optional, integer (ms). History continuation timestamp from `meta.next_cursor`; pass it unchanged. |
| `limit` | Query, optional, integer. History snapshots per page. Default 100, maximum 1000. |
| `granularity` | Query, optional, string. History resolution: `checkpoint` (default), `30s`, `10s`, `1s`, or `tick`. |

The snapshot route returns one book object in `data`. The history route returns an array of snapshot objects in `data`; L3 data begins March 5, 2026, and each snapshot can contain up to 250 resting orders per side. The `account` filter uses numeric Lighter account indexes, not wallet addresses.

Begin with one bounded `start`/`end` window, paginate with `cursor`, and store `meta.request_id` per page. Check a long window with [Data quality](/data-quality) before relying on it.

## Example response

The L3 snapshot returns the `{ success, data, meta }` envelope. `data` is a single book object, not an array. Each entry under `data.orders` is one resting order:

```json theme={"theme":"github-dark"}
{
  "success": true,
  "data": {
    "coin": "BTC",
    "timestamp": "2026-07-27T23:01:16.494Z",
    "orders": [
      { "order_index": 844421846010207, "owner_account_index": 7684, "side": "bid", "price": 63673.5, "remaining_size": 0.07062, "original_size": 0.07062 },
      { "order_index": 562952990718291, "owner_account_index": 636906, "side": "ask", "price": 63731.0, "remaining_size": 0.18583, "original_size": 0.18583 }
    ],
    "bid_count": 250,
    "ask_count": 250,
    "total_bid_size": 194.10444,
    "total_ask_size": 280.77198,
    "mid_price": "63698.9",
    "spread": "8.4",
    "spread_bps": "1.3187",
    "truncated": true
  },
  "meta": { "count": 1, "request_id": "b82ca0d1-0665-4205-8dbc-94d96590dd64" }
}
```

Per-order fields include `order_index` and `owner_account_index` as numeric Lighter indexes, `side` as the string `bid` or `ask`, and `price`, `remaining_size`, and `original_size` as JSON numbers. These are Lighter indexes, not a wallet address or raw order ID; do not treat them like the `user_address` wallet field on Hyperliquid L4. Alongside `orders`, the book object carries `bid_count`, `ask_count`, `total_bid_size`, `total_ask_size`, `mid_price`, `spread`, and `spread_bps`.

Before binding typed models, capture a live response and pin the `order_index`, `owner_account_index`, `price`, and size fields you depend on. The [Reference](/reference) carries the route metadata, and full field meanings live in the [field dictionary](/responses#field-dictionary).

## Access

Each venue's start date, WebSocket channels, and page limit come from [`GET /v1/capabilities`](/capabilities), followed by the SDK, CLI, and MCP names for the same data. The start date is the first served row on that venue; exact starts vary by market, so check `/v1/symbols` for a single symbol. Send `0xArchive-Version: 2026-10-01` for the current response contract; see [API conventions](/conventions).

| Venue | Availability |
| - | - |
| Lighter | From 2026-03-05 03:33 UTC<br />WebSocket `lighter_l3_orderbook`: replay only<br />Up to 1,000 rows a page |

| Surface | Names |
| - | - |
| Python SDK | `client.lighter.l3_orderbook.get(symbol)`, `.history(...)` |
| TypeScript SDK | `client.lighter.l3Orderbook.get(symbol)`, `.history(...)` |
| Rust SDK | `client.lighter.l3_orderbook.get`, `.history` |
| CLI | `oxa l3 get`, `oxa l3 history` |
| MCP tools | `get_lighter_l3_orderbook`, `get_lighter_l3_orderbook_history` |

## Replay it over WebSocket

Lighter current L3 snapshots use REST, while `lighter_l3_orderbook` supports historical WebSocket replay but not live subscriptions through the 0xArchive WebSocket. Historical data is also available through REST and exports. For live Lighter L2 depth, subscribe to `lighter_orderbook`; see [Lighter WebSocket channels](/websocket/lighter).

```javascript theme={"theme":"github-dark"}
ws.send(JSON.stringify({
  op: "replay",
  channel: "lighter_l3_orderbook",
  symbol: "BTC",
  start: 1785193200000,
  end: 1785196800000,
  speed: 10
}));
```

This example window is from July 2026, so it needs a paid plan; Free replays reach the most recent 30 days. The full channel matrix is on [WebSocket channels](/websocket/channels).

## Export in bulk

L3 books export as the `l3_orderbook` schema (`$3/GB`, `$5 minimum`), delivered as Parquet with ZSTD compression. Keep L2, L3, and L4 in separate tables. Build a selection in the [Data Catalog](/data-catalog); columns and coverage keys are on [Export schemas](/export-schemas).

## Next step

For the rest of Lighter's routes, continue to [Lighter REST API](/rest-api/lighter).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.