Endpoints
- Create a draft blast
- Attach an audience with
PUT .../audience - Attach an email with
PUT .../email - Schedule it or send it now
status moves through draft → scheduled → sending → sent, with failed, cancelled, and archived as side exits. The audience and email are only editable while the blast is a draft.
Create a Blast
Returns
201 Created with the blast object.
Set the Audience
200 OK with the updated blast object.
Existing List
Inline Static List
Inline Dynamic List
Audience Rules
Dynamic audiences are defined by a rule tree of groups and conditions. Rule objects use camelCase keys, unlike the rest of the public API — they pass through to the segment engine verbatim.source:
Groups combine children with
operator: "and" (default) or "or" and can nest up to 5 levels deep, with at most 100 nodes per tree. Shorthand operator aliases (eq, neq, gt, gte, lt, lte, member_of, occurred, …) are accepted. email_step conditions are not allowed in audiences — they only work inside flow condition steps.
Set the Email
{"source": "existing", "email_id": "..."}, or create one inline:
Omit both
template_id and html for a blank branded scaffold. Returns 200 OK with the updated blast object.
The attached email must be approved before the blast can be scheduled or sent. Inline emails start as drafts — take the
email.email_id from the response and approve it via POST /v1/emails/{emailId}/approve.Approval Readiness
GET /v1/email-blasts/{blastId} on a draft includes an approval_readiness object listing what still blocks sending:
400 Bad Request with error_code: "campaign_not_ready" and the same approval_readiness details.
Schedule a Blast
Returns
200 OK with the blast in scheduled status. Use POST .../unschedule to cancel a scheduled send and return the blast to draft.
Free plan: scheduling always succeeds, but the limits are re-checked when the schedule fires. If at send time the blast’s recipient count exceeds what remains of the day’s 100-email allotment — or the workspace is over its 1,000-contact allowance — the blast is automatically cancelled instead of sent:
status becomes cancelled, cancelled_reason is set to daily_email_limit or contact_allowance, no emails go out, and scheduled_at keeps the originally scheduled time. A/B test deliveries are guarded the same way at their send moments. Pro and Max sends are never auto-cancelled.Send Now
operational flag and starts the send immediately through the async pipeline. Returns 202 Accepted with the blast in sending status; poll GET /v1/email-blasts/{blastId} for progress counters.
On the Free plan, a send that would exceed the remaining daily 100-email allotment (or a workspace over its 1,000-contact allowance) is rejected up front with 403 Forbidden and error_code: "free_plan_email_limit" — the blast stays an editable draft, nothing is cancelled:
Blast Object
200 OK
cancelled_at is stamped on every cancelled blast. cancelled_reason stays null for user-initiated cancels; it is daily_email_limit or contact_allowance when the platform auto-cancelled a scheduled Free-plan blast at send time (see Schedule a Blast) — those blasts sent nothing and keep their original scheduled_at.
List Blasts
Responses contain
blasts and a pagination object with page, limit, total, and totalPages.
Recipients and Engagement
category: recipients (everyone prepared for the send, the default), sent, delivered, opened, clicked, bounced, unsubscribed, or spam. Also accepts page, limit, search, sort (engagement *_at timestamps sort contacts without that event last), and order.
Responses contain contacts and a pagination object:
Export to CSV
202 Accepted with an export job. Poll the job until status is completed, then fetch the file from its download_url:
Rename, Archive, Delete
PATCH /v1/email-blasts/{blastId}updatesnameand/ordescription.POST /v1/email-blasts/{blastId}/archivearchives a blast that is not mid-send.DELETE /v1/email-blasts/{blastId}deletes it and returns{"blast_id": "...", "deleted": true}. Scheduled blasts must be unscheduled first, and archived blasts cannot be deleted.
Common Errors
Next: Manage Triggered Flows
Automate multi-step email journeys that enroll contacts on triggers.