# Create (optionally attach to a list and set properties)contact = client.audience.contacts.create( email="jane@example.com", list_id="list-uuid", properties={"first_name": "Jane", "plan": "pro"},)print(contact.id, contact.email, contact.status)# List with filterspage = client.audience.contacts.list( page=1, per_page=50, search="jane", status="subscribed", list_id="list-uuid",)for c in page.contacts: print(c.email, c.status)# Get, update, deleteclient.audience.contacts.get("contact-uuid")client.audience.contacts.update( "contact-uuid", status="unsubscribed", properties={"plan": "enterprise"},)client.audience.contacts.delete("contact-uuid")
Contact status is "subscribed", "unsubscribed", "bounced", "complained", or "unverified".
A segment is a dynamic group defined by conditions. Groups are joined by OR; conditions within a group by AND. Conditions are a plain dict matching the API schema:
client.audience.segments.create( name="Pro users at example.com", list_id="list-uuid", # optional: restrict to one list conditions={ "groups": [ { "conditions": [ {"field": "email", "operator": "ends_with", "value": "@example.com"}, {"field": "plan", "operator": "equals", "value": "pro"}, ], }, ], },)client.audience.segments.list(list_id="list-uuid")client.audience.segments.get("segment-uuid")client.audience.segments.delete("segment-uuid")
Operators include equals, not_equals, contains, starts_with, ends_with, is_true, is_false, and others.