curl -X GET "https://api.foxreach.io/api/v1/leads/cld_xyz789/activity" \
-H "X-API-Key: otr_your_key"
import requests
response = requests.get(
"https://api.foxreach.io/api/v1/leads/cld_xyz789/activity",
headers={"X-API-Key": "otr_your_key"},
)
data = response.json()
const response = await fetch(
"https://api.foxreach.io/api/v1/leads/cld_xyz789/activity",
{
headers: { "X-API-Key": "otr_your_key" },
}
);
const data = await response.json();
{
"data": {
"activities": [
{
"id": "rpl_abc123",
"type": "reply_received",
"subject": "Re: Quick question",
"bodyPreview": "Thanks for reaching out! I'd love to learn more...",
"status": null,
"campaignName": "Q1 Outreach",
"sequenceStep": null,
"emailType": null,
"openedAt": null,
"clickedAt": null,
"category": "interested",
"timestamp": "2025-01-20T14:30:00"
},
{
"id": "eml_001",
"type": "email_sent",
"subject": "Quick question, John",
"bodyPreview": "Hi John, I noticed Acme recently expanded...",
"status": "sent",
"campaignName": "Q1 Outreach",
"sequenceStep": 1,
"emailType": "campaign",
"openedAt": "2025-01-19T10:15:00",
"clickedAt": null,
"category": null,
"timestamp": "2025-01-18T09:00:00"
}
],
"campaigns": [
{
"campaignId": "cmp_def456",
"campaignName": "Q1 Outreach",
"status": "sent",
"currentStep": 1,
"totalSent": 1,
"totalOpened": 1,
"lastSentAt": "2025-01-18T09:00:00",
"nextSendAt": null,
"repliedAt": "2025-01-20T14:30:00"
}
]
}
}
Leads
Get Lead Activity
Retrieve the activity timeline and campaign memberships for a lead.
GET
/
api
/
v1
/
leads
/
{lead_id}
/
activity
curl -X GET "https://api.foxreach.io/api/v1/leads/cld_xyz789/activity" \
-H "X-API-Key: otr_your_key"
import requests
response = requests.get(
"https://api.foxreach.io/api/v1/leads/cld_xyz789/activity",
headers={"X-API-Key": "otr_your_key"},
)
data = response.json()
const response = await fetch(
"https://api.foxreach.io/api/v1/leads/cld_xyz789/activity",
{
headers: { "X-API-Key": "otr_your_key" },
}
);
const data = await response.json();
{
"data": {
"activities": [
{
"id": "rpl_abc123",
"type": "reply_received",
"subject": "Re: Quick question",
"bodyPreview": "Thanks for reaching out! I'd love to learn more...",
"status": null,
"campaignName": "Q1 Outreach",
"sequenceStep": null,
"emailType": null,
"openedAt": null,
"clickedAt": null,
"category": "interested",
"timestamp": "2025-01-20T14:30:00"
},
{
"id": "eml_001",
"type": "email_sent",
"subject": "Quick question, John",
"bodyPreview": "Hi John, I noticed Acme recently expanded...",
"status": "sent",
"campaignName": "Q1 Outreach",
"sequenceStep": 1,
"emailType": "campaign",
"openedAt": "2025-01-19T10:15:00",
"clickedAt": null,
"category": null,
"timestamp": "2025-01-18T09:00:00"
}
],
"campaigns": [
{
"campaignId": "cmp_def456",
"campaignName": "Q1 Outreach",
"status": "sent",
"currentStep": 1,
"totalSent": 1,
"totalOpened": 1,
"lastSentAt": "2025-01-18T09:00:00",
"nextSendAt": null,
"repliedAt": "2025-01-20T14:30:00"
}
]
}
}
Path Parameters
string
required
The unique identifier of the lead.
Response
object
Show Activity data
Show Activity data
array
Chronological list of activities (most recent first, up to 100).
Show Activity object
Show Activity object
string
Activity identifier.
string
email_sent or reply_received.string
Email subject line.
string
First 200 characters of the body.
string
For
email_sent: sent, failed, or bounced.string
Name of the associated campaign.
integer
Sequence step number (for
email_sent).string
For
email_sent: campaign, reply, or warmup.string
ISO 8601 timestamp if email was opened.
string
ISO 8601 timestamp if a link was clicked.
string
AI category (for
reply_received).string
ISO 8601 timestamp of the activity.
array
All campaign memberships for this lead.
Show Campaign membership
Show Campaign membership
string
Campaign ID.
string
Campaign name.
string
pending, sent, paused, or completed.integer
Current sequence step.
integer
Emails sent in this campaign.
integer
Emails opened.
string
ISO 8601 timestamp of last email sent.
string
ISO 8601 timestamp of next scheduled email.
string
ISO 8601 timestamp if lead replied.
curl -X GET "https://api.foxreach.io/api/v1/leads/cld_xyz789/activity" \
-H "X-API-Key: otr_your_key"
import requests
response = requests.get(
"https://api.foxreach.io/api/v1/leads/cld_xyz789/activity",
headers={"X-API-Key": "otr_your_key"},
)
data = response.json()
const response = await fetch(
"https://api.foxreach.io/api/v1/leads/cld_xyz789/activity",
{
headers: { "X-API-Key": "otr_your_key" },
}
);
const data = await response.json();
{
"data": {
"activities": [
{
"id": "rpl_abc123",
"type": "reply_received",
"subject": "Re: Quick question",
"bodyPreview": "Thanks for reaching out! I'd love to learn more...",
"status": null,
"campaignName": "Q1 Outreach",
"sequenceStep": null,
"emailType": null,
"openedAt": null,
"clickedAt": null,
"category": "interested",
"timestamp": "2025-01-20T14:30:00"
},
{
"id": "eml_001",
"type": "email_sent",
"subject": "Quick question, John",
"bodyPreview": "Hi John, I noticed Acme recently expanded...",
"status": "sent",
"campaignName": "Q1 Outreach",
"sequenceStep": 1,
"emailType": "campaign",
"openedAt": "2025-01-19T10:15:00",
"clickedAt": null,
"category": null,
"timestamp": "2025-01-18T09:00:00"
}
],
"campaigns": [
{
"campaignId": "cmp_def456",
"campaignName": "Q1 Outreach",
"status": "sent",
"currentStep": 1,
"totalSent": 1,
"totalOpened": 1,
"lastSentAt": "2025-01-18T09:00:00",
"nextSendAt": null,
"repliedAt": "2025-01-20T14:30:00"
}
]
}
}
Errors
| Status | Description |
|---|---|
404 | Lead not found |
Rate Limit
- 100 requests per minute, per API key. Fixed 60-second window.
- Every response includes
X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset(unix epoch seconds). - A
429response includes aRetry-Afterheader (seconds until the bucket resets).
Retry-After, exponential backoff, monitoring X-RateLimit-Remaining), see Rate Limiting.⌘I