Broadcast analytics
How the broadcasts sent over a window that ends now did, added up and counted by day, hour or minute, with one row per broadcast to compare them: the Analytics tab of the Broadcasts page.
Runs the real call on your workspace.
GET /broadcasts/analytics
How the broadcasts sent over a window that ends now did, added up and counted by day, hour or minute, with one row per broadcast to compare them: the Analytics tab of the Broadcasts page.
Example
Needs emails:read. Leave broadcastIds out for every broadcast, or name up to 50 separated by commas. The window is days (1 to 1095) or minutes (1 to 1576800, which wins when both are sent), 30 days by default. grain is day, hour or minute, day by default, and offsetMinutes (-840 to 840) is the viewer's offset from UTC.
curl "$OE/broadcasts/analytics?days=30" -H "$AUTH"{ "object": "broadcast_analytics", "since": "2026-08-25T00:00:00.000Z", "until": "2026-09-23T12:00:00.000Z", "grain": "day", "offsetMinutes": 0, "broadcastIds": [], "totals": { "broadcasts": 2, "recipients": 530, "pending": 0, "sent": 527, "delivered": 519, "bounced": 6, "complained": 1, "failed": 3, "opened": 241, "clicked": 66, "unsubscribed": 4, "opens": 377, "clicks": 90 }, "series": [ { "bucket": "2026-09-09", "sent": 117, "delivered": 115, "opened": 54, "clicked": 14, "unsubscribed": 1 }, { "bucket": "2026-09-23", "sent": 410, "delivered": 404, "opened": 187, "clicked": 52, "unsubscribed": 3 } ], "broadcasts": [ { "id": "brd_5a8c1e3f7b2d94a06c8e1f3b", "subject": "The September release is out", "status": "sent", "sentAt": "2026-09-23T12:00:00.000Z", "recipients": 412, "sent": 410, "delivered": 404, "opened": 187, "clicked": 52, "unsubscribed": 3 }, { "id": "brd_2e7d9b4c1a8f60e35d2c7b91", "subject": "What changed in August", "status": "sent", "sentAt": "2026-09-09T09:30:00.000Z", "recipients": 118, "sent": 117, "delivered": 115, "opened": 54, "clicked": 14, "unsubscribed": 1 } ]}A copy counts when it was sent inside the window, and everything that happened to it afterwards counts with it. Test mode broadcasts are left out.
totals and series add up the broadcasts in broadcastIds, or every one when it is empty. broadcasts always lists every broadcast in the window, newest first, with the same counts as totals, shortened here, so you can compare them or pick ids.
opened, clicked and unsubscribed count people, while opens and clicks count events. series is sparse and oldest first, and counts each person once, at the first time it happened to them.
More than 50 ids is a 422 invalid_parameter, and an id with no copy in the window adds nothing. A key limited to particular addresses or domains reads only the broadcasts sent from an address or domain it holds.