Docs/Reference
Limits & Error Codes
System resource limits, edge rate limits, quotas, and protocol error codes reference.
Connection & Subscription Limits
| Resource | Value | Behavior When Exceeded |
|---|---|---|
| Channels per Connection | 50 channels | Subscription rejected with wire error 4300. Socket remains open. |
| Channels per App | 5000 channels | New subscriptions rejected with wire error 4300. Resubscribes still succeed. |
| Heartbeat Interval | 120 seconds | Client sends pusher:ping when idle; server responds with pusher:pong. |
| Hibernation State Size | 16 KiB | Max state storage per hibernating socket. Closes with 4200 if exceeded. |
Edge Rate Limiters
Rate limiting is enforced at Cloudflare Anycast edge locations:
| Limiter | Threshold | Action When Exceeded |
|---|---|---|
| New Connection Limiter | 500 handshakes / 10s per team | HTTP 429 Too Many Requests |
| Channel Subscribe Limiter | 20 subscriptions / 10s per socket | Wire event pusher:error (4301) |
| Client Event Limiter | 50 client events / 10s per socket, 1000 / 10s per app | Wire event pusher:error (4301) |
Concurrency Quotas (Socketo Cloud)
| Plan | Concurrent Sockets | Action When Exceeded |
|---|---|---|
| Tier 1 | 1,000 | WebSocket close code 4004 (Over quota) |
| Tier 2 | 3,000 | WebSocket close code 4004 (Over quota) |
| Tier 3 | 5,000 | WebSocket close code 4004 (Over quota) |
Broadcast Billing (Socketo Cloud)
| Plan | Monthly Fee | Included Broadcasts / Month | Overage |
|---|---|---|---|
| Tier 1 | $9 | 2M | $1 per additional million |
| Tier 2 | $20 | 12M | $1 per additional million |
| Tier 3 | $36 | 30M | $1 per additional million |
One event counts as one broadcast, no matter how many subscribers receive it. Subscriber fan-out is never billed separately.
Presence Channel Limits
| Resource | Maximum Threshold | Action When Exceeded |
|---|---|---|
| Members per Presence Channel | 100 unique user IDs | Subscription rejected with 4300 |
| Presence User ID Length | 128 characters | Subscription rejected with 4300 |
| Presence User Object Size | 1 KiB (1,024 bytes) | Subscription rejected with 4300 |
Payload & Request Limits
- Event Payload Size: Maximum 10 KiB (10,240 bytes) per event payload.
- Batch Event Size: Maximum 10 events per
POST /apps/:id/batch_eventsrequest. - Target Channels: Maximum 100 channels targeted in a single trigger request.
Protocol Feature Support Matrix
| Feature | Support Status | Specification Reference |
|---|---|---|
| Public Channels | Supported | Pusher Protocol v7 |
| Private Channels | Supported | HMAC-SHA256 authorization |
| Presence Channels | Supported | Roster awareness (max 100 members) |
Client Events (client-*) | Supported | Private & presence channels |
User Sign-in (pusher:signin) | Supported | Connection-level identity #server-to-user-<id> |
Direct User Events (sendToUser) | Supported | Dispatched to pusher.user.bind() |
| Outbound Webhooks | Supported | Occupancy, presence, and client events |
Encrypted Channels (private-encrypted-*) | Unsupported | End-to-end TweetNaCl encryption not implemented |
Cache Channels (cache-*) | Unsupported | Message caching on channel join not implemented |
Watchlist Events (pusher:watchlist) | Unsupported | User status monitoring outside channels not implemented |
Error Codes Reference
HTTP Status Codes
| Code | Meaning |
|---|---|
400 Bad Request | Malformed JSON payload or missing WebSocket upgrade headers. |
401 Unauthorized | Invalid HMAC signature or timestamp expired (> 600s). |
403 Forbidden | Application is disabled or suspended. |
404 Not Found | Application ID not found or non-existent endpoint. |
429 Too Many Requests | Edge rate limit threshold reached. |
WebSocket Close Codes
| Code | Reason |
|---|---|
4000 | Application requires SSL / TLS connection. |
4001 | Application key not found. |
4003 | Application is suspended or disabled. |
4004 | Application has exceeded concurrent connection quota. |
4006 | Invalid protocol version string format. |
4007 | Unsupported protocol version (expected 7). |
4008 | No protocol version supplied in handshake query string. |
4009 | Connection unauthorized. |
4100 | Server over capacity; reconnect with exponential backoff. |
4200 | Reconnect immediately (also produced when user connection is terminated). |
4201 | Pong heartbeat not received within activity timeout. |
4202 | Closed after prolonged inactivity. |
Wire Error Events (pusher:error)
| Code | Meaning |
|---|---|
4009 | Channel authorization signature failed verification. |
4300 | Channel limit reached (presence roster full, channel name invalid, or payload exceeded). |
4301 | Socket rate limit exceeded (event flood or subscription flood). |