Analytics Report
Totals and daily, campaign, step and inbox breakdowns for a date range.
GET
https://api.foxreach.io/ api/ v1/ analytics/ reportsRequires an API key with the read scope.
Counts follow the Reports page: a bounced email counts as sent, replies are distinct leads, and replies from bounce, warmup and unrelated mail are left out. Days are bucketed in the timezone of the user who created the API key.
With no filters the report covers every campaign in the workspace for the last 30 days.
Query Parameters#
startstringqueryFirst day,
YYYY-MM-DD. Defaults to 30 days before end.endstringqueryLast day,
YYYY-MM-DD. Defaults to today in the key owner's timezone. A range is at most 365 days.campaignIdsstringqueryComma-separated campaign ids to include.
accountIdsstringqueryComma-separated email account ids to include.
Response#
dataobjectShow data
rangeobjectstart, end and the timezone used to bucket days.totalsobjectShow totals
sentintegerEmails that left the system (sent, delivered or bounced).
repliedintegerDistinct leads that replied.
interestedintegerDistinct leads categorised interested.
bouncedintegerEmails that bounced.
openedintegerOpens, from campaigns with open tracking on.
clickedintegerLink clicks, from campaigns with click tracking on.
notInterestedintegerDistinct leads categorised not interested.
outOfOfficeintegerDistinct leads categorised out of office.
unsubscribedintegerDistinct leads categorised unsubscribe.
replyRatenumberReplies divided by sent, or
null when nothing was sent.positiveRatenumberInterested divided by replies, or
null.bounceRatenumberBounced divided by sent, or
null.openRatenumberOpened divided by sent, or
null when open tracking was off.clickRatenumberClicked divided by sent, or
null when click tracking was off.dailyarrayOne row per day with the same counters and a
date.campaignsarrayOne row per campaign with
id, name, status and the counters.stepsarrayOne row per campaign, step and variant.
accountsarrayOne row per sending inbox with
accountId, email and the counters.Errors#
| Status | Description |
|---|---|
401 | Missing, invalid, revoked or expired API key |
403 | API key does not have the required scope: read |
400 | start is after end, or the range is longer than 365 days |
404 | A campaign or account id is not in this workspace |
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, see Rate Limiting.
Was this page helpful?
View as MarkdownLast updated November 4, 2026