Skip to main content
September 2026
Historical note · September 2026 · Describes Brew as of September 2026. Each item links to the guide for current behavior.
September’s theme was quiet failures, and each one now stops and says why:
  • A publish could let every fire fail.
  • A send could be created for zero people.
  • An import could read UK dates as American.
We also shipped flows, one library for every image, and unsubscribe lists per domain. The API Changelog has the full contract for every change below.

New

  • Organization keys. One API key or agent connection can reach every brand in your organization. See Organization Keys.
  • Brew University. Eight short walkthroughs play from the Home page. See Brew University.
  • Flows. Real signup and newsletter sequences from other brands, with the day each email landed. Remix one and Brew builds a draft automation with the same timing and emails written for your brand. See Remix a Flow.
  • One library for every image. Assets holds your logos, the images from your site, your uploads, and everything Brew generated. Filter by kind, crop and adjust, or delete. See Assets.
  • Unsubscribe lists per domain. Each marketing domain keeps its own list, on the API and MCP first. See Unsubscribe Lists for Every Domain.

Agents & API

  • Count events instead of listing them. GET /v1/analytics/events takes groupBy and bucket, so clicks per link or unsubscribes per reason is one call. See Count Events Instead of Listing Them.
  • A fire names what it couldn’t start. A trigger fire used to answer “triggered” with nothing running and no reason. It now lists each automation that didn’t start, and why, in notStarted[].
  • Fire refusals name every bad field. A payload that fails its contract comes back with each offending field and the schema to fix it against.
  • API keys are managed in the dashboard only. Creating or revoking a key needs a signed-in admin, so a leaked key can never mint another. See Key Lifecycle.
  • Timeouts cover the whole response. In SDK 11.3.0 and CLI 0.10.0, a timeout or cancel also stops a response that stalls mid-body. See Timeouts and Cancellation.

Improvements

  • Publish refuses merge tags the trigger doesn’t declare. An automation using {{ trigger.code }} on a trigger without code used to publish, then fail on every fire without saying so. Now publish stops and names the tag. See When a Tag Does Not Resolve.
  • A send that would reach nobody is refused. If every contact is unsubscribed, suppressed, or undeliverable, Send now stops and tells you why. A send that skips some contacts says how many and for what reason. See Send Options.
  • Searching a whole address finds that contact. It used to match every contact sharing a word, such as gmail.
  • Valid means a check ran. A contact reads Valid only after a real deliverability check, never from the free format check alone.
  • Re-subscribing an opt-out is refused. The API, MCP, and imports never re-subscribe anyone. A person on your team does it from the contact’s page. See Unsubscribes.
  • Imports can unsubscribe existing contacts. A subscribed column set to false, or a status such as unsubscribed or cleaned, now applies to contacts you already have.

Fixes

  • Day-first dates import in the right month. A UK file’s 03/04/2026 is now 3 April, not 4 March. Brew reads the whole column in one order. See Custom Properties.
  • The credit balance reads correctly past the plan cap. Readouts counted bonus-credit spending twice. Charges were always right, so nothing is owed.
  • Automation runs filter by recipient. The recipientEmail filter was accepted and ignored. It now applies.