Campaign results
GET/api/v1/email/campaigns/{id}/stats
GET /email/campaigns/{id}/stats
curl -X GET 'https://www.unitpost.com/api/v1/email/campaigns/cmp_123/stats' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'User-Agent: my-app/1.0'Response · 200
{
"object": "campaign_stats",
"campaign_id": "campaign_123",
"recipients": 0,
"failed_recipients": 0,
"suppressed": 0,
"counts": {
"sent": 0,
"delivered": 0,
"opened": 0,
"clicked": 0,
"unsubscribed": 0,
"bounced": 0,
"complained": 0,
"failed": 0
},
"rates": {
"delivery": 0,
"open": 0,
"click": 0,
"unsubscribe": 0,
"bounce": 0,
"complaint": 0
},
"tracking": {
"open": false,
"click": false
},
"source": "live",
"snapshotted_at": "2026-01-01T00:00:00.000Z"
}A campaign's results: delivered, unique opens and clicks, unsubscribes, bounces, complaints and their rates, recipients, and who didn't receive it. Open and click rates are null when that tracking was off; every rate is null until something was sent. Old messages are cleaned up after your plan's retention window; their counts are kept (source). Requires the campaigns:read capability.
Parameters1 field
| Field | Type | Description |
|---|---|---|
idrequired | string · path | — |
Response · 200 fields10 fields
| Field | Type | Description |
|---|---|---|
objectrequired | string | — |
campaign_idrequired | string | — |
recipientsrequired | integer | Contacts the campaign was sent to (suppressed addresses never became recipients). |
failed_recipientsrequired | integer | Recipients that didn't receive it, including ones that failed before a message existed. |
suppressedrequired | integer | null | Contacts left out at send because their address is suppressed; null for campaigns sent before this was counted. |
countsrequired | object | — |
ratesrequired | object | Percentages with one decimal (12.3 = 12.3%). null when there is nothing to measure yet, or when that tracking was off. |
trackingrequired | object | — |
sourcerequired | enumlive | snapshot | combined | Live rows, the counts frozen when old messages were cleaned up, or both. |
snapshotted_atrequired | string | null | — |
200401403404422503