# What's available

> Supported WebSocket subscriptions, authentication, and protocol patterns.

Supanode implements the standard Solana WebSocket subscription protocol. For the full reference, see the [official Solana WebSocket docs](https://solana.com/docs/rpc/websocket).

## Supported subscriptions

| Subscription | What it streams | Notes |
|---|---|---|
| `accountSubscribe` | Updates to a specific account | One subscription per account |
| `signatureSubscribe` | Notification when a signature commits | One-shot - fires once and unsubscribes |
| `slotSubscribe` | Every new slot | Lightweight |
| `rootSubscribe` | New roots (finalized slots) | Lightweight |
| `programSubscribe` | Account updates owned by a program | **Requires `dataSize` or `memcmp` filter** - see [Restrictions](https://supanode.xyz/docs/solana/websocket/restrictions) |
| `logsSubscribe` | Transaction logs matching a filter | Mention-filter only on shared. `logsSubscribe("all")` is blocked - see [Restrictions](https://supanode.xyz/docs/solana/websocket/restrictions) |

## Authentication

WebSocket uses the same Bundle [IP allowlist](https://supanode.xyz/docs/solana/authentication#bundle-ip-allowlist) as RPC and gRPC. Connect from a whitelisted IP - no tokens, no query params.

```
ws://fra.supanode.xyz:8900
```

## Subscribe / unsubscribe protocol

Subscriptions follow the standard JSON-RPC over WebSocket pattern.

**Subscribe:**

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "accountSubscribe",
  "params": ["YOUR_ACCOUNT_PUBKEY", {"commitment": "confirmed"}]
}
```

The server responds with a numeric subscription ID. Updates stream as notifications until you unsubscribe.

**Unsubscribe:**

```json
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "accountUnsubscribe",
  "params": [SUBSCRIPTION_ID]
}
```

Both `subscribe` and `unsubscribe` calls count against your RPS budget - this is intentional anti-abuse. The connection itself is admitted by IP allowlist; in-flight subscribe/unsubscribe RPCs go through the standard RPS budget.

## Commitment levels

Most subscriptions accept a `commitment` parameter (`processed`, `confirmed`, `finalized`). Defaults to `finalized` if omitted.

## External references

- [Solana WebSocket API methods](https://solana.com/docs/rpc/websocket)

## Next steps

<CardGroup cols={3}>
  <Card title="Limits" icon="gauge" href="https://supanode.xyz/docs/solana/websocket/limits">Connection caps and subs.</Card>
  <Card title="Restrictions" icon="ban" href="https://supanode.xyz/docs/solana/websocket/restrictions">Blocked subscriptions.</Card>
  <Card title="Examples" icon="code" href="https://supanode.xyz/docs/solana/websocket/examples">Working code.</Card>
</CardGroup>
