Received messages by number
GET
/v1/sms/stats/inbound/numbers
const stats = await bird.sms.stats.inbound.byNumber({ from: "2026-05-01", to: "2026-05-31" });
for (const row of stats.data ?? []) {
console.log(row.number, row.received);
}stats = client.sms.stats.inbound.by_number(from_="2026-05-01", to="2026-05-31")
for row in stats.data or []:
print(row.number, row.received)stats, err := client.Sms.Stats.Inbound.ByNumber(context.Background(), bird.SmsStatsInboundByNumberParams{
From: time.Now().AddDate(0, -1, 0),
To: time.Now(),
})
if err != nil {
log.Fatal(err)
}
for _, row := range *stats.Data {
fmt.Println(*row.Number, *row.Received)
}$inboundByNumber = $bird->sms->stats->inbound->byNumber(['from' => '2026-05-01', 'to' => '2026-05-31']);
foreach ($inboundByNumber->getData() ?? [] as $row) {
echo $row->getNumber(), ' ', $row->getReceived(), PHP_EOL;
}bird sms stats inbound by-numbercurl -X GET "https://us1.platform.bird.com/v1/sms/stats/inbound/numbers" \
-H "Authorization: Bearer $TOKEN" \
--url-query "limit=50"Returns how many messages each of your numbers received.
Rows are ranked by volume, highest first, and counted by the time the carrier received each message. The number is the one of yours the message arrived on, so this answers which of your numbers is receiving traffic.
A row carries a count and nothing else. A received message has one state, so there is no lifecycle to break down and no delivery latency to report.
The maximum window is 365 days; a longer range returns 422. Set timezone to resolve the period against your local calendar instead of UTC.
Query पैरामीटर
from
string
Start date (inclusive), YYYY-MM-DD. Interpreted as a calendar day in timezone (a UTC day when timezone is omitted). Defaults to 30 days before to when omitted.
to
string
End date (inclusive), YYYY-MM-DD. Interpreted as a calendar day in timezone (a UTC day when timezone is omitted). Defaults to today in that timezone when omitted. Window may not exceed 365 days.
timezone
string
IANA timezone identifier (for example Asia/Kathmandu) to report in; defaults to UTC. Day and hour boundaries and the default window when from and to are omitted both follow it, so a calendar-day from or to names a local day. A from or to carrying its own UTC offset is rejected while this is set: pass a calendar day or a Z instant.
limit
integer
Maximum rows to return, ranked by volume. Defaults to 50; the maximum is 200, and asking for more returns 422 rather than silently returning fewer.
Response Payload
period
object
आवश्यक
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.
चाइल्ड एट्रिब्यूट दिखाएँ
period.from
string
आवश्यक
Inclusive start of the window the response covers -- a calendar day (YYYY-MM-DD) for day windows, or an hour boundary (RFC 3339) for hour windows.
period.to
string
आवश्यक
Inclusive end of the window the response covers -- a calendar day (YYYY-MM-DD) for day windows, or an hour boundary (RFC 3339) for hour windows.
period.data_as_of
nullable string
The instant the statistics in this response are current to: events recorded up to roughly this time are reflected, while more recent events may not be yet. Statistics are served from a rolling aggregation that refreshes every few seconds, so a response is near-real-time but not live; use this field to label data freshness (for example "as of 14:03") rather than assuming the numbers are to-the-second. Null when the freshness boundary is not being reported.
data
array of object
आवश्यक
One row per number with activity in the period, most messages first, capped at the requested limit. A number with no messages in the period is absent rather than zero-filled, because unlike a time bucket it is not part of a continuous axis.
चाइल्ड एट्रिब्यूट दिखाएँ
data.number
string
आवश्यक
The Bird number the messages arrived on, in E.164, or the short code they were sent to. This is the same value the message resource exposes as to.
data.received
integer
आवश्यक
Distinct messages received on this number during the period.
total
integer
आवश्यक
Total number of distinct numbers with activity in the period, regardless of limit. When it exceeds the number of rows returned, the ranking was capped; raise limit (up to 200) or narrow the window to see more.