---
title: "Create a Realtime app"
canonical: "https://bird.com/docs/api/reference/create-realtime-app"
---

# Create a Realtime app

`POST /v1/realtime/apps`

Provisions a new Realtime app for the workspace and returns it with the initial key. Store the key secret when you receive it because later responses do not include it. If you lose the secret, create a new key and revoke this one.

## Code samples

**CLI**

```sh
bird realtime apps create \
  --connection-counting=true \
  --name chat-production \
  --region eu1
```

Examples: [CLI](/docs/api/reference/create-realtime-app.cli.md) · [MCP](/docs/api/reference/create-realtime-app.mcp.md) · [cURL](/docs/api/reference/create-realtime-app.curl.md)

## Example response `201`

```json
{
  "created_at": "2026-05-20T09:14:52Z",
  "updated_at": "2026-05-25T16:42:01Z",
  "id": "rap_01krdgeqcxet5s7t44vh8rt9mg",
  "app_id": 432557,
  "name": "chat-production",
  "region": "us1",
  "status": "active",
  "key": {
    "id": "rak_01krdgeqcxet5s7t44vh8rt9mg",
    "key": "d0e95a856ddc1b09d4c8",
    "secret": "862925e1991a8b6902f9"
  }
}
```

## Request body

- `client_events` (boolean): Allow clients to trigger events directly (client events).
- `connection_counting` (boolean): Count the connections subscribed to each channel and expose the count on channel queries.
- `connection_count_events` (boolean): Broadcast connection-count events to public and private channel subscribers. Requires `connection_counting`. Presence channels do not emit these events; use a channel query to read their connection count.
- `watchlist_events` (boolean): Tell a signed-in member when the members on their watchlist come online or go offline. The watchlist is part of the identity your backend signs at signin.
- `authorized_connections` (boolean): Require every connection to be authorized.
- `name` (string, required): A label for the app, shown wherever it is listed.
- `region` (string, required): The region this app runs in. Unlike other products, a Realtime app can be placed in a region other than the workspace's home region. Immutable after creation.

## Response body

- `created_at` (string, required)
- `updated_at` (string, required)
- `client_events` (boolean, required): Allow clients to trigger events directly (client events).
- `connection_counting` (boolean, required): Count the connections subscribed to each channel and expose the count on channel queries.
- `connection_count_events` (boolean, required): Broadcast connection-count events to public and private channel subscribers. Requires `connection_counting`. Presence channels do not emit these events; use a channel query to read their connection count.
- `watchlist_events` (boolean, required): Tell a signed-in member when the members on their watchlist come online or go offline. The watchlist is part of the identity your backend signs at signin.
- `authorized_connections` (boolean, required): Require every connection to be authorized.
- `id` (string, required)
- `app_id` (integer, required): The numeric Realtime app id. Use it together with a key and secret to initialize a Realtime client/server SDK. Immutable.
- `name` (string, required): A label for the app, shown wherever it is listed.
- `region` (string, required): The region this app runs in. Unlike other products, a Realtime app can be placed in a region other than the workspace's home region. Immutable after creation.
- `status` (string, required)

  Lifecycle state of the app. `active` apps serve connections; `suspended` apps are provisioned but reject connections.

  Possible values: `active`, `suspended`
- `key` (object, required): The app's initial key, including its one-time secret. Present in this create response only; the secret is never returned again.
- `key.id` (string, required)
- `key.key` (string, required): The public app key clients use to connect.
- `key.secret` (string): The key secret, used for server-side request signing. Returned only when the key is created, and never shown again: store it securely. If lost, create a new key and revoke this one.
- `key.revoked_at` (nullable string, required): When the key was revoked, or `null` if still active.
- `key.created_at` (string, required)

## Related resources

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

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