Sign inGet started

Export broadcasts as CSV

GET
/v1/email/broadcasts/export
curl -X GET "https://us1.platform.bird.com/v1/email/broadcasts/export" \
  -H "Authorization: Bearer $TOKEN"
Downloads the workspace's broadcasts as a CSV file, one row per broadcast, newest first. The header names fifteen columns, in this order: created_at, broadcast_id, status, template_name, audience_id, audience_name, recipient_count, sent_count, delivered_count, track_opens, open_rate, track_clicks, click_rate, scheduled_at and sent_at. broadcast_id is what joins a row back to the rest of the API. It takes the same filters as the broadcast list, so the file matches what the list shows for the same query. recipient_count is empty until a send resolves the audience, so an empty cell there means the broadcast has no recipient list yet rather than a list of nobody.
open_rate and click_rate are decimal fractions to four places, over the recipients the message reached: open_rate is unique non-prefetched opens divided by that number, and click_rate is unique clicks divided by it. That divisor is not the delivered_count column, which resolves each recipient to a single status and so counts a recipient who delivered and then complained under the complaint, so neither rate can be reproduced from this file alone. Either is empty when its track_opens or track_clicks flag is false, and also when the message reached nobody, so an empty rate does not mean tracking is off. Both flags default to true and the export narrows by no status of its own, so a draft or scheduled row is included unless status excludes it, and carries track_opens as true with open_rate empty.
A text cell whose first character is =, +, -, @, a tab or a carriage return is written with a leading apostrophe, so a spreadsheet reads it as text rather than as a formula. A value that begins with an apostrophe of its own is written unchanged, so the original text cannot always be recovered from the CSV cell. Match records by broadcast_id or audience_id, rather than by template_name or audience_name.
The file is complete or it is refused: a query matching more broadcasts than one file carries returns a 422 naming the limit rather than a truncated download. Narrow it with created_after and created_before and request each window separately.
Query Parameters
status
array
Filter by lifecycle status. Repeat the parameter to match more than one status, for example ?status=accepted&status=sending.
audience_id
string
Filter by audience. Only broadcasts that use this audience are returned.
tag
string
Filter by tag. Pass name to match any broadcast that has that tag name, or pass name:value to match a specific tag pair, for example campaign:spring_launch.
q
string
Case-insensitive substring match against the broadcast's tag names and values, or the referenced template's name.
created_after
string
Limits the response to resources created at or after this timestamp. Combine it with created_before to select a time window. Use an RFC 3339 timestamp with a timezone offset.
created_before
string
Limits the response to resources created before this timestamp. Combine it with created_after to select a time window. Use an RFC 3339 timestamp with a timezone offset.