Async Operations
An automation dry run (
dryRun: true) returns a synchronous preview instead of starting an audience run.
An automation test omitting testRecipient sends no email; setting it delivers test copies to that address.
POST /v1/sends with test: true returns 200 { status: "completed", recipient } without a production send row.
Production sends return 202 with queued, scheduled, or pending_approval; approval is required before a held send starts.
Fire a Trigger, Then Poll the Run
One trigger fire can start several published automations. Inspect every returned run ID.notStarted[] explains failed starts, and counts.skipped counts recipients covered by a suppression.
If no bound automation is published, the fire returns 422 NO_PUBLISHED_AUTOMATION and there are no runs to poll.
Inspect the trigger instance to understand an accepted fire that returned no run IDs.
For a returned run ID:
status and logs at the top level.
Organization keys also need X-Brand-Id; see Authentication.
Recommended Polling Cadence
For a short run, start with one read every two seconds and bound the wait to your application’s deadline. For flows with longwait nodes, read when you need an update. Avoid keeping a loop open for days.
Client previews provide nextPollAfterMs; honor it while work is pending.
On 429, honor Retry-After. Budget all concurrent polls against the Rate Limits.
If your polling deadline expires, retain the job ID to inspect later.
Terminal States
scheduled, queued, running, and paused are not terminal.
partially_completed means some work failed; inspect the result rather than treating it as full success.
Queue a Send, Then Verify
ReadGET /v1/sends/{sendId} for delivery progress and aggregate stats.
Add ?include=events for per-recipient events. Sending is complete before all later opens or clicks have occurred.
Monitor Email Sends owns the detailed monitoring workflow.
Use Preview in Real Inboxes for rendering checks and the generated endpoint reference for placement-test schemas.
Idempotency on Async Retries
Once you have a job ID, poll it instead of submitting new work. If the starting request’s outcome is unknown, replay the same inputs with the same retry key. Idempotency owns the replay contract. Raw HTTP and SDK email generation waits for the saved design or an explanatory response. MCP generation can return while the design is still generating; pollget_email with the returned IDs.
Cancel Instead of Waiting
These actions cannot recall emails already delivered.
Use the generated endpoint reference for action preconditions and response schemas.
Why No Webhooks Today
Outbound lifecycle webhooks remain on the roadmap. Polling is the supported way to follow these jobs today.Need Help?
Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:- Self-Service Tools
- Talk to Our Team
Search Documentation
Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.
Ask ChatGPT or Claude
Click here to open the Copy page menu at the top of this page, then send the page to ChatGPT, Claude, or your editor.