curl -X GET "https://api.foxreach.io/api/v1/campaigns?status=active" \
-H "X-API-Key: otr_your_key"
from foxreach import FoxReach
client = FoxReach(api_key="otr_your_key")
campaigns = client.campaigns.list(status="active")
import { FoxReach } from "foxreach";
const client = new FoxReach({ apiKey: "otr_your_key" });
const campaigns = await client.campaigns.list({ status: "active" });
{
"data": [
{
"id": "cmp_abc123",
"name": "Q1 Outreach",
"status": "active",
"timezone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingStartHour": 9,
"sendingEndHour": 17,
"dailyLimit": 50,
"sentToday": 12,
"context": null,
"totalLeads": 500,
"totalSent": 234,
"totalDelivered": 230,
"totalBounced": 4,
"totalReplied": 18,
"totalOpened": 87,
"createdAt": "2025-01-10T08:00:00",
"updatedAt": "2025-01-15T10:30:00",
"startedAt": "2025-01-10T09:00:00",
"completedAt": null
}
],
"meta": {
"page": 1,
"pageSize": 20,
"total": 1,
"totalPages": 1
}
}
Campaigns
List Campaigns
Retrieve a paginated list of campaigns in your workspace.
GET
/
api
/
v1
/
campaigns
curl -X GET "https://api.foxreach.io/api/v1/campaigns?status=active" \
-H "X-API-Key: otr_your_key"
from foxreach import FoxReach
client = FoxReach(api_key="otr_your_key")
campaigns = client.campaigns.list(status="active")
import { FoxReach } from "foxreach";
const client = new FoxReach({ apiKey: "otr_your_key" });
const campaigns = await client.campaigns.list({ status: "active" });
{
"data": [
{
"id": "cmp_abc123",
"name": "Q1 Outreach",
"status": "active",
"timezone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingStartHour": 9,
"sendingEndHour": 17,
"dailyLimit": 50,
"sentToday": 12,
"context": null,
"totalLeads": 500,
"totalSent": 234,
"totalDelivered": 230,
"totalBounced": 4,
"totalReplied": 18,
"totalOpened": 87,
"createdAt": "2025-01-10T08:00:00",
"updatedAt": "2025-01-15T10:30:00",
"startedAt": "2025-01-10T09:00:00",
"completedAt": null
}
],
"meta": {
"page": 1,
"pageSize": 20,
"total": 1,
"totalPages": 1
}
}
Query Parameters
integer
default:"1"
Page number (starts at 1).
integer
default:"20"
Number of campaigns per page (1-100).
string
Filter by status:
draft, active, paused, or completed.Response
array
Array of campaign objects.
Show Campaign object
Show Campaign object
string
Unique campaign identifier.
string
Campaign name.
string
Campaign status:
draft, active, paused, completed.string
Sending timezone (e.g.,
UTC, America/New_York).array
Days of the week to send (1=Mon, 7=Sun).
integer
Start hour for sending (0-23).
integer
End hour for sending (0-23).
integer
Maximum emails per day.
integer
Emails sent today.
string
AI context for draft replies.
integer
Total leads enrolled.
integer
Total emails sent.
integer
Total emails delivered.
integer
Total bounced emails.
integer
Total replies received.
integer
Total email opens.
string
ISO 8601 timestamp.
string
ISO 8601 timestamp.
string
When the campaign was first started.
string
When the campaign completed.
curl -X GET "https://api.foxreach.io/api/v1/campaigns?status=active" \
-H "X-API-Key: otr_your_key"
from foxreach import FoxReach
client = FoxReach(api_key="otr_your_key")
campaigns = client.campaigns.list(status="active")
import { FoxReach } from "foxreach";
const client = new FoxReach({ apiKey: "otr_your_key" });
const campaigns = await client.campaigns.list({ status: "active" });
{
"data": [
{
"id": "cmp_abc123",
"name": "Q1 Outreach",
"status": "active",
"timezone": "America/New_York",
"sendingDays": [1, 2, 3, 4, 5],
"sendingStartHour": 9,
"sendingEndHour": 17,
"dailyLimit": 50,
"sentToday": 12,
"context": null,
"totalLeads": 500,
"totalSent": 234,
"totalDelivered": 230,
"totalBounced": 4,
"totalReplied": 18,
"totalOpened": 87,
"createdAt": "2025-01-10T08:00:00",
"updatedAt": "2025-01-15T10:30:00",
"startedAt": "2025-01-10T09:00:00",
"completedAt": null
}
],
"meta": {
"page": 1,
"pageSize": 20,
"total": 1,
"totalPages": 1
}
}
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.