Skip to content
View as Markdown

Retrieve a blast ​

GET /v1/blasts/{blast_id}

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

Scope: blasts:read

The same blast as the list returns, with opened and clicked added to stats and a daily breakdown. Blasts store no start or finish time, so none is returned; daily shows when sends, bounces and replies happened.

daily lists only UTC days with activity, oldest first. Sends are dated by sent_at, bounces by when the bounce was recorded and replies by each delivered recipient's first reply.

Path parameters ​

NameTypeRequiredDescription
blast_idUUIDYesThe blast.

Response ​

Status: 200 OK

NameTypeDescription
idUUIDThe blast.
namestringIts name in DialEcho.
campaign_idUUIDThe blast's campaign.
statusstringThe blast status. One of draft, scheduled, sending, paused, completed, cancelled, failed.
created_attimestampWhen it was created (RFC 3339, UTC).
scheduled_attimestamp | nullWhen it is or was scheduled to start; null when it was not scheduled.
subject_templatestring | nullThe subject as written, merge tags included. Each send's subject is the subject its recipient got.
statsobjectThe main stats plus opened and clicked.
stats.recipients_totalintegerEvery recipient of the blast, in any status.
stats.deliveredintegerDelivered sends: status delivered, plus sent through any sender but SendGrid, whose sends count once SendGrid confirms delivery.
stats.bouncedintegerSends that bounced.
stats.failedintegerSends that failed.
stats.suppressedintegerRecipients not emailed because the address is suppressed.
stats.pendingintegerRecipients not sent yet (pending or processing). Cancelled and skipped recipients count only in recipients_total.
stats.repliedintegerDelivered recipients who replied: a reply DialEcho matched to their send.
stats.opt_outsintegerRecipients who opted out: their matched reply was an opt-out, or the provider reported an unsubscribe. Unsubscribe-link clicks cannot be tied to a blast and are not counted.
stats.bounce_ratenumber | nullbounced / (delivered + bounced), rounded to 4 decimals; null while both are 0.
stats.reply_ratenumber | nullreplied / delivered, rounded to 4 decimals and never above 1; null while nothing was delivered.
stats.openedinteger | nullDelivered or sent recipients who opened it; null when the blast did not track opens.
stats.clickedintegerDelivered or sent recipients who clicked a link.
dailyarray of objectsOne row per UTC day with activity, oldest first.
daily.datestringThe UTC day, YYYY-MM-DD.
daily.sendsintegerSends that went out that day.
daily.bouncesintegerBounces recorded that day.
daily.repliesintegerDelivered recipients whose first reply came that day.

Example request ​

curl

bash
curl "https://development.agencydevworks.ai/v1/blasts/22222222-0000-4000-8000-000000000001" \
  -H "Authorization: Bearer dei_your_key"

JavaScript

js
const response = await fetch("https://development.agencydevworks.ai/v1/blasts/22222222-0000-4000-8000-000000000001", {
  headers: {
    "Authorization": "Bearer dei_your_key",
  },
});
const data = await response.json();

Example response ​

Status: 200 OK

json
{
  "id": "22222222-0000-4000-8000-000000000001",
  "name": "Fall re-engagement",
  "campaign_id": "cccccccc-0000-4000-8000-000000000001",
  "status": "completed",
  "created_at": "2026-11-02T14:00:00Z",
  "scheduled_at": "2026-11-03T15:00:00Z",
  "subject_template": "{{first_name}}, your solar quote is ready",
  "stats": {
    "recipients_total": 1200,
    "delivered": 1100,
    "bounced": 30,
    "failed": 5,
    "suppressed": 40,
    "pending": 20,
    "replied": 25,
    "opt_outs": 4,
    "bounce_rate": 0.0265,
    "reply_rate": 0.0227,
    "opened": null,
    "clicked": 44
  },
  "daily": [
    { "date": "2026-11-03", "sends": 600, "bounces": 12, "replies": 9 },
    { "date": "2026-11-04", "sends": 535, "bounces": 18, "replies": 16 }
  ]
}

Errors ​

HTTPCodeWhen
403insufficient_scopeThe key does not have blasts:read. Checked before the query is validated.
404not_foundThe blast does not exist or the key cannot read it: another organization, a campaign outside the key, or one where the key's member cannot use email blasts.
422invalid_requestblast_id is not a UUID.
503dependency_unavailableBlast data or the access check is temporarily unavailable. Retry with backoff.

Every endpoint can also answer 401 invalid_api_key, 429 rate_limited and 503 dependency_unavailable. See Errors in the overview.