# Blasts

Read-only results of your campaigns' email blasts: how many recipients were delivered, bounced, replied or opted out, day by day, and which addresses got which blast. All four endpoints need `blasts:read`, and nothing here changes a blast.

A blast is readable when its campaign is one the key may reach and the key's member can use email blasts there in DialEcho (the campaign's leads, with email and message permissions). Any other blast or campaign is reported as `404`, never `403`. Send rows are not narrowed by contact assignment.

Send rows follow the member's contact field visibility in the send's campaign: `email` and `from_email` are `null` when the role hides email and masked (`p***@example.net`) when it masks it, `subject` is `Restricted` when it masks messages, and `bounce_diagnostic` follows the stricter of the two. An `email` filter searches only campaigns where the member sees addresses in full; elsewhere it matches nothing (an empty page, never `403`), so it cannot confirm an address the member cannot see. Blast stats and `subject_template` are not affected.

Stats are exact counts of each blast's recipients as stored now, so they keep moving while a blast sends and as bounces and replies arrive.

## Endpoints

### [List blasts](/api/blasts/list)

`GET /v1/blasts`

Returns your campaigns' email blasts with their main stats, newest first.

### [Retrieve a blast](/api/blasts/get)

`GET /v1/blasts/{blast_id}`

Returns one blast with its full stats and a day-by-day breakdown.

### [List a blast's sends](/api/blasts/list-sends)

`GET /v1/blasts/{blast_id}/sends`

Returns one row per recipient of a blast, the most recently added first.

### [Look up sends](/api/blasts/lookup-sends)

`GET /v1/sends`

Lists every blast email sent to one address, oldest first.
