Error messages

Match on the prefix before the first colon. Cinderous relays also put a second word — a token such as quota or ceiling — after the prefix (blocked: quota: …); prefix and token are stable, the text after them is a human-readable explanation and may change.

Refused connections

The relay accepts the WebSocket, sends one NOTICE, and closes with code 1008. The close reason also carries the documentation link, because browsers do not expose the HTTP status of a failed handshake.

NOTICE starts withCauseFix
unknown relay pathThe path is not /app/<id> or a Cinderous pathConnect to wss://<relay>/app/<your-app-id>
invalid app laneThe id breaks the formatUse 1–64 characters of a-z 0-9 . _ -
rate-limited: too many new connectionsMore than 30 new lane connections per minute from your IPBack off before reconnecting
rate-limited: (during a session)More than 240 messages per minute on one connectionStop re-opening subscriptions in a loop

Subscriptions (CLOSED)

PrefixCause
restricted: scope:A filter has no scope, or uses #p for someone else, or uses #p without AUTH — see Subscriptions
rate-limited: subscriptions:More than 16 open subscriptions on the connection
error: resubscribe:The relay restarted and lost the subscription — send the same REQ again
invalid: too-large:The subscriptions on this connection exceed 512 KiB — use fewer or smaller filters

Events (OK false)

PrefixCause
invalid:Bad signature (bad-signature), created_at outside the accepted window (clock-skew), or the event's own expiration has passed (expired)
duplicate:Sent with OK true: the relay already has this event (same id within the last hour). Treat it as accepted
blocked:Too many tags (too-many-tags), too many p tags (too-many-recipients), too large (too-large); for addressable events: older than the stored one (stale), over your per-author quota (quota), or the relay's storage is full (ceiling — try another relay or later)
rate-limited: events:More than 120 events per minute for this key
pow: difficulty:Not enough proof of work (only if it is enabled)
auth-failed:The AUTH event was invalid, expired, or named a different relay