# WebSocket limits

> What the Hyperliquid WebSocket feed allows: 1000 levels of depth per side, no cap on connections, subscriptions or message rate. One flat tier, no metering.

<Note>
**One flat tier, and it is not metered.** There are no per-message, per-market or per-connection charges to plan around: you subscribe to what you need and the bill does not move. A tiered plan ladder is **in build** for teams that want a smaller entry point.
</Note>

## What the feed allows

| | |
|---|---|
| Depth per side, `nLevels` | **1000** maximum, 20 by default |
| Subscriptions per connection | not capped — 300 on one connection runs clean |
| Concurrent connections per key | not capped — 20 in parallel runs clean |
| Markets per key | not capped |
| Message rate | not capped — a frame on every book change |
| Idle timeout | none — a connection with no subscriptions stays open |

In practice there is no ceiling you will meet in normal use. Subscribe to every market on the network on one connection if that is what your product needs.

## Depth above 1000

`nLevels` accepts values up to 1000 and returns exactly what you ask for. 1000 is the ceiling: above it the subscription is acknowledged but carries no data, so do not request more.

For context, the public Hyperliquid API stops at 20 levels, and providers running the same order-book software stop at 100.

## Keeping a connection alive

The server does not ping you, and it does not close a connection for being idle. To detect a dead link from your side, use either standard WebSocket ping frames or the application ping:

```json
{ "method": "ping" }
```

The server answers `{"channel":"pong"}`.

## After a disconnect

Subscriptions do not survive a reconnect. Open the connection, authenticate, and send your subscribe messages again. If you were tracking the book through [`l2Diff`](https://supanode.xyz/docs/hyperliquid/websocket/whats-available#l2diff), discard your copy and start from the snapshot that arrives on the new connection.

## Bandwidth

Depth costs bytes: a 1000-level book is a large frame on every block. If you need that depth continuously, use `l2Diff` rather than `l2Book` — the incremental stream carries the same book for a fraction of the traffic.

## See also

- [Streams](https://supanode.xyz/docs/hyperliquid/websocket/whats-available) — what each subscription carries.
- [Pricing](https://supanode.xyz/docs/hyperliquid/pricing) — the flat monthly rate and the free trial.
