Results for several campaigns

Results for several campaigns

GET/api/v1/email/campaigns/stats

GET /email/campaigns/stats
curl -X GET 'https://www.unitpost.com/api/v1/email/campaigns/stats' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0'
Response · 200
{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "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"
    }
  ]
}

The same numbers as Campaign results for up to 100 campaigns in one read: ids, comma-separated. An id that isn't one of this workspace's email campaigns is left out of data, never an error. Pass ids once; a repeated or any other query key is a 422. Requires the campaigns:read capability.

Parameters1 field
FieldTypeDescription
idsrequiredstring · queryComma-separated campaign ids (1–100).
Response · 200 fields10 fields
FieldTypeDescription
objectrequiredstring—
campaign_idrequiredstring—
recipientsrequiredintegerContacts the campaign was sent to (suppressed addresses never became recipients).
failed_recipientsrequiredintegerRecipients that didn't receive it, including ones that failed before a message existed.
suppressedrequiredinteger | nullContacts left out at send because their address is suppressed; null for campaigns sent before this was counted.
countsrequiredobject—
ratesrequiredobjectPercentages with one decimal (12.3 = 12.3%). null when there is nothing to measure yet, or when that tracking was off.
trackingrequiredobject—
sourcerequiredenumlive | snapshot | combinedLive rows, the counts frozen when old messages were cleaned up, or both.
snapshotted_atrequiredstring | null—
200401403422503

Search docs and guides

Search the docs and product guides.