Get Campaign
Retrieve a specific campaign by UUID, including its audience and a readiness report.
Request
GET /campaigns/{uuid}
Path Parameters
| Parameter | Type | Description |
|---|---|---|
uuid | string | Campaign's UUID |
Query Parameters
All parameters are optional.
| Parameter | Type | Default | Description |
|---|---|---|---|
include | string | - | Comma-separated list of extra sections to add to the response: stats, revenue, or both (include=stats,revenue). Unrecognised values are ignored. |
Each section you name is added as an extra key on data. A section you don't
request is omitted entirely — it is not returned as null — so the default
response is unchanged. See Stats Object and
Revenue Object.
Example Requests
Retrieve a campaign:
curl -X GET "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Retrieve a campaign with its engagement stats and attributed revenue:
curl -X GET "https://email.easy.tools/api/v1/campaigns/550e8400-e29b-41d4-a716-446655440000?include=stats,revenue" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
Response
Success Response (200 OK)
{
"data": {
"uuid": "550e8400-e29b-41d4-a716-446655440000",
"name": "Spring Sale",
"status": "draft",
"subject": "Up to 40% off this week",
"preheader": "Our biggest sale of the season",
"from_name": "Acme",
"reply_to": "support@acme.com",
"from_identity": "8f14e45f-ceea-467a-9575-1a1b2c3d4e5f",
"from_email": "hello@acme.com",
"content": "## Spring sale\n\nUp to **40% off**. [Shop now](https://acme.com/sale)",
"content_editable_via_api": true,
"content_overwrite_required": false,
"audience": {
"list_uuid": "660e8400-e29b-41d4-a716-446655440001",
"segment_uuid": null
},
"readiness": {
"can_send": true,
"missing": []
},
"created_at": "2026-06-24T10:00:00Z",
"updated_at": "2026-06-24T10:05:00Z",
"last_updated_at": "2026-06-24T10:05:00Z"
}
}
When include names stats and/or revenue, the matching sections are added
to data:
{
"data": {
"uuid": "53a8ae7a-9c90-4451-960d-ca7e816cb9cf",
"name": "Spring Sale",
"status": "sent",
"...": "all the usual campaign detail fields",
"stats": {
"sends": 1240,
"opens": 642,
"clicks": 118,
"unsubscribes": 7,
"complaints": 1,
"open_rate": 0.5177,
"click_rate": 0.0952
},
"revenue": [
{
"amount": 13600,
"currency": "usd"
},
{
"amount": 34900,
"currency": "pln"
}
]
}
}
Response Fields
| Field | Type | Description |
|---|---|---|
uuid | string | Campaign's unique identifier |
name | string | Campaign name |
status | string | Current status (see Statuses) |
subject | string|null | Email subject line. null until set. |
preheader | string|null | Preview text shown after the subject. null until set. |
from_name | string|null | Sender display name. null until set. |
reply_to | string|null | Reply-to email address. null until set. |
from_identity | string|null | UUID of the sending identity the campaign sends from. null until set. |
from_email | string|null | Email address of the selected sending identity. null when no identity is set. |
content | string|null | The email body as Markdown, or null — either no body is set, or the body uses layout with no Markdown form (distinguish via content_editable_via_api). See Campaign body. |
content_editable_via_api | boolean | false when the body uses layout the API can't author, which makes the returned content a lossy approximation. See Campaign body. |
content_overwrite_required | boolean | true when replacing the body with content requires overwrite: true. See Campaign body. |
audience | object | The campaign's recipients. See Audience. |
readiness | object | Whether the campaign is ready to send. See Readiness. |
created_at | string | ISO 8601 timestamp (UTC) |
updated_at | string | ISO 8601 timestamp (UTC) |
last_updated_at | string|null | ISO 8601 timestamp (UTC) the campaign was last edited. |
stats | object | Engagement statistics. Only present when stats is named in include. See Stats Object. |
revenue | array | Attributed revenue, one entry per currency. Only present when revenue is named in include. See Revenue Object. |
The audience and readiness objects have the fields described in
Audience and Readiness.
Stats Object
Present only when stats is named in include.
| Field | Type | Description |
|---|---|---|
sends | integer | Number of messages sent. |
opens | integer | Number of messages opened. |
clicks | integer | Total number of link clicks. |
unsubscribes | integer | Number of recipients who unsubscribed. |
complaints | integer | Number of spam complaints. |
open_rate | number | opens ÷ sends, a ratio between 0 and 1 rounded to 4 decimals (0 when sends is 0). Multiply by 100 for a percentage. |
click_rate | number | clicks ÷ sends, a ratio between 0 and 1 rounded to 4 decimals (0 when sends is 0). Multiply by 100 for a percentage. |
Revenue Object
Present only when revenue is named in include. An array with one entry per
currency the campaign has attributed revenue in, or an empty array [] when it
has none.
| Field | Type | Description |
|---|---|---|
amount | integer | Revenue in the currency's minor units (for example cents or grosze). Divide by 100 for the major-unit value. |
currency | string | Lowercase ISO 4217 currency code, e.g. "usd" or "pln". |
Error Responses
Not Found Error (404)
{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Campaign with UUID '550e8400-e29b-41d4-a716-446655440000' not found"
}
}