# Realtime channels · Public, private, presence, cached

## The prefix is the configuration.

## There is no channel registry to keep in step.

Channels are the addressing model of the [Bird Realtime API](/realtime-api). You never create one: you subscribe to a name, and the first three characters of that name tell the edge how to treat it. A name with no prefix is public. private- asks your backend to approve each subscription. presence- does the same and attaches an identity. private-encrypted- seals the payload with a key Bird never holds. Names take up to 164 characters, are case-sensitive, and are the one part of a channel you should think about carefully, because a public name is visible to anyone holding the app key.

## Five kinds of room.

Same protocol, same client, same publish call. The name is what differs.

- **01** Public channels. No authorization endpoint, no registration. Anyone holding the app key can subscribe, which makes them right for build results, live scores, flight information, or a status page, and wrong for anything scoped to one customer. Keep identifiers out of the name: orders reveals nothing, orders-user-4821 reveals that user 4821 exists.
- **02** Private channels. A private- name routes the subscription through your own endpoint, which checks the session and signs the connection id and channel name with the app secret. Your rules, your session, your 403. The edge verifies the signature and nothing else reaches the channel.
- **03** Presence channels. Private-channel authorization plus an identity, so every subscriber gets the member list and hears about arrivals and departures. This is the one channel type with a roster.
- **04** Encrypted channels. A private-encrypted- channel carries payloads your server seals with a 32-byte master key that never appears in a Realtime request. The edge and everything between it and the browser see ciphertext. Channel and event names stay in the clear, so pick names that do not leak what you are protecting.
- **05** Cache channels. Lead the name with cache-, after any type prefix, and the channel remembers its latest API-published event and replays it to each new subscriber. The subscription doubles as the initial state fetch. Two constraints worth designing around: only the most recent event is kept, and it may expire before the 30-minute ceiling, so put the whole state in every payload and repopulate from the cache-miss webhook rather than assuming the cache is warm.

## One publish, up to a hundred channels.

Publishing is an ordinary REST call from your server. Name up to 100 channels in one request and the edge fans the event out to all of them. A batch carries up to 10 unrelated events, each to its own channel. Pass the acting client's connection id as exclude_connection_id and the tab that already applied the change locally is skipped. Ask for connection or member counts with include and the response tells you the state of each channel at publish time. Retry with the same idempotency key and you will not deliver twice.

**publish.ts**

```typescript
// One event, up to 100 channels, one request.
const result = await bird.realtime.publish(APP_ID, {
  event: "score-updated",
  channels: ["match-42", "cache-match-42"],
  data: { home: 2, away: 1 },
  // The tab that scored already rendered it locally.
  exclude_connection_id: "26896.319537",
  include: ["connection_count"],
});

for (const channel of result.data ?? []) {
  console.log(channel.name, channel.connection_count);
}
```

## Clients can talk to each other directly.

A typing indicator or a cursor position does not need to visit your API. Enable client events on the app and a subscribed client can trigger an event named client-something straight to the others in the channel, capped at 10 per second per connection. They only work on private and presence channels, which is deliberate: the app key ships in your page, so authorization is what makes a client trustworthy enough to broadcast. Treat what arrives as a signal, never as authoritative state, because the edge does not validate the payload.

## What a channel will and will not remember.

A publish returns once the edge has accepted the event. Delivery is asynchronous, there is no per-client receipt, and a client that drops mid-delivery will not be sent the event again on reconnect. That is the honest contract, and it is why durable state belongs in your database and events announce that it changed. Caps are the same on every plan: 100 channels per publish, 10 events per batch, 10 KB per payload, 164-character channel names.

## Go deeper in the docs.

The [Realtime overview](/docs/guides/realtime/overview) defines channels, members, and connections in one page. [Publishing events](/docs/guides/realtime/publishing-events) covers broadcast, batch, and exclusion, [cache channels](/docs/guides/realtime/cache-channels) explains the replay, and [querying channel state](/docs/guides/realtime/querying-channel-state) is the server-side read for occupancy and counts.

## The rest of Realtime

One app, one key pair. Explore the other capabilities.

- [Presence](/realtime-api/features/presence): Who is in the room, who just left, and how to reach one person directly.
- [Security](/realtime-api/features/security): Signed subscriptions, authorized connections, and end-to-end encryption.
- [Webhooks](/realtime-api/features/webhooks): Your server hears when a channel fills, empties, or misses its cache.
- [Pricing](/realtime-api/pricing): Connections and messages per plan, from the free tier upward.
- [Getting started](/realtime-api/getting-started): From sign-up to your first published event.
- [Realtime API overview](/realtime-api): The whole product: channels, presence, security, webhooks, and the clients.

## Scale without  losing control.

Organize teams in workspaces, control API access, and trace changes through audit logs.

Harbor Organization
Workspaces Production Sandbox

### Delivery agent

API key · Customer operations team
Active
Permissions Access
Email Read & write
SMS Read & write
WhatsApp Read Read & write
AL Alex Lee Admin  Permissions updated

### Audit log

Production
 API key updated Alex Lee · 09:42:18 UTC

Workspace
Production

Resource
Delivery agent

WhatsApp
Read Read & write

Succeeded

 [Workspaces](/docs/guides/workspaces)[Team roles](/docs/guides/users-teams-roles)[API authentication](/docs/guides/authentication)
[Explore Enterprise](/enterprise)

## Start with Realtime. Build across channels with Bird.

[Get started](/dashboard/signup?returnTo=%2Fdashboard%2Fw%2Frealtime) · [Contact Sales](/demo?product=realtime)

[Email](/email-api) · [SMS](/sms-api) · [WhatsApp](/whatsapp-api) · [Apple Messages](/apple-messages-api) · [Voice](/voice-api)



## Related resources

- [Send your first realtime event](/docs/get-started/send-your-first-realtime-event) (docs)
- [Build your first integration](/learn/paths/integration) (course)

[Get an implementation brief](/learn/workspace?topic=realtime)
