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

# Authentication

> API keys, tiers, and error handling

## API keys

All WebSocket connections require an API key passed as a query parameter:

```
wss://hyper.polynode.dev/ws?key=pn_live_your_key_here
```

**hypernode uses the same API keys as polynode.** If you already have a polynode account on the Growth plan (\$200/mo) or above, your existing `pn_live_` key works on hypernode automatically.

**Get a key:**

* [Sign up at polynode.dev](https://polynode.dev) to create an account and get an API key
* Free tier gets 1 connection and 1 subscription on both polynode and hypernode
* Growth (\$200/mo) and above gets full access to both platforms

## Tiers

| Tier       | Price    | Max Connections | Max Subscriptions |
| ---------- | -------- | --------------- | ----------------- |
| free       | \$0      | 1               | 1                 |
| starter    | \$50/mo  | 5               | 50                |
| growth     | \$200/mo | 10              | 500               |
| pro        | —        | 150             | 5,000             |
| enterprise | \$750/mo | 500             | 100,000           |

## Error responses

Errors are returned as HTTP responses during the WebSocket handshake.

| Status | Body                                                 | Meaning                            |
| ------ | ---------------------------------------------------- | ---------------------------------- |
| 401    | `{"error":"missing API key — use ?key=pn_live_..."}` | No `key` query parameter           |
| 401    | `{"error":"invalid API key"}`                        | Key not found                      |
| 403    | `{"error":"API key is disabled"}`                    | Key exists but disabled            |
| 429    | `{"error":"connection limit reached for this key"}`  | Too many connections for your tier |

## Subscription limits

Exceeding your tier's subscription limit returns an error over the WebSocket:

```json theme={null}
{"error": "subscription limit reached for free tier (max 1)"}
```
