Publish a Realtime event
POST
/v1/realtime/apps/{realtime_app_id}/events
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 channelresult = client.realtime.publish(
"rap_01krdgeqcxet5s7t44vh8rt9mg",
event="order.updated",
channels=["orders", "presence-lobby"],
data={"order_id": "ord_123", "status": "shipped"},
)
print(result.data)result, err := client.Realtime.Publish(context.Background(), "rap_123", bird.RealtimePublishParams{
Event: "order.created",
Channels: []string{"orders", "presence-lobby"},
Data: map[string]any{"order_id": "ord_1", "total": 4200},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Data)$result = $bird->realtime->publish($appId, (new RealtimePublish())
->setEvent('message.created')
->setChannels(['room-42'])
->setData(['text' => 'Hello, room!']));
echo count($result->getData() ?? []), ' channel(s)';curl -X POST "https://us1.platform.bird.com/v1/realtime/apps/{realtime_app_id}/events" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"event": "order-updated",
"channels": [
"orders",
"orders-42"
],
"exclude_connection_id": "123.4567",
"include": [
"member_count"
]
}'Response200
{
"data": [
{
"name": "orders-42"
}
]
}
Publishes an event to one or more channels of a Realtime app. Listing several channels broadcasts the event to all of them in one call. Connected clients subscribed to those channels receive it in real time.
Parameters
realtime_app_id
string
ID of the Realtime app (rap_ prefix), as returned when the app was created.
Request Payload
event
string
required
The event name clients bind to. Application event names are free-form; the bird: and bird_internal: prefixes are reserved for the protocol and rejected.
channels
array of string
required
The channels to deliver the event to (up to 100 per call). Prefix with private- or presence- for authenticated channels. A private-encrypted- channel must be the only channel in its publish: each encrypted channel has its own key, so a fan-out would hand the other channels unreadable ciphertext.
data
Arbitrary JSON payload delivered as the event data: an object, array, or scalar. Cap: 10 KB serialized.
exclude_connection_id
string
Exclude this connection from delivery, to avoid echoing a change back to the client that triggered it. The value is the client's connection id, assigned when its connection is established.
include
array of string
Per-channel attributes to return alongside the publish, reflecting each channel's state at publish time. member_count is available only for presence channels. connection_count requires the app's connection-counting flag. Requesting attributes counts as one additional message toward usage.
Response Payload
data
array of object
Per-channel attributes at publish time, present only when the request asked for them via include; one item per distinct target channel, sorted by name.
Show child attributes
data.member_count
integer
Distinct members (presence channels only; requires include=member_count).
data.connection_count
integer
Connections currently subscribed to this channel (requires include=connection_count and the app's connection-counting flag). Channel-scoped: distinct from the app-wide peak connections metric.
data.name
string
required
A Realtime channel name. Only letters, digits, and _ - = @ , . ; Prefix with private- or presence- for authenticated channels, or private-encrypted- for channels whose payloads are end-to-end encrypted with a key only you hold.