Public API v1 — see how an email renders in real inboxes
NewPOST /v1/emails/{emailId}/client-previews renders a design’s
latest version across real email clients & devices — Gmail, Outlook,
Apple Mail, iOS (with dark-mode variants), plus Yahoo — and returns a
screenshot per client, rehosted on the Brew CDN.- Pass
clients(ids from the supported catalogue) to target specific inboxes/devices — e.g.outlook2021_win11_dm_dtfor Outlook 2021 on Windows in dark mode — or send{}for a popular default spread. - Fixed cost of 10 credits, charged only when at least one client
renders (
X-Credit-Cost: 10). A batch where zero clients finish in time returns a retryable503and is not billed; unknown client ids are rejected with a422before any paid work. - Slow clients that outlive the bounded render window come back in
pending— call again to retry just those. - Also available as the
preview_email_across_clientsMCP tool and asbrew.emails.previewClients(...)in the SDK.
Public API v1 — steer email design with a category
POST /v1/emails (“Create an email design”) now accepts an optional
category so a create gets the same category-tailored treatment the
in-app agent applies — exemplars, hero recipe, and personalization — instead
of a generic default.- Marketing categories only:
welcome,newsletter,promotional,product-launch,product-update,cart-abandonment,event-invitation,event-reminder,feedback-request,re-engagement,referral,business,internal,general. Transactional emails (receipts, password resets, order confirmations) are sent from automations with a trigger, not this endpoint, so those categories are not accepted. - Backward compatible — omit
categoryfor the previous behavior. The same field is available on thecreate_email_designMCP tool and asbrew.emails.generate({ prompt, category })in the SDK.
Public API v1 — cancel a send
New endpoint to pull back a send before it goes out.POST /v1/sends/{sendId}/cancel(“Cancel a send”). Cancels a scheduled or queued send →200 { sendId, status: 'canceled' }. Idempotent — an already-canceledsend returns200. Once the send issending,sent, orfailedit is409 SEND_NOT_CANCELLABLE; an unknown / cross-brand id is404 SEND_NOT_FOUND.sendsscope. The SDK method isbrew.sends.cancel(sendId).
Public API v1 — two operation renames
Two endpoints (and their SDK methods) were renamed for clarity. The request and response shapes are unchanged.GET /v1/account→GET /v1/usage(“Get usage”). The billing/quota surface —{ plan, credits, emailSends, period }— keeps the same shape and theemailsscope. The SDK method moves frombrew.account.get()tobrew.usage.get().POST /v1/content/host-image→POST /v1/content/add-image(“Add image”). Still optimizes the source image and saves it to the brand image library (fixed credit cost). The SDK method moves frombrew.content.hostImage()tobrew.content.addImage().
Public API v1 — flat reads + unified send
The v1 surface collapsed from 71 to 55 endpoints around one rule: one flat read per resource, identity in the query,?include=
opt-ins for the heavy detail. Plus a new way to bring existing
designs into Brew.- Reads are flat. The per-resource get-one paths are gone — pass
the id key to the list endpoint instead: emails
GET /v1/emails?emailId=(?include=html,versions), domains?domainId=, audiences?audienceId=(?include=count), automations?automationId=(?include=graph,versions), automation runsGET /v1/automations/runs?automationRunId=(?include=logs), triggers?triggerEventId=, trigger instances?triggerInstanceId=, and sendsGET /v1/analytics/sends?sendId=(?include=events, also?emailId=). The single-send detail row carriespreviewImage, soPOST /v1/emails/{emailId}/preview,GET /v1/emails/{emailId}/versions, andGET /v1/emails/{emailId}/sendswere removed (on-demand rendering isPOST /v1/content/html-to-png). - One polymorphic send.
POST /v1/sends/testfolded intoPOST /v1/sends— pass{ test: true }for the synchronous one-off QA send (200 { recipient }); omit it for the campaign send (202 { sendId }). - One contact read.
GET /v1/contactsandGET /v1/contacts/{email}were replaced byPOST /v1/contacts/search({ filters, audienceId?, search?, sort, count?, cursor }); a by-email lookup is a{ field: 'email', operator: 'equals' }filter. - New —
POST /v1/emails/import. Bring existinghtml,mjml, orjsxinto an editable Brew design (external images are re-hosted on the CDN). Usage-metered. - Semantic brand-image search.
GET /v1/brand/images?q=runs a credit-metered vector search (plus?type/?aspectRatio); the no-qbrowse stays free. - Also removed:
POST /v1/audiences/{audienceId}/duplicate.
list() (id/include/filters in the args), send/sendTest merged
into send(input) with test?, the contact read is search(), and
emails.import() is new. See the updated
API introduction,
SDK overview, and the @brew.new/sdk changelog.Public API v1 — decoupled-send restructure
A breaking restructure of the v1 surface around a single insight: emails are pure designs, and a send is the unit of delivery and analytics. A design now carries no type and no send state — it can be sent any number of times.- Sends, unified. Campaign sends and automation sends are one
entity. A campaign records one send; an automation records one send
per recipient. Every delivery event attaches to its
sendId. - Three clear domains.
automationsowns/v1/automations/*plus/v1/automations/triggers(/{id}/fire)(renamed from/v1/triggers) and/v1/automations/runs(/{runId})(moved from/v1/analytics/automations/runs).analyticsowns all reporting, including/v1/analytics/sends(/{sendId}/events)(send reads, moved offGET /v1/sends) and/v1/analytics/trigger-instances(the fired-trigger log, moved off/v1/events).sendsis the action only —POST /v1/sendsandPOST /v1/sends/test. POST /v1/sendsnow takes either a savedaudienceIdor an inlinetolist (≤ 50) and returns asendIdyou poll under/v1/analytics/sends.GET /v1/help— a no-auth, structured-JSON catalog of the whole API (scopes, credits, rate limits, every endpoint) for MCP / agent discovery, alongsideGET /v1/llms.txt.- No more
dry_run. Credit-metered operations just charge on success (402 INSUFFICIENT_CREDITSwhen short); check your balance withGET /v1/account. POST /v1/content/host-imageis now credit-metered and saves the image into the brand image library.- Removed:
/v1/me,/v1/usage(useGET /v1/account),/v1/integrations, the single-templateGET /v1/templates/{emailId}(the listGET /v1/templatesstays and now returnshtml+previewImageper row), and automation-run replay.
@brew.new/sdk changelog. The entries below describe earlier
iterations of the v1 surface — paths noted there have since moved as
summarized above.Public API v1 — hardening pass
Seven new endpoints plus cross-cutting normalization across the whole API.- New observability + discovery endpoints:
GET /v1/sends(campaign send list + stats),GET /v1/brand(the key’s brand + readiness),GET /v1/usage(API request volume + trend),GET /v1/analytics/events(unified event explorer — filter byrecipientEmailfor a contact’s full timeline), andGET /v1/integrations(triggerable integration-event catalog). - Test/preview sends:
POST /v1/sends { mode: 'test' }sends a one-off preview to a single inbox — no verified domain or audience required, and it doesn’t consume the email’s live-send slot. - Automation run replay:
POST /v1/automations/runs { automationRunId, mode: 'replay' }re-runs a prior run against the current saved draft. - Uniform cursor pagination: every list endpoint now accepts
limit/cursorand returns apaginationenvelope. - Lean lists +
include=:GET /v1/templatesandGET /v1/automationsare lean by default — pass?include=html/?include=graphto opt into the heavy fields. - Granular scopes: new least-privilege
domains,sends, andaudiencesscopes; the coarse scopes still satisfy them, so existing keys are unaffected.
brew.brand.get(), brew.usage.get(), brew.integrations.list(), brew.analytics.sends.{list,listAll,get}() + brew.emails.sendTest(), and brew.analytics.{events,eventsAll}(). See the updated API reference, the new API guides, and the @brew.new/sdk changelog.Public API v1 — full lifecycle
The v1 API now covers the whole loop end-to-end for an org + brand API key.- Audiences are now full CRUD (
POST/PATCH/DELETE+ single fetch), and rows carry theirfilters, membercount, and ISO timestamps. - Domains gained a full lifecycle: add → verify → set sender defaults → delete.
GET /v1/domainsnow lists every domain (incl.pendingrows + the DNSrecordsto publish);?sendableOnly=truereturns just the send-ready set. - Analytics is now queryable:
GET /v1/analytics/campaigns(lifetime per-campaign KPIs) andGET /v1/analytics/automations(windowed per-automation performance + totals). - Emails gained delete, version history (
?include=versions), and non-destructive version restore.
POST/PATCH /v1/triggers now return the uniform { triggers: [row] } envelope (was { trigger }); contact timestamps are ISO-8601 strings. See the updated API reference + the @brew.new/sdk changelog.Documentation refresh
Reorganized the docs to mirror the product. New top-level sections: Get started, Emails, Audience, Brand, Analytics, Reference. New keystone pages: How Brew works (chat, canvas, variants, imports, sending), Automations, and Multiple brands. The Automations page explains how marketing flows, transactional emails, and trigger events fit together.Multi-brand
Run more than one brand from a single account. Each brand has its own audience, automations, sending domain, and analytics. Switch brands from the sidebar and the entire app re-scopes. Available on Pro and higher plans.Use Brew with AI agents
Brew is now positioned as the first AI-native ESP. Any agent that can call an HTTP API can drive the product end-to-end. Already works with OpenClaw, Claude, Replit, Lovable, and Viktor. New “AI agents” group in Integrations.Trigger events admin
New Settings → Triggers surface for defining custom events with payload schemas. Test events end-to-end before going live. Stripe events are auto-discovered from connected Stripe accounts.Brand switcher in the sidebar
Active brand now lives at the top of the sidebar with a one-click switcher. Brand-scoped data updates everywhere as you switch.ESP integrations rollout
Five new export targets so you can keep sending where your team already works: Iterable, Postmark, OneSignal, Mailgun, and SendGrid. Each takes a single API key and exports Brew templates directly into your account.OAuth for Mailchimp, Mailjet, and Stripe
Mailchimp connects with one-click OAuth. Mailjet and Stripe connections were updated for the new OAuth flow. No more manual API key copying for the providers that support it.Canvas resize and version preview
You can now drag-resize any email on the canvas and preview previous versions inline without leaving the board. Layouts persist across reloads.Contact verification
Contacts added through any path (CSV, API, integrations, or manual entry) are now automatically verified. Invalid, spam trap, and risky addresses are suppressed before you ever send to them.Sender health monitoring
New sender health dashboard tracks your bounce rate, complaint rate, and contact quality in real time. If thresholds are exceeded, sending pauses automatically to protect your reputation.Onboarding improvements
Simplified onboarding flow with cleaner step-by-step guidance. The domain setup step now redirects to Settings instead of embedding the full configuration inline.HubSpot Integration
Connect your HubSpot account via OAuth and export email templates directly to HubSpot Marketing Hub. Exported emails appear in a dedicated Brew folder, and re-exporting updates the existing version.Custom Automation Events
Trigger automations via API with typed payloads. Define custom events with specific data schemas for precise control over your email workflows.Visual Email Editor
Edit text, images, and links directly in the email preview. Click any element to modify it inline - no need to go back to the AI chat. Changes are saved as new versions.Reference Emails
Set a design reference for your brand. Forward an email you like, browse templates from other brands, or upload HTML. Brew uses it as a design blueprint while applying your own brand identity.Domain Settings Redesign
New stepper-based domain setup with live email preview, collapsible advanced options, grouped DNS records with color-coded verification status, and a “Powered by Resend” trust badge.Billing Improvements
Credits and email sends now displayed as circles on the Billing page with inline sparkline charts. Usage tab removed from Settings and consolidated into the Billing page.Agent V2
Reduced context window for faster, more focused AI responses. Rolling conversation context keeps recent messages relevant without hitting token limits.Custom Brand Instructions
Add specific guidelines for how the AI should write for your brand - tone preferences, words to avoid, formatting rules, and more.API Specification
Published OpenAPI 3.1 specification covering contacts, automations, triggers, automation runs, emails, sends, audiences, domains, fields, and templates. Official TypeScript SDK (@brew.new/sdk) is available; generate clients for other languages from the OpenAPI spec at https://brew.new/openapi/public-api-v1.yaml (see Generate your own SDK).