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

client = Mailrify("sk_your_secret_key")

List segments (segments.list)

segments = client.segments.list()

print(len(segments))

Create a segment (segments.create)

Create with a condition dictionary

segment = client.segments.create(
    name="Premium users",
    description="Users on paid plans",
    condition={
        "logic": "AND",
        "groups": [
            {
                "filters": [
                    {"field": "data.plan", "operator": "equals", "value": "premium"}
                ]
            }
        ],
    },
    track_membership=True,
)

print(segment.id, segment.member_count)

Create with typed filter models

from mailrify import FilterCondition, FilterGroup, SegmentFilter

condition = FilterCondition(
    logic="AND",
    groups=[
        FilterGroup(
            filters=[SegmentFilter(field="subscribed", operator="equals", value=True)]
        )
    ],
)

segment = client.segments.create(
    name="Subscribed users",
    condition=condition,
)

print(segment.id)

Get one segment (segments.get)

existing = client.segments.get(segment.id)

print(existing.name)

Update a segment (segments.update)

updated = client.segments.update(
    segment.id,
    name="VIP users",
    condition={
        "logic": "AND",
        "groups": [
            {
                "filters": [
                    {"field": "subscribed", "operator": "equals", "value": True}
                ]
            }
        ],
    },
)

print(updated.name)

List segment contacts (segments.list_contacts)

members = client.segments.list_contacts(segment.id, page=1, page_size=20)

print(members.total, members.page, len(members.data))

Delete a segment (segments.delete)

client.segments.delete(segment.id)

Async equivalents

from mailrify import AsyncMailrify


async def run() -> None:
    async with AsyncMailrify("sk_your_secret_key") as client:
        segments = await client.segments.list()
        created = await client.segments.create(
            name="SDK segment",
            condition={"logic": "AND", "groups": [{"filters": []}]},
        )
        fetched = await client.segments.get(created.id)
        await client.segments.update(fetched.id, name="SDK segment updated")
        members = await client.segments.list_contacts(fetched.id, page=1, page_size=20)
        await client.segments.delete(fetched.id)
        print(len(segments), members.total)
See full details in the Segments API reference.