Skip to main content
GET
/
campaigns
List campaigns
curl --request GET \
  --url https://app.lettr.com/api/campaigns \
  --header 'Authorization: Bearer <token>'
{
  "message": "Campaigns retrieved successfully.",
  "data": {
    "campaigns": [
      {
        "id": "0193e6a8-1f3a-7c2a-b9e2-1aa1d2e5d3f0",
        "name": "Spring Sale",
        "status": "sent",
        "sent_count": 124,
        "created_at": "2026-05-01T09:00:00+00:00",
        "stats": {
          "injections": 0,
          "deliveries": 0,
          "bounces": 0,
          "spam_complaints": 0,
          "opens": 0,
          "unique_opens": 0,
          "clicks": 0,
          "unique_clicks": 0,
          "unsubscribes": 0
        },
        "subject": "<string>",
        "from_email": "jsmith@example.com",
        "from_name": "<string>",
        "reply_to": "jsmith@example.com",
        "scheduled_at": "2023-11-07T05:31:56Z",
        "total_recipients": 123,
        "sent_at": "2023-11-07T05:31:56Z"
      }
    ],
    "pagination": {
      "total": 42,
      "per_page": 20,
      "current_page": 1,
      "last_page": 3
    }
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.lettr.com/llms.txt

Use this file to discover all available pages before exploring further.

Returns a paginated list of campaigns for the authenticated team, each with embedded engagement stats. Requires the campaigns:read scope.

Authorizations

Authorization
string
header
required

API key for authentication

Query Parameters

page
integer
default:1

Page number

Required range: 1 <= x <= 10000
per_page
integer
default:20

Items per page (max 100)

Required range: 1 <= x <= 100
status
enum<string>

Filter by campaign status

Available options:
draft,
scheduled,
preparing,
in_review,
sending,
sent,
failed

Response

Campaigns retrieved successfully.

message
string
required
Example:

"Campaigns retrieved successfully."

data
object
required