List Campaign Contacts
Retrieve a paginated list of a campaign's current recipients — the contacts a send right now would target.
The recipients are resolved live from the campaign's selected list or segment, with unsubscribed and undeliverable contacts excluded. Each item is identical to a List Contacts item.
To see who a sent campaign was actually sent to — and how each recipient engaged — use List Campaign Recipients instead.
A campaign needs a list or segment selected before it can be sent; set one with
list_uuid or segment_uuid on Create Campaign or
Update Campaign. See Audience.
Live recipient count vs. recipients_count
pagination.total is the live recipient count — how many contacts the
campaign would send to right now. Because it reflects the current audience, it
changes as contacts are added, removed, unsubscribe, or become undeliverable. To
get only the number, request per_page=1 and read pagination.total.
This live count is distinct from the campaign's recipients_count field returned
by List Campaigns, which is a post-send snapshot: it records
how many contacts the campaign was actually sent to, and reads 0 until the
campaign has been sent.
Request
GET /campaigns/{uuid}/contacts
Path Parameters
| Parameter | Type | Description |
|---|---|---|
uuid | string | Campaign's UUID |
Query Parameters
All parameters are optional.
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number (min: 1) |
per_page | integer | 100 | Items per page (min: 1, max: 100) |
search | string | - | Partial match on the contact's name, email, or phone (max 255 characters). |
An out-of-range page / per_page, or a search value over the length limit,
returns 422 VALIDATION_ERROR.
Example Requests
List the campaign's recipients:
curl -X GET "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000/contacts?page=1&per_page=50" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Count the recipients without listing them:
curl -X GET "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000/contacts?per_page=1" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Find a specific recipient:
curl -X GET "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000/contacts?search=john" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Response
Success Response (200 OK)
Each item has the same shape as a List Contacts item.
{
"data": [
{
"uuid": "770e8400-e29b-41d4-a716-446655440002",
"email": "john@example.com",
"first_name": "John",
"last_name": "Doe",
"phone": "+48123456789",
"external_id": "customer_123",
"language": "en",
"country_code": "US",
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-15T10:30:00Z"
}
],
"pagination": {
"current_page": 1,
"per_page": 50,
"total": 1284
}
}
Response Fields
Each item is identical to a List Contacts item; see that page for the full field reference.
Pagination Object
| Field | Type | Description |
|---|---|---|
current_page | integer | Current page number |
per_page | integer | Number of items per page |
total | integer | Live number of recipients the campaign would send to |
Error Responses
Not Found Error (404)
{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Campaign with UUID '550e8400-e29b-41d4-a716-446655440000' not found"
}
}
Validation Error (422 Unprocessable Entity)
{
"error": {
"code": "VALIDATION_ERROR",
"message": "The given data was invalid",
"details": {
"per_page": ["The per page field must not be greater than 100."]
}
}
}