---
title: "List Realtime apps"
canonical: "https://bird.com/docs/api/reference/list-realtime-apps"
---

# List Realtime apps

`GET /v1/realtime/apps`

Returns the workspace's Realtime apps as a paginated list, filterable by a case-insensitive `name` substring. Each entry carries the app's configuration and connection details (`app_id`, `region`) but never key secrets. Use [List a Realtime app's keys](/docs/api/reference/list-realtime-app-keys) and [Create a Realtime app key](/docs/api/reference/create-realtime-app-key) to manage them.

## Code samples

**CLI**

```sh
bird realtime apps list
```

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

## Example response `200`

```json
{
  "data": [
    {
      "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"
    }
  ],
  "next_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE0OjAzOjEwWlwiIiwiaSI6IjAxOTJmM2IxLTRjN2UtN2EyYi05ZDYxLThmM2E1YzJlN2I0MCJ9",
  "prev_cursor": null,
  "refresh_cursor": "eyJ2IjoxLCJzIjoiXCIyMDI2LTA1LTI1VDE2OjQyOjAxWlwiIiwiaSI6IjAxOTJmM2IxLTllMDQtN2NkMy1iODE3LTJhNmY0ZDFjOGUwOSJ9"
}
```

## Query parameters

- `name` (string): Substring match against the app name (case-insensitive).
- `sort` (string)

  Field to sort by.

  Possible values: `created_at`, `name`
- `order` (string)

  Sort direction. Defaults to `desc`, which sorts from newest to oldest or largest to smallest, depending on the selected sort field.

  Possible values: `asc`, `desc`
- `limit` (integer): Maximum number of items to return per page.
- `starting_after` (string): Cursor from the `next_cursor` field of a previous list response. Returns items immediately after the cursor position in the current sort order.
- `ending_before` (string): Cursor from the `prev_cursor` or `refresh_cursor` field of a previous list response. Returns items immediately before the cursor position in the current sort order. `prev_cursor` returns the preceding page. `refresh_cursor` anchors at the first row of that response, which on a newest-first sort is how to fetch the items that have appeared since.
- `include_total` (boolean): When true, the response includes a `total` field with the total number of items matching the request's filters across all pages.

## Response body

- `data` (array of object, required)
- `data.created_at` (string, required)
- `data.updated_at` (string, required)
- `data.client_events` (boolean, required): Allow clients to trigger events directly (client events).
- `data.connection_counting` (boolean, required): Count the connections subscribed to each channel and expose the count on channel queries.
- `data.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.
- `data.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.
- `data.authorized_connections` (boolean, required): Require every connection to be authorized.
- `data.id` (string, required)
- `data.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.
- `data.name` (string, required): A label for the app, shown wherever it is listed.
- `data.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.
- `data.status` (string, required)

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

  Possible values: `active`, `suspended`
- `next_cursor` (nullable string, required): Cursor for the next page. Pass back as `starting_after` to advance forward. `null` when no next page exists.
- `prev_cursor` (nullable string, required): Cursor for the previous page. Pass back as `ending_before` to step backward. `null` when no previous page exists.
- `refresh_cursor` (nullable string, required): Refresh anchor, the first row of this response. Pass back as `ending_before` to fetch what precedes it in the current sort order. On a newest-first sort those are the items that have appeared since; on any other sort they are the items that sort earlier, so refreshing such a list means re-fetching it instead. Non-`null` whenever `data` is non-empty; `null` only on an empty page. Distinct from `prev_cursor`.
- `total` (nullable integer): Total number of items matching the request's filters across all pages. Present only when `include_total=true` was passed; otherwise `null`.

## 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)
