---
title: "Get aggregate Apple Messages for Business conversation statistics"
method: GET
path: "/v1/amb/stats/conversations/summary"
tags: ["amb-stats"]
---

# Get aggregate Apple Messages for Business conversation statistics

`GET /v1/amb/stats/conversations/summary`

## Request

- Base URL: `https://us1.platform.bird.com`
- URL: `https://us1.platform.bird.com/v1/amb/stats/conversations/summary`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bird_session`

Returns one aggregate row of Apple Messages for Business conversation lifecycle counts (`started`, `reopened`, `closed`, `conversations`) for the requested period. Rows are attributed to when the lifecycle event occurred, not to any earlier outbound message. A conversation can be reopened and closed more than once, so `started`, `reopened`, and `closed` need not sum to `conversations`, and any one of them can exceed it. `period.data_as_of` is the freshness boundary the rollups have reached.

`from` and `to` must both be calendar days or RFC 3339 instants. Day windows cover up to 365 whole days. Instant bounds round down to the hour, remain inclusive, and may span up to 720 hours. Mixing the forms returns `422`. Set `timezone` for local boundaries. Historical dates are supported within the maximum window length; the requested dates are not shifted forward.

Use `compare=previous_period` to include the preceding equal-length window and the change between the two.

## Query parameters

- `from` string
- `to` string
- `timezone` string
- `compare` 'previous_period': Set to `previous_period` to also return the same figures for the immediately preceding window of equal length, plus the change between the two, so you can show "+X% vs last period" without a second request.

## Headers

- `X-Workspace-Id` string
- `X-Organization-Id` string

## Response `200`

Aggregate conversation summary for the requested period.

- AMBConversationStatsSummary: Conversation lifecycle counts for the full requested period. Counts aggregate the time buckets.
  - `period` AMBStatsSummaryPeriod, required: The window the server actually computed against. The summary serves two window grains: calendar days (bounds are YYYY-MM-DD) and hours (bounds are RFC 3339 instants on the hour). The grain of `from` and `to` mirrors the grain of the request's bounds.
    - `from` string, required: Inclusive start of the window, as a calendar day (`YYYY-MM-DD`) or an RFC 3339 hour boundary. Historical starts are preserved; the maximum request length does not impose a historical cutoff.
    - `to` string, required: Inclusive end of the window, as a calendar day (`YYYY-MM-DD`) or an RFC 3339 hour boundary.
    - `data_as_of` string, date-time, nullable: Latest time reflected in the statistics. More recent events might not be included yet. Null when the freshness boundary is unavailable.
  - `attribution` 'accepted_time' | 'event_time', required: Which timestamp a statistics response buckets its rows and totals by: - `accepted_time`: attributed to when Bird accepted the outbound message for sending. The outbound send statistics use this, so a later event for the same message, such as a send failure, still counts against the day or hour its message was accepted. - `event_time`: attributed to when the event itself occurred. Inbound message statistics, conversation statistics and the staff per-business failure counts use this, since there is no earlier outbound event to anchor them to. A response never mixes the two axes: every row and total in one payload shares the same attribution.
  - `counts` AMBConversationStatsCounts, required: Conversation lifecycle counts for the requested scope, attributed to when each event occurred. A conversation can start, reopen, and close more than once over its life, so `started`, `reopened`, and `closed` can each exceed `conversations`, the number of distinct conversations touched in scope. Very large counts are close estimates rather than exact tallies.
    - `started` integer, required: Count of conversation-started events in scope.
    - `reopened` integer, required: Count of conversation-reopened events in scope.
    - `closed` integer, required: Count of conversation-closed events in scope.
    - `conversations` integer, required: Distinct conversations with at least one lifecycle event in scope.
  - `comparison` AMBConversationStatsComparison: The same statistics for the equal-length, inclusive period ending immediately before the requested start, together with the change between the two periods. Present only when `compare=previous_period` is requested. The change is already computed, so a percentage difference needs no second request.
    - `period` AMBStatsSummaryPeriod, required: The window the server actually computed against. The summary serves two window grains: calendar days (bounds are YYYY-MM-DD) and hours (bounds are RFC 3339 instants on the hour). The grain of `from` and `to` mirrors the grain of the request's bounds.
      - `from` string, required: Inclusive start of the window, as a calendar day (`YYYY-MM-DD`) or an RFC 3339 hour boundary. Historical starts are preserved; the maximum request length does not impose a historical cutoff.
      - `to` string, required: Inclusive end of the window, as a calendar day (`YYYY-MM-DD`) or an RFC 3339 hour boundary.
      - `data_as_of` string, date-time, nullable: Latest time reflected in the statistics. More recent events might not be included yet. Null when the freshness boundary is unavailable.
    - `counts` AMBConversationStatsCounts, required: Conversation lifecycle counts for the requested scope, attributed to when each event occurred. A conversation can start, reopen, and close more than once over its life, so `started`, `reopened`, and `closed` can each exceed `conversations`, the number of distinct conversations touched in scope. Very large counts are close estimates rather than exact tallies.
      - `started` integer, required: Count of conversation-started events in scope.
      - `reopened` integer, required: Count of conversation-reopened events in scope.
      - `closed` integer, required: Count of conversation-closed events in scope.
      - `conversations` integer, required: Distinct conversations with at least one lifecycle event in scope.
    - `delta` AMBConversationStatsComparisonDelta, required: Changes from the previous period. Each value is the signed relative change `(current - previous) / previous` and is null when the previous count is zero.
      - `started_pct_change` number, nullable, required: Relative change in conversation starts (`counts.started`) versus the previous period, as a signed fraction. Null when the previous period had none.
      - `reopened_pct_change` number, nullable, required: Relative change in conversation reopens (`counts.reopened`) versus the previous period, as a signed fraction. Null when the previous period had none.
      - `closed_pct_change` number, nullable, required: Relative change in conversation closes (`counts.closed`) versus the previous period, as a signed fraction. Null when the previous period had none.
      - `conversations_pct_change` number, nullable, required: Relative change in distinct conversations touched (`counts.conversations`) versus the previous period, as a signed fraction. Null when the previous period had none.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `422`: The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.
- `429`: Rate limit exceeded
- `500`: Internal server error
- `503`: The service is temporarily unavailable. If `Retry-After` is present, wait for that delay before retrying; otherwise, retry with exponential backoff. Reuse the same idempotency key and request when retrying a mutation.

---

[API](https://skmtc.dev/messagebird/apis/bird-api.md) · [All operations](https://skmtc.dev/messagebird/apis/bird-api/llms.txt) · [OpenAPI document](https://skmtc.dev/messagebird/apis/bird-api/revisions/3e2a50466454?raw)
