Skip to main content

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

ParameterTypeDescription
uuidstringCampaign's UUID

Query Parameters

All parameters are optional.

ParameterTypeDefaultDescription
pageinteger1Page number (min: 1)
per_pageinteger100Items per page (min: 1, max: 100)
searchstring-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

FieldTypeDescription
current_pageintegerCurrent page number
per_pageintegerNumber of items per page
totalintegerLive 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."]
}
}
}