Get Campaign Activity
Summary, sparkline and a paginated feed of what a campaign did.
GET
https://api.foxreach.io/ api/ v1/ campaigns/{campaign_id}/ activityRequires 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#
typestringqueryComma-separated event types:
sent, reply, open, bounce, click, error.accountIdstringqueryOnly events from this sending account.
stepstringqueryComma-separated step numbers, for example
1,2.searchstringqueryMatch on the recipient or sender address, the subject, or the reply text.
startDatestringqueryEarliest date, ISO 8601.
endDatestringqueryLatest date, ISO 8601.
sortBystringquerytimestamp (default), type, leadEmail or sequenceStep.sortOrderstringquerydesc (default) or asc.pageintegerquerydefault 1Page number.
pageSizeintegerquerydefault 501 to 100.
Path Parameters#
campaign_idstringpathrequiredThe campaign.
Response#
dataobjectShow Activity
summaryobjectsent, 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.totalintegerEvents matching the filters.
pageintegerThis page.
pageSizeintegerPage size used.
pauseReasonobject | nullWhy a paused campaign paused:
reason, auto, timestamp.blockReasonobject | nullWhy an active campaign is sending nothing:
code, detail, at.breakerStatusobject | nullSet while the bounce breaker is holding the campaign.
completionReasonobject | nullSet when the campaign completed because its leads were removed.
Errors#
| Status | Description |
|---|---|
401 | Missing, invalid, revoked or expired API key |
403 | API key does not have the required scope: read |
404 | Campaign not found in this workspace |
422 | pageSize over 100 or page below 1 |
Rate Limit#
- 300 requests per minute, shared by every
readcall in your workspace. Fixed 60-second window. - Every response includes
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset(unix epoch seconds) andX-RateLimit-Bucket(read). - A
429response includes aRetry-Afterheader (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