> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brew.new/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> New features, improvements, and updates to Brew

<Update label="July 2026" description="API v1 — preview a design across real inboxes & devices">
  ## Public API v1 — see how an email renders in real inboxes

  New **`POST /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_dt` for 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 retryable `503` and is not billed; unknown client ids
    are rejected with a `422` before 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_clients` MCP tool and as
    `brew.emails.previewClients(...)` in the SDK.
</Update>

<Update label="June 2026" description="API v1 — POST /v1/emails accepts an optional marketing category">
  ## 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 `category` for the previous behavior. The
    same field is available on the `create_email_design` MCP tool and as
    `brew.emails.generate({ prompt, category })` in the SDK.
</Update>

<Update label="June 2026" description="API v1 — new POST /v1/sends/{sendId}/cancel">
  ## 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-`canceled` send returns `200`. Once the send
    is `sending`, `sent`, or `failed` it is `409 SEND_NOT_CANCELLABLE`;
    an unknown / cross-brand id is `404 SEND_NOT_FOUND`. `sends`
    scope. The SDK method is `brew.sends.cancel(sendId)`.
</Update>

<Update label="June 2026" description="API v1 renames — /v1/account → /v1/usage, host-image → add-image">
  ## 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 the `emails` scope. The SDK method moves
    from `brew.account.get()` to `brew.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 from
    `brew.content.hostImage()` to `brew.content.addImage()`.
</Update>

<Update label="June 2026" description="API v1 read-collapse — flat reads, polymorphic send, email import">
  ## 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 runs `GET /v1/automations/runs?automationRunId=`
    (`?include=logs`), triggers `?triggerEventId=`, trigger instances
    `?triggerInstanceId=`, and sends
    `GET /v1/analytics/sends?sendId=` (`?include=events`, also
    `?emailId=`). The single-send detail row carries `previewImage`,
    so `POST /v1/emails/{emailId}/preview`,
    `GET /v1/emails/{emailId}/versions`, and
    `GET /v1/emails/{emailId}/sends` were removed (on-demand rendering
    is `POST /v1/content/html-to-png`).
  * **One polymorphic send.** `POST /v1/sends/test` folded into
    `POST /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/contacts` and
    `GET /v1/contacts/{email}` were replaced by
    `POST /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 existing `html`, `mjml`, or `jsx`
    into 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-`q` browse stays free.
  * **Also removed:** `POST /v1/audiences/{audienceId}/duplicate`.

  The TypeScript SDK keeps its factory names: every read is one
  `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](/api-reference/api/api-introduction),
  [SDK overview](/sdks/overview), and the `@brew.new/sdk` changelog.
</Update>

<Update label="June 2026" description="API v1 restructure — decoupled sends, 3-domain surface, /v1/help">
  ## 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.** `automations` owns
    `/v1/automations/*` plus `/v1/automations/triggers(/{id}/fire)`
    (renamed from `/v1/triggers`) and `/v1/automations/runs(/{runId})`
    (moved from `/v1/analytics/automations/runs`). `analytics` owns all
    reporting, including `/v1/analytics/sends(/{sendId}/events)` (send
    reads, moved off `GET /v1/sends`) and
    `/v1/analytics/trigger-instances` (the fired-trigger log, moved off
    `/v1/events`). `sends` is the action only —
    `POST /v1/sends` and `POST /v1/sends/test`.
  * **`POST /v1/sends`** now takes either a saved `audienceId` or an
    inline `to` list (≤ 50) and returns a `sendId` you 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, alongside `GET /v1/llms.txt`.
  * **No more `dry_run`.** Credit-metered operations just charge on
    success (`402 INSUFFICIENT_CREDITS` when short); check your balance
    with `GET /v1/account`.
  * **`POST /v1/content/host-image`** is now credit-metered and saves
    the image into the brand image library.
  * **Removed:** `/v1/me`, `/v1/usage` (use `GET /v1/account`),
    `/v1/integrations`, the single-template `GET /v1/templates/{emailId}`
    (the list `GET /v1/templates` stays and now returns `html` +
    `previewImage` per row), and automation-run replay.

  See the updated [API introduction](/api-reference/api/api-introduction)
  and the `@brew.new/sdk` changelog. The entries below describe earlier
  iterations of the v1 surface — paths noted there have since moved as
  summarized above.
</Update>

<Update label="June 2026" description="API v1 hardening — 7 new endpoints, pagination, scopes">
  ## 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 by `recipientEmail` for a contact's full timeline), and `GET /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`/`cursor` and returns a `pagination` envelope.
  * **Lean lists + `include=`:** `GET /v1/templates` and `GET /v1/automations` are lean by default — pass `?include=html` / `?include=graph` to opt into the heavy fields.
  * **Granular scopes:** new least-privilege `domains`, `sends`, and `audiences` scopes; the coarse scopes still satisfy them, so existing keys are unaffected.

  New TypeScript SDK methods: `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](/api-reference/guides/monitor-campaign-sends), and the `@brew.new/sdk` changelog.
</Update>

<Update label="June 2026" description="API v1 lifecycle expansion">
  ## 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 their `filters`, member `count`, and ISO timestamps.
  * **Domains** gained a full lifecycle: add → verify → set sender defaults → delete. `GET /v1/domains` now lists every domain (incl. `pending` rows + the DNS `records` to publish); `?sendableOnly=true` returns just the send-ready set.
  * **Analytics** is now queryable: `GET /v1/analytics/campaigns` (lifetime per-campaign KPIs) and `GET /v1/analytics/automations` (windowed per-automation performance + totals).
  * **Emails** gained delete, version history (`?include=versions`), and non-destructive version restore.

  **Breaking:** `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.
</Update>

<Update label="May 2026" description="Documentation refresh">
  ## 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.
</Update>

<Update label="April 2026" description="Multi-brand, AI agents, and Trigger events">
  ## 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.
</Update>

<Update label="March 2026" description="Five new ESP integrations and one-click OAuth">
  ## 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.
</Update>

<Update label="February 2026" description="Contact verification, sender health, and onboarding">
  ## 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.
</Update>

<Update label="January 2026" description="HubSpot, automations, and visual editing">
  ## 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](/sdks/openapi-codegen)).
</Update>

<Update label="December 2025" description="GIF generation, analytics, and templates">
  ## GIF Generation

  Generate animated GIFs for your emails using AI. Powered by Vercel Sandbox for reliable rendering.

  ## Analytics Dashboard

  Full analytics page with event tracking - delivered, opened, clicked, bounced, and complained. Includes geographic data visualization, recipient search, and time-range filtering from 1 hour to 1 year.

  ## Visual Image Editing

  Click any image in the email preview to replace, resize, or edit it. AI-powered image editing with link preservation.

  ## Templates Gallery

  Browse and remix thousands of real email templates from leading brands. All template pages are statically generated for instant loading. Remix any template with your brand identity in one click.

  ## Marketing Website

  Launched the public marketing site with pricing page, company showcase, testimonials, blog, and FAQ section.

  ## Brevo Integration

  Export email templates to Brevo for email marketing and transactional emails.
</Update>

<Update label="November 2025" description="Sending, audience management, and the platform">
  ## Email Sending

  Send campaigns and transactional emails directly from Brew. Full Resend integration for best-in-class deliverability with domain verification, DKIM, SPF, and DMARC support.

  ## Audience Management

  Import contacts via CSV upload. View contact details with activity timelines showing all email engagement events. Create dynamic audiences using AI-powered natural language filtering.

  ## Automations

  Build automated email sequences triggered by user actions or time delays. Visual flow editor with conditional branching and multiple email steps.

  ## Brand Extraction

  Enter any website URL and Brew extracts your logo, colors, fonts, and brand style in about 30 seconds. Every AI-generated email automatically matches your brand.

  ## Transactional Emails

  Send transactional emails via API - order confirmations, password resets, notifications. Each transactional email is AI-generated and on-brand.

  ## Slack Integration

  Create and iterate on emails directly from Slack. Mention @brew in any channel or thread to start a conversation with the AI email assistant.

  ## API Keys

  Create and manage API keys from Settings for programmatic access to contacts, automations, and transactional email endpoints.

  ## Inbound Email Processing

  Forward emails to your Brew agent address and they're automatically converted from HTML to editable format, ready to remix with your brand.
</Update>

<Update label="October 2025" description="AI email creation and the foundation">
  ## AI Email Creation

  Describe what you want in plain English and Brew generates a complete, responsive email with proper structure, styling, and content. Supports campaigns, automations, and transactional emails.

  ## Multi-Model Support

  Choose from Claude (Anthropic), GPT (OpenAI), and Gemini (Google) for email generation. Extended thinking mode available for deeper analysis and higher quality output.

  ## AI Image Generation

  Generate custom hero images, product photos, and illustrations directly in your emails using AI.

  ## Email Remixing

  Transform any email template with your brand identity while preserving the original layout and structure.

  ## Version History

  Every edit creates a new version. Browse previous versions and restore any earlier state of your email.

  ## Reasoning Mode

  Enable extended thinking for the AI to show its reasoning process, producing more thoughtful and strategic email content.
</Update>
