Skip to content

Get Campaign Activity

Summary, sparkline and a paginated feed of what a campaign did.

GET/api/v1/campaigns/{campaign_id}/activity

Requires an API key with the read scope.

One call for the campaign's activity page: lifetime summary counts and rates, a 30-day sparkline, why a paused or blocked campaign is not sending, and a paginated feed of sends, opens, clicks, replies and bounces, newest first by default. The feed is assembled from the sent-email log and the replies, so very large campaigns with a wide date range cost more than small ones; narrow with type, step or dates.

Query Parameters#

typestringquery
Comma-separated event types: sent, reply, open, bounce, click, error.
accountIdstringquery
Only events from this sending account.
stepstringquery
Comma-separated step numbers, for example 1,2.
searchstringquery
Match on the recipient or sender address, the subject, or the reply text.
startDatestringquery
Earliest date, ISO 8601.
endDatestringquery
Latest date, ISO 8601.
sortBystringquery
timestamp (default), type, leadEmail or sequenceStep.
sortOrderstringquery
desc (default) or asc.
pageintegerquerydefault 1
Page number.
pageSizeintegerquerydefault 50
1 to 100.

Path Parameters#

campaign_idstringpathrequired
The campaign.

Response#

dataobject
Show Activity
summaryobject
sent, opened, clicked, bounced, replied and the rates openRate, replyRate, clickRate, bounceRate in percent.
sparklineobject[]
30 days, one entry per UTC day: date, sent, opened, replied, bounced.
itemsobject[]
The feed page. Each has id, type, timestamp, lead, account, sequenceStep, subject, bodyPreview, status, bounceType, errorMessage, openedAt, clickedAt.
totalinteger
Events matching the filters.
pageinteger
This page.
pageSizeinteger
Page size used.
pauseReasonobject | null
Why a paused campaign paused: reason, auto, timestamp.
blockReasonobject | null
Why an active campaign is sending nothing: code, detail, at.
breakerStatusobject | null
Set while the bounce breaker is holding the campaign.
completionReasonobject | null
Set when the campaign completed because its leads were removed.

Errors#

StatusDescription
401Missing, invalid, revoked or expired API key
403API key does not have the required scope: read
404Campaign not found in this workspace
422pageSize over 100 or page below 1

Rate Limit#

  • 300 requests per minute, shared by every read call in your workspace. Fixed 60-second window.
  • Every response includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (unix epoch seconds) and X-RateLimit-Bucket (read).
  • A 429 response includes a Retry-After header (seconds until the bucket resets).

For client-side patterns (Retry-After, exponential backoff, monitoring X-RateLimit-Remaining), see Rate Limiting.

Was this page helpful?
View as MarkdownLast updated November 4, 2026