List Campaigns
Retrieve a paginated list of campaigns.
Endpointโ
GET /v1/campaigns
Authenticationโ
Requires an API key with the campaigns:read scope.
Query Parametersโ
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
per_page | integer | 25 | Items per page (max 100) |
search | string | - | Search by campaign name |
status | string | - | Filter by status: draft, scheduled, sending, sent, cancelled (all disables the filter) |
sort | string | -created_at | Sort field: id, name, status, created_at, scheduled_at, sent_at. Prefix with - for descending |
sort_by | string | - | Alternative to sort: field name only |
sort_order | string | - | asc or desc (used with sort_by) |
Response (200 OK)โ
{
"data": [
{
"id": 42,
"name": "Summer Kayak Promo",
"description": "Promote summer kayak rentals",
"kind": "one_off",
"channel": "email",
"status": "sent",
"audience_type": "filter",
"audience_filter": {
"v": 2,
"preset": "recent"
},
"email_subject": "Summer is here, {customer_name}!",
"email_body": "<p>Hi {customer_name}, book your kayak now.</p>",
"template_key": "promo_blast",
"cta_text": "Book now",
"cta_url": "https://example.com/book",
"scheduled_at": null,
"sent_at": "2026-07-05T10:00:00+00:00",
"total_recipients": 250,
"total_sent": 248,
"created_at": "2026-07-01T09:00:00+00:00",
"updated_at": "2026-07-05T10:05:00+00:00"
}
],
"meta": {
"current_page": 1,
"per_page": 25,
"total": 12,
"total_pages": 1,
"request_id": "req_abc123",
"timestamp": "2026-07-20T12:00:00+00:00"
},
"links": {
"first": "https://app.equipdash.com/api/v1/campaigns?page=1",
"prev": null,
"next": null,
"last": "https://app.equipdash.com/api/v1/campaigns?page=1"
}
}
Response Fieldsโ
| Field | Type | Description |
|---|---|---|
id | integer | Unique identifier |
name | string | Campaign name |
description | string|null | Internal description |
kind | string | one_off or automation |
channel | string | email (SMS is planned) |
status | string | draft, scheduled, sending, sent, or cancelled |
audience_type | string | all_customers, selected_customers, or filter |
audience_filter | object|null | Audience filter criteria (see Audience Filter) |
email_subject | string|null | Email subject line (supports merge tags) |
email_body | string|null | Email body HTML (supports merge tags) |
template_key | string|null | plain, announcement, promo_blast, season_opener, or win_back |
cta_text | string|null | Button label |
cta_url | string|null | Button link |
scheduled_at | string|null | Scheduled send time (ISO 8601, UTC) |
sent_at | string|null | Actual send time (ISO 8601, UTC) |
total_recipients | integer | Recipients resolved for the campaign |
total_sent | integer | Emails successfully sent |
created_at | string | ISO 8601 datetime |
updated_at | string | ISO 8601 datetime |
List responses omit promo_codes and stats โ use Get Campaign for those.
Errorsโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | No API key provided |
| 401 | invalid_api_key | Invalid API key |
| 403 | insufficient_scope | API key lacks campaigns:read scope |
Example Requestโ
curl -X GET "https://app.equipdash.com/api/v1/campaigns?status=draft&sort=-created_at" \
-H "Authorization: Bearer eqd_live_abc123xyz789..."