Send an email
Sends an email design. Polymorphic on the test flag:
test: true→ a synchronous one-off TEST delivery of the design’s current (or pinned) body to a single address. Forces the Brew default sender (no verified domain needed), targets onetoaddress, and never creates aSendrow. Returns200{ status: "sent", recipient }.- default /
test: false→ a campaign send combining the design (emailId, optionally pinned toemailVersionId), a verifieddomainId, and a target — a savedaudienceIdOR inlineto(a single email or an array, max 50) — into one delivery event. The same design can be sent unlimited times; every call mints a new send. Returns202{ sendId, runId }— poll viaGET /v1/analytics/sends?sendId=.
Campaign target — provide EXACTLY ONE of audienceId or to. Inline recipients face the same unsubscribe/suppression gate and per-recipient quota as audience sends. For per-recipient event-driven delivery, publish an automation and fire its trigger (POST /v1/automations/triggers/{triggerEventId}/fire).
Brand scoping: resources (emailId, domainId, audienceId) living in a different brand surface as 404 so the API never confirms cross-brand existence.
Authorizations
Send your Brew API key as Authorization: Bearer brew_xxx.
Headers
Optional idempotency key for safe retries. Reusing the same key with the same request body returns the original response for 24 hours.
1 - 100The brand this request acts on. REQUIRED for organization-scoped credentials (otherwise 400 BRAND_ID_REQUIRED — there is no default brand); list ids with GET /v1/brands. Brand-scoped credentials may omit it, and sending a different brand returns 403 BRAND_SCOPE_MISMATCH. A brand outside your organization returns 404 BRAND_NOT_FOUND.
1 - 64Body
- Option 1
- Option 2
true 111Inbox preheader for this test send — overrides the design's JSX . Omit to deliver the design's own preview line.
200