---
title: "Get audience membership statistics"
canonical: "https://bird.com/docs/api/reference/get-audience-membership-statistics"
---

# Get audience membership statistics

`GET /v1/audiences/{audience_id}/membership-statistics`

Returns the first successful observation for each requested UTC date, in chronological order. Changes between observations are unobserved. A missing observation has null total and observed_at; a successful empty audience has zero members. History retains today and the preceding 364 UTC dates; older requested dates are gaps. No history is reconstructed before observation began.

Only daily UTC observations are supported. Period data_as_of is always null because samples do not establish continuous freshness; each point carries its actual observed_at. Future, reversed, invalid or longer-than-365-date windows return 422. For the current exact count, use [Get audience membership](/docs/api/reference/get-audience-membership).

Returns 421 when the workspace's organization is served from a different region from the API host. Retry against that workspace's regional host.

## Code samples

**TypeScript**

```ts
const history = await bird.audiences.membershipHistory(
  "adn_01krdgeqcxet5s7t44vh8rt9mg",
  {
    from: "2026-10-09",
    to: "2026-10-12",
  },
);
for (const point of history.data) {
  console.log(point.bucket, point.total, point.observed_at);
}
```

Examples: [TypeScript](/docs/api/reference/get-audience-membership-statistics.ts.md) · [Python](/docs/api/reference/get-audience-membership-statistics.py.md) · [Go](/docs/api/reference/get-audience-membership-statistics.go.md) · [PHP](/docs/api/reference/get-audience-membership-statistics.php.md) · [CLI](/docs/api/reference/get-audience-membership-statistics.cli.md) · [MCP](/docs/api/reference/get-audience-membership-statistics.mcp.md) · [cURL](/docs/api/reference/get-audience-membership-statistics.curl.md)

## Example response `200`

```json
{
  "period": {
    "from": "2026-10-09",
    "to": "2026-10-12",
    "data_as_of": null
  },
  "data": [
    {
      "bucket": "2026-10-09",
      "total": null,
      "observed_at": null
    },
    {
      "bucket": "2026-10-10",
      "total": 0,
      "observed_at": "2026-10-10T00:07:12.218Z"
    },
    {
      "bucket": "2026-10-11",
      "total": 1279,
      "observed_at": "2026-10-11T00:05:48.903Z"
    },
    {
      "bucket": "2026-10-12",
      "total": 1284,
      "observed_at": "2026-10-12T00:06:31.44Z"
    }
  ]
}
```

## Path parameters

- `audience_id` (string): ID of the audience whose observations to read.

## Query parameters

- `from` (string): Inclusive first UTC date. Defaults to 30 days before to, yielding 31 inclusive dates.
- `to` (string): Inclusive last UTC date. Defaults to today in UTC; future dates are rejected. At most 365 inclusive dates.

## Response body

- `period` (object, required): Requested UTC date window.
- `period.from` (string, required): Inclusive first UTC date.
- `period.to` (string, required): Inclusive last UTC date.
- `period.data_as_of` (nullable string, required): Always null. Use each point's observed_at for its actual observation instant.
- `data` (array of object, required): One point for every requested date, including gaps.
- `data.bucket` (string, required): UTC date of the observation, or the requested date for a gap.
- `data.total` (nullable integer, required): Exact number of all members at observation time, or null for a gap.
- `data.observed_at` (nullable string, required): Actual source observation instant, or null for a gap. This is not a day-close count.

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
