# Publishing goes out. Webhooks come back.

Clients subscribe and disconnect without ever reaching your backend, which means your backend has no idea anyone is listening. Webhooks close that loop: the edge posts a signed event when a channel fills or empties, when a member arrives or leaves, and when a cache channel has nothing to serve.

## Stop paying for an audience of nobody.

This is the cheapest optimization in Bird Realtime. A channel-occupied event is the signal to start the expensive job, the market-data subscription, the per-second publish loop; channel-vacated is the signal to stop it. Nothing fires for the subscribers arriving and leaving in between, so the two events mark exactly the edges of a channel's life and nothing else.

## What people build with them

Four patterns that need a server to know what the clients are doing.

## Signed like every other Bird webhook.

Deliveries follow Standard Webhooks, with webhook-id, webhook-timestamp, and webhook-signature headers you verify against the endpoint's signing secret. The SDK unwraps and verifies in one call. Verify the raw body rather than a reparsed copy, since re-serializing JSON can change the signed bytes, and keep a default branch so a new event type cannot break the route.

## The delivery guarantees, stated plainly.

Treat these as change notifications rather than a ledger. A non-2xx response is retried with exponential backoff for up to five minutes, after which the event is gone: Realtime events have no replay and do not appear in the endpoint's delivery-attempts log. Deliveries are unordered and carry no per-event receipt, so after a delayed or missing one, read current state from the channel-state API rather than reconstructing it. Return 2xx as soon as you have durably accepted the event and do the work afterwards.

## Configured in the dashboard.

Realtime subscriptions are set up on the Webhooks page: create or edit an endpoint, pick one Realtime app, and select the groups. The app cannot be changed afterwards, though the groups can. This is the one part of the platform's webhook surface that is dashboard-only today, and a public API request that includes a realtime event type is rejected rather than silently accepted.

## Go deeper in the docs.

Realtime webhooks lists every delivered type and its data fields. Client events covers the group you name yourself, cache channels explains what to do with a miss, and webhooks and events is the platform-wide contract for endpoints, signatures, and secret rotation.

## Find out when somebody starts listening.

Point one endpoint at Realtime and the rest of the platform. Same envelope, same signing secret, same verification call.