Skip to main content

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.

The client.campaigns resource gives you read access to campaigns plus lifecycle actions — send now, schedule, and unschedule. Campaigns are authored in the Lettr app; the API does not expose create, update, or delete. Reads require an API key with the campaigns:read scope; actions require campaigns:write.
import lettr

client = lettr.Lettr("lttr_your_api_key")

List Campaigns

page = client.campaigns.list(status="sent", per_page=50)
for campaign in page.campaigns:
    print(f"{campaign.name}: {campaign.status}{campaign.stats.unique_opens} opens")
    print(campaign.sent_count)

API Reference

GET /campaigns

Get a Campaign

get() returns a CampaignDetail with the rendered html_content body. The list, send, schedule, and unschedule methods return the base Campaign, which does not carry html_content.
campaign = client.campaigns.get(page.campaigns[0].id)
print(campaign.subject)
print(campaign.html_content)
print(campaign.stats.clicks)

API Reference

GET /campaigns/

List Campaign Events

Engagement events use cursor-based pagination:
events = client.campaigns.list_events(campaign.id, event_type="open")
for event in events.events:
    print(f"{event.timestamp} {event.event_type} {event.email}")
    print(event.target_link_url)  # for click events

if events.next_cursor:
    more = client.campaigns.list_events(campaign.id, cursor=events.next_cursor)

API Reference

GET /campaigns//events

Send / Schedule / Unschedule

# Dispatch a draft campaign immediately (asynchronous; transitions to "preparing")
client.campaigns.send(campaign.id)

# Schedule for future delivery — ISO 8601 string or a datetime; must be in the future.
# Calling schedule() again on a scheduled campaign reschedules it.
client.campaigns.schedule(campaign.id, scheduled_at="2026-06-01T09:00:00+00:00")

# Cancel a scheduled send, returning the campaign to draft
client.campaigns.unschedule(campaign.id)
The action methods return the updated Campaign, or None if the API omits the payload.

Send

POST /campaigns//send

Schedule

POST /campaigns//schedule

Unschedule

POST /campaigns//unschedule

What’s Next

Audience

Manage the contacts campaigns send to

API Reference

Full campaigns API reference