Skip to main content
Use a secret key client for campaign methods.
from mailrify import Mailrify

client = Mailrify("sk_your_secret_key")

List campaigns (campaigns.list)

page = client.campaigns.list(
    page=1,
    page_size=20,
    status="DRAFT",
)

print(page.total, page.total_pages, len(page.data), len(page.campaigns))

Create a campaign (campaigns.create)

Audience: all contacts

campaign_all = client.campaigns.create(
    name="Launch campaign",
    subject="Introducing our new feature",
    body="<h1>Big news</h1><p>Check out what is new.</p>",
    from_email="[email protected]",
    audience_type="ALL",
)

print(campaign_all.id, campaign_all.status)

Audience: filtered contacts

campaign_filtered = client.campaigns.create(
    name="Subscribed users campaign",
    subject="Feature update",
    body="<p>Only subscribed users receive this.</p>",
    from_email="[email protected]",
    audience_type="FILTERED",
    audience_condition={
        "logic": "AND",
        "groups": [
            {
                "filters": [{"field": "subscribed", "operator": "equals", "value": True}]
            }
        ],
    },
)

print(campaign_filtered.id)

Audience: segment

campaign_segment = client.campaigns.create(
    name="Segment campaign",
    subject="Offer for premium users",
    body="<p>This goes to one saved segment.</p>",
    from_email="[email protected]",
    audience_type="SEGMENT",
    segment_id="seg_123",
)

print(campaign_segment.id)

Get one campaign (campaigns.get)

campaign = client.campaigns.get(campaign_all.id)

print(campaign.name, campaign.status)

Update a campaign (campaigns.update)

updated = client.campaigns.update(
    campaign_all.id,
    subject="Updated subject line",
    reply_to="[email protected]",
)

print(updated.subject, updated.reply_to)

Send a campaign now (campaigns.send)

send_result = client.campaigns.send(campaign_all.id)

print(send_result)

Schedule a campaign (campaigns.send with scheduled_for)

client.campaigns.send(campaign_all.id, scheduled_for="2026-03-01T10:00:00Z")

Send a test email (campaigns.test)

test_result = client.campaigns.test(campaign_all.id, email="[email protected]")

print(test_result)

Fetch campaign stats (campaigns.stats)

stats = client.campaigns.stats(campaign_all.id)

print(stats)

Cancel a scheduled campaign (campaigns.cancel)

cancelled = client.campaigns.cancel(campaign_all.id)

print(cancelled.id, cancelled.status)

Async equivalents

from mailrify import AsyncMailrify


async def run() -> None:
    async with AsyncMailrify("sk_your_secret_key") as client:
        page = await client.campaigns.list(page=1, page_size=20)
        created = await client.campaigns.create(
            name="Async campaign",
            subject="Async subject",
            body="<p>Async body</p>",
            from_email="[email protected]",
            audience_type="ALL",
        )
        fetched = await client.campaigns.get(created.id)
        await client.campaigns.update(fetched.id, subject="Async updated")
        await client.campaigns.send(fetched.id)
        await client.campaigns.send(fetched.id, scheduled_for="2026-03-01T10:00:00Z")
        await client.campaigns.test(fetched.id, email="[email protected]")
        await client.campaigns.stats(fetched.id)
        await client.campaigns.cancel(fetched.id)
        print(page.total)
See full details in the Campaigns API reference.