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

# Parsed Streams Reference

> API reference for Parsed Streams JSON-RPC methods over WebSocket. Subscribe to decoded Solana transactions with server-side filtering.

<Note>
  Parsed Streams is in **closed beta**. Access is limited to whitelisted project ids for now, and the API may change before general availability. To join the closed beta, [apply here](https://form.typeform.com/to/BlFWKbC9).
</Note>

Parsed Streams uses **JSON-RPC 2.0** over a single WebSocket connection. Each request receives a response with the same `id`. A subscription then pushes `parsedTransactionNotification` messages until you unsubscribe or disconnect.

| Method                         | Purpose                                                  |
| ------------------------------ | -------------------------------------------------------- |
| `parsedTransactionSubscribe`   | Start a subscription with a filter                       |
| `parsedTransactionUnsubscribe` | Stop a subscription                                      |
| `ping`                         | Liveness check; returns the current slot                 |
| `describeProgram`              | List a program's instructions, events, and account roles |

<CardGroup cols={2}>
  <Card title="parsedTransactionSubscribe" href="/docs/api-reference/parsed-streams/parsedtransactionsubscribe">
    Subscribe to decoded transactions matching a program, account, and instruction filter.
  </Card>

  <Card title="parsedTransactionUnsubscribe" href="/docs/api-reference/parsed-streams/parsedtransactionunsubscribe">
    Stop a subscription by its id.
  </Card>

  <Card title="ping" href="/docs/api-reference/parsed-streams/ping">
    Check liveness and keep a quiet connection alive.
  </Card>

  <Card title="describeProgram" href="/docs/api-reference/parsed-streams/describeprogram">
    Discover the exact instruction and role names the matcher compares against.
  </Card>
</CardGroup>

## Connection

The Helius team whitelists your project id and shares the connection endpoint with you. Authenticate with your project's API key, passed as the `api-key` query parameter (or the `x-api-key` header):

```bash wscat theme={"system"}
wscat -c "wss://<ENDPOINT>/?api-key=YOUR_API_KEY"
```

A missing, invalid, or non-whitelisted key is rejected with HTTP 401. A project at its connection cap gets HTTP 429.

## Limits

| Limit                              | Value                                             |
| ---------------------------------- | ------------------------------------------------- |
| Concurrent connections per project | 100                                               |
| Subscriptions per connection       | 25                                                |
| Client messages                    | 10 per second, burst of 20                        |
| Client message size                | 64 KiB                                            |
| `programs` per filter              | 10                                                |
| `instructionNames` per filter      | 50, each up to 64 chars                           |
| `accounts.include` per filter      | 100                                               |
| `accounts.roles` per filter        | 20, each name up to 64 chars                      |
| Outbound buffer per connection     | 2048 notifications, then the connection is closed |

## Errors

Errors follow JSON-RPC 2.0: `{ "error": { "code": <int>, "message": "<text>" }, "id": <id> }`. Messages say exactly what was wrong and where.

| Code     | Meaning                                                                            |
| -------- | ---------------------------------------------------------------------------------- |
| `-32700` | Parse error (invalid JSON)                                                         |
| `-32600` | Invalid request                                                                    |
| `-32601` | Method not found                                                                   |
| `-32602` | Invalid params: bad pubkey, unknown field, unsupported commitment or details value |
| `-32000` | Filter limit exceeded                                                              |
| `-32001` | Server not ready; retry with backoff                                               |
| `-32002` | Rate limited (10 messages per second)                                              |
| `-32006` | Too many subscriptions (25 per connection)                                         |

Connections can also close with a WebSocket close code — see [Handling Reconnects](/docs/parsed-streams/guides/handling-reconnects) for what each one means and how to recover.

## Learn more

<CardGroup cols={2}>
  <Card title="Parsed Streams Overview" href="/docs/parsed-streams">
    What Parsed Streams is and the mental model behind filters.
  </Card>

  <Card title="Quickstart" href="/docs/parsed-streams/quickstart">
    Connect, send your first filter, and read a decoded notification.
  </Card>

  <Card title="Parsed Events Reference" href="/docs/api-reference/parsed-events/overview">
    Query the same decoded transactions on demand through REST or GraphQL.
  </Card>

  <Card title="Handling Reconnects" href="/docs/parsed-streams/guides/handling-reconnects">
    Survive idle timeouts and deploys, then backfill exactly what you missed.
  </Card>
</CardGroup>
