Skip to main content
GET /v1/analytics/events is a unified event feed across four domains, email, automation, trigger, and inbound. Filter by recipientEmail to get one contact’s complete engagement timeline, or by eventType / automationId / sendId to slice the whole brand. Requires the emails scope. Every delivery event attaches to the sendId it came from, so you can also scope the feed to a single send. To pull just one send’s per-recipient events, read that send with GET /v1/analytics/sends?sendId=…&include=events. See Monitor campaign sends. When from/to are omitted the API defaults to the last 7 days. The response carries { data, pagination, range }.

One contact’s timeline

curl -G "https://brew.new/api/v1/analytics/events" \
  -H "Authorization: Bearer $BREW_API_KEY" \
  --data-urlencode "recipientEmail=jane@example.com" \
  --data-urlencode "limit=100"
import { createBrewClient } from '@brew.new/sdk'

const brew = createBrewClient({ apiKey: process.env.BREW_API_KEY! })

const { data, range } = await brew.analytics.events({
  recipientEmail: 'jane@example.com',
})
for (const event of data) {
  console.log(event.occurredAt, event.domain, event.eventType, event.emailName)
}

Export a full timeline

The SDK auto-pager walks every page so you never touch the cursor:
const timeline = []
for await (const event of brew.analytics.eventsAll({
  recipientEmail: 'jane@example.com',
  from: '2026-01-01T00:00:00.000Z',
})) {
  timeline.push(event)
}

Filter by event type or automation

// Every bounce in the brand over the last 7 days
const { data: bounces } = await brew.analytics.events({ eventType: 'bounced' })

// Everything that happened inside one automation
const { data: runEvents } = await brew.analytics.events({
  automationId: 'auto_welcome',
})

// Every event from one campaign send
const { data: sendEvents } = await brew.analytics.events({
  sendId: 'snd_8fK2mQ4p',
})
Each EventRow carries domain, eventType, recipientEmail?, sendId?, emailId?/emailName?, automationId?/automationName?, nodeId?, mode? (live | test), and a human summary?.

See also

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:

Search Documentation

Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.

ChatGPT/Claude Integration

Click “Open in ChatGPT” at the top right of any page to analyze documentation with ChatGPT or Claude for deeper insights.