Sign inGet Started

Get daily outbound Apple Messages for Business statistics

GET
/v1/amb/stats/daily
const result = await bird.amb.stats.daily({
  business_account_id: "abz_01krdgeqcxet5s7t44vh8rt9mg",
});
console.log(result);
响应200
{
  "period": {
    "from": "2026-05-01",
    "to": "2026-05-25",
    "grain": "day",
    "data_as_of": "2026-05-25T14:03:10Z"
  },
  "attribution": "accepted_time",
  "data": [
    {
      "bucket": "2026-05-25",
      "counts": {
        "accepted": 4820,
        "sent": 4790,
        "send_failed": 30,
        "rejected": 4,
        "sent_rate": 0.9938,
        "send_failure_rate": 0.0062
      },
      "latency": {
        "processing": {
          "p50_ms": 610,
          "p95_ms": 2140,
          "p99_ms": 5380
        }
      }
    }
  ]
}

Returns one row of outbound Apple Messages for Business counts and processing-latency percentiles per calendar day for the workspace, gap-filled so a silent day is a zero row rather than a missing one. Every count in a row is attributed to the day its message was accepted, regardless of when a later event, such as a send failure, arrived.

There is no delivery receipt on this channel, so there is no delivered count or delivery-latency figure in any row. Each row carries its own latency.processing percentiles. Read first_response from the summary or a breakdown endpoint.

from and to are optional calendar days (YYYY-MM-DD), defaulting to the trailing 30 days. The maximum window is 365 days; a longer range returns 422. Set timezone to report rows by your local calendar day. Historical dates are supported within the maximum window length; the requested dates are not shifted forward.

Set at most one dimension filter (business_account_id, message_kind, intent, group, category, or tag) to restrict the statistics to that dimension's value; setting more than one returns 422.

查询参数

fromstring

Start date (inclusive), YYYY-MM-DD. Interpreted as a calendar day in timezone (a UTC day when timezone is omitted). The window may not exceed 365 days. Defaults to 30 days before to when omitted.

tostring

End date (inclusive), YYYY-MM-DD. Interpreted as a calendar day in timezone (a UTC day when timezone is omitted). The window may not exceed 365 days. Defaults to today in that timezone when omitted.

timezonestring

IANA timezone identifier used to group statistics, for example Asia/Kathmandu. The default is UTC. Day and hour boundaries, including the default window when from and to are omitted, follow this timezone. When this parameter is set, pass from and to as calendar days or Z instants instead of timestamps with explicit UTC offsets.

business_account_idstring

Restrict the statistics to a single business. Mutually exclusive with the other dimension filters (message_kind, intent, group, category, tag); only one may be set per request. Matches the business_account_id key on a row of the per-business breakdown.

message_kindstring

Restrict the statistics to a single message content kind. Mutually exclusive with the other dimension filters (business_account_id, intent, group, category, tag); only one may be set per request. Matches the message_kind key on a row of the per-content-kind breakdown.

Possible values: text, attachment, rich_link, quick_reply, list_picker, time_picker, form, apple_pay, authenticate, imessage_app, interactive

intentstring

Restrict the statistics to a single entry-point intent. Mutually exclusive with the other dimension filters (business_account_id, message_kind, group, category, tag); only one may be set per request. Matches the intent key on a row of the per-intent breakdown.

groupstring

Restrict the statistics to a single entry-point group. Mutually exclusive with the other dimension filters (business_account_id, message_kind, intent, category, tag); only one may be set per request. Matches the group key on a row of the per-group breakdown.

categorystring

Restrict the statistics to a single message category. Mutually exclusive with the other dimension filters (business_account_id, message_kind, intent, group, tag); only one may be set per request. Matches the category key on a row of the per-category breakdown.

tagstring

Restrict the statistics to a single tag. Use name to match any value of a tag, or name:value for a specific pair (for example campaign:spring_launch). Mutually exclusive with the other dimension filters (business_account_id, message_kind, intent, group, category); only one may be set per request. A row of the per-tag breakdown carries the same pair in its single tag key.

响应载荷

period
object
必填

The window and bucket grain the response covers, echoed from the request, plus the freshness boundary the data is current to.

显示子属性
attribution
string
必填

Always accepted_time for outbound statistics.

Possible values: accepted_time, event_time

data
array of object
必填

One row per day or hour in chronological order. Buckets with no activity contain zero counts.

显示子属性
data.bucket
string
必填

The day (YYYY-MM-DD) or hour (RFC 3339, on the hour) this point covers, matching the period's grain.

data.counts
object
必填

Outbound Apple Messages for Business counts for the requested scope, attributed to when each message was accepted. Apple Messages for Business has no delivery receipt, so there is no delivered count anywhere in this API: sent is the last outbound state Bird observes for a message. Very large counts are close estimates rather than exact tallies. Rates are computed once here, clamped to 1, and null when nothing was accepted.

显示子属性
data.counts.accepted
integer
必填

Distinct messages accepted for sending after admission checks. This is the denominator for sent_rate and send_failure_rate.

data.counts.sent
integer
必填

Distinct messages handed off to Apple.

data.counts.send_failed
integer
必填

Distinct accepted messages that Apple refused or that exhausted their send attempts. See last_error.code on the message for the reason; a refused charge is not a send failure, it is rejected.

data.counts.rejected
integer
必填

Distinct messages refused before any send attempt, because the destination has no price, the wallet could not fund the send, or the content cannot be sent yet. Rejected messages are never charged and are not counted in accepted, so the total addressed is accepted + rejected. Excluded from send_failure_rate, which covers send failures only.

data.counts.sent_rate
nullable number
必填

Share of accepted messages Apple acknowledged, computed as sent / accepted. Null when no messages were accepted in scope. This stands where other channels report a delivery rate.

data.counts.send_failure_rate
nullable number
必填

Share of accepted messages that failed to send, computed as send_failed / accepted. Null when no messages were accepted in scope.

data.latency
object
必填

Processing-latency percentiles in milliseconds for the requested scope, from acceptance to Apple handoff. Apple Messages for Business has no delivery receipt, so there is no delivery or total member beside processing. Conversation response timing is reported separately in first_response. Always present; every percentile is null when no qualifying message in scope has a measurement.

显示子属性