BIRD Realtime

Realtime API for your apps. Subscribe, publish, scale.

Configure em:
Cursor

Chat ao vivo, presença, notificações in-app e dashboards em tempo real, sem gerir a infraestrutura WebSocket.

app.ts
connected
import { BirdRealtime } from "@messagebird/realtime";

const bird = new BirdRealtime({
  appKey: APP_KEY,
  region: "us1",
});

const channel = bird.subscribe("orders-42");

channel.bind("order-shipped", (data) => {
  render(data);
});
Order BRD-49217Placed
ETAThursday, May 22

5 minutos de npm install ao primeiro evento

Publique o seu primeiro evento na linguagem que já utiliza.

SDK de servidor para Node, Python e Go, um cliente de browser para o lado da subscrição, e HTTP simples quando preferir não adicionar uma dependência. Um canal não precisa de provisionamento: existe assim que algo o subscreve.

1
2
3
4
5
6
const result = await bird.realtime.publish("rap_01krdgeqcxet5s7t44vh8rt9mg", {
  event: "order.updated",
  channels: ["orders", "presence-lobby"],
  data: { order_id: "ord_123", status: "shipped" },
});
console.log(result.data?.length); // one entry per channel

O que pode construir com Realtime

Leve atualizações ao vivo a cada canto do seu produto, de chat e dashboards a rastreamento e jogos, tudo através de uma API simples.

  1. 01

    Live scores and results

    Match updates, poll results, election nights: one publish call fans the new number out to every subscribed screen at once.

  2. 02

    Chat in-app

    Um canal por sala, presença para quem está online e eventos de cliente para indicadores de digitação, sem ida e volta ao servidor.

  3. 03

    Colaboração online

    Eventos de cliente distribuem posições de cursor, seleções e sinais de coedição entre pares através do canal, sem passagem pelo backend.

  4. 04

    Jogos multijogador

    A presença preenche o lobby, eventos de cliente transportam as jogadas e um canal por partida mantém o estado visível para cada jogador.

  5. 05

    Gráficos e dashboards ao vivo

    Publique métricas à medida que mudam. Um canal com cache entrega o valor atual a cada participante tardio, para que os gráficos nunca apareçam vazios.

  6. 06

    Indicadores de presença

    Canais de presença rastreiam membros à medida que entram e saem; webhooks mantêm o registo do seu backend sincronizado.

  7. 07

    Rastreamento de localização ao vivo

    A courier on the customer's map, friends sharing a route, a fleet on the dispatch screen: publish coordinates and every watcher follows, with the last known position cached for late joiners.

  8. 08

    Estado de encomenda e entrega

    Um canal com cache por encomenda mantém o estado atual, de modo que a subscrição funciona também como consulta do estado inicial.

  9. 09

    Leilões e licitações

    Cada lance chega a todos os ecrãs dos licitantes ao mesmo tempo, e um canal com cache entrega a licitação mais alta a quem entra a meio do leilão.

  10. 10

    Feeds de notificação por utilizador

    Um canal privado por utilizador, subscrições assinadas pelo seu backend, para que apenas o cliente certo possa ouvir.

Porquê Realtime

A UX ao vivo é a primeira coisa que falha quando escala. Nós gerimos isto há mais de uma década.

Estado de conexão, presença, fan-out, backoff de reconexão e a capacidade de absorver picos de tráfego são as partes de uma funcionalidade ao vivo que são fáceis de prototipar e difíceis de operar. O Realtime executa-as como um serviço gerido dentro da Bird API, para que um canal ao vivo partilhe a autenticação, a observabilidade e os webhooks que já usa para email e SMS.

presence.ts
18 members
const room = bird.subscribe("presence-room-42");

room.bind("bird:subscription_succeeded", () => {
  const members = [...room.members.values()];
  render({ me: room.myId, members });
});

room.bind("bird:member_added", (member) => {
  addToRoster(member.member_id);
});

room.bind("bird:member_removed", (member) => {
  removeFromRoster(member.member_id);
});

Cada mudança de estado é um webhook.

Clients come and go without ever touching your backend. These are how it finds out: start the expensive job when the first subscriber arrives, stop it when the last one leaves, and keep your own view of who is in a room.

POST /webhooks/bird
signed
{
  "type": "realtime.member_added",
  "timestamp": "2026-05-19T15:42:01.221Z",
  "data": {
    "channel": "presence-room-42",
    "member_id": "usr_4hQ2m"
  }
}
  • realtime.channel_occupiedO primeiro subscritor juntou-se a um canal anteriormente vazio.
  • realtime.channel_vacatedO último subscritor saiu; o canal está agora vazio.
  • realtime.member_addedUm membro juntou-se a um canal de presença.
  • realtime.member_removedUm membro saiu de um canal de presença.
  • realtime.connection_countA contagem de conexões de um canal foi alterada.

Se você já integrou e-mail, já integrou o Realtime.

Mesma autenticação, mesmo contrato de idempotência, mesmo envelope de erros, mesmo formato de webhooks. A diferença está no transporte: uma conexão WebSocket persistente em vez de um envio REST pontual.

Realtime.

realtime
await bird.realtime.members.send(APP_ID, "usr_4hQ2m", {
  event: "order-shipped",
  data:  { status: "shipped" },
});

Alcança a pessoa onde quer que esteja conectada, em cada aba e dispositivo ao mesmo tempo. Sem canal para nomear, sem conexão para rastrear.

SMS.

sms
await bird.sms.send({
  from:     "Bird",
  to:       "+15005550006",
  text:     `Your order has shipped.`,
  category: "transactional",
});

A mesma chamada, um canal acima. Para quando a atualização precisa chegar a um telefone em vez de um cliente conectado.

Comece com um canal.
Adicione os outros quando estiver pronto.

Uma chave API de teste é sua imediatamente. A produção é desbloqueada quando você adiciona um método de pagamento e verifica um remetente.

Using Claude Code, Cursor, or Codex? Copy a setup prompt and your agent installs the Bird CLI and skills for you. Pick yours:

Cursor