Campaigns

List campaign engagement events

Returns engagement events (opens, clicks, bounces, etc.) for a campaign, with optional filtering by type, recipient email, and date range. Uses cursor-based pagination: keep requesting with the returned next_cursor until it is null. When a filter is applied, a page may come back with an empty events array and a non-null next_cursor — that means more pages remain, not that there are no matching events, so continue paginating until next_cursor is null. Requires the campaigns:read scope.

get/campaigns/{campaignId}/events

Request

  • Base URL: https://app.lettr.com/api
  • URL: https://app.lettr.com/api/campaigns/{campaignId}/events
  • Auth: HTTP bearer

Path parameters

campaignIdstring uuid required

Campaign ID

Query parameters

event_type'injection' | 'delivery' | 'bounce' | 'spam_complaint' | 'open' | 'click' | 'list_unsubscribe'

Filter by event type

emailstring email

Filter by recipient email

start_datestring date-time

Only events at or after this time (ISO 8601). A date-only value (e.g. 2026-05-01) is treated as the start of that day in UTC.

end_datestring date-time

Only events at or before this time (ISO 8601), inclusive. A date-only value (e.g. 2026-05-01) covers the whole of that day in UTC (through 23:59:59).

limitinteger

Max events per page (max 100)

cursorstring

Pagination cursor from a previous response

Response

Campaign events retrieved successfully.

messagestring required

Example response

{
  "message": "Campaign events retrieved successfully.",
  "data": {
    "events": [
      {
        "event_id": "92356829",
        "event_type": "open",
        "email": "jane@example.com",
        "timestamp": "2026-05-01T12:30:00+00:00"
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.