Contact conditions
A tree of conditions selects contacts. The same language is used in three places:
- a segment’s
conditions, which you send to Create a segment and Update a segment; - a broadcast’s audience, returned by Get a broadcast;
- an automation’s entry condition, returned by Get an automation.
The rules below come from the segment schema, so they speak of segments, but they apply to all three. A broadcast is sent only to subscribed contacts: that condition is always added and is not in the tree, so an empty tree means every subscribed contact.
Example
Section titled “Example”{"op": "and", "args": [ {"op": "and", "args": [ {"op": "=", "args": ["{{$contact.isSubscribed}}", "S"]}, {"op": "ina", "args": ["{{$contact.tags}}", [12, 15]]} ]}, {"op": "or", "args": [ {"op": ">", "args": ["{{$contact.date}}", "2026-01-01"]}, {"op": "in", "args": ["{{$contact.email}}", "@example.com"]} ]}]}Which contacts belong to the segment: a tree of conditions, applied to the contacts as they are at the moment it is used.
Conditions are the condition language of the Getsitecontrol admin, with its
own variable names and codes; they are not the field names and values of
Contact. A segment written here can be edited in the admin, and the
variables below are the ones the admin’s condition editor offers.
A node is an object with exactly op and args. A group has op and
or or and nodes in args; a leaf has the variable {{$contact.<name>}}
as the first argument, then its values: none for * (is set) and
undefined (is not set), two for between and !between, one for the
rest. To negate, use the opposite operator; there is no not node.
The admin editor shows a root group whose args are groups, each holding
leaves, as in the example; write that shape so the segment stays editable
there. {"op": "and", "args": []} matches every contact of the site.
Conditions are saved as sent.
Values are integers, strings or, for ina and !ina, a list of them.
| Operator | Meaning |
|---|---|
=, != | equals, differs |
ina, !ina | any of the list, none of it |
<, >, between, !between | compare; between includes both ends |
^, $, in, match (and !-forms) | starts with, ends with, contains, wildcard * without case |
*, undefined | is set, is not set |
Text operators other than match are case sensitive, except on
$contact.email: a contact’s email is stored lowercase and compared without
case by every operator. In ^, $, in,
match and their negations _ matches any single character and % is a
plain character.
| Variable | Operators | Value |
|---|---|---|
$contact.email, phone, firstName, lastName | text operators, =, !=, ina, !ina, *, undefined | string |
$contact.country | =, !=, ina, !ina, *, undefined | ISO 3166-1 alpha-2, upper case |
$contact.date | =, !=, <, >, between, !between, *, undefined | date the contact was added |
$contact.isSubscribed | = | marketing status: S subscribed, U unsubscribed, B bounced |
$contact.emailQuality | =, !=, ina, !ina, *, undefined | Corp+, Corp corporate, Pers+, Pers personal (+ is the higher grade), Edu education, Gov government, Risk risky, Temp disposable, Unk unknown |
$contact.tags | =, !=, ina, !ina, *, undefined | tag ids from list_tags |
$contact.segments | =, !=, ina, !ina | ids from list_segments, as integers |
$contact.emailSend, emailOpen, emailClick | =, !=, ina, !ina, *, undefined | e-mail id, as email_id of a broadcast |
$contact.emailSendCount, emailOpenCount, emailClickCount | =, !=, <, >, between, !between, *, undefined | integer, not negative |
$contact.emailSendDate, emailOpenDate, emailClickDate | as $contact.date | the latest event |
$contact.$shopifySpent, $shopifyOrders | as the counts | integer |
$contact.$shopifyOrderDate | as $contact.date | the latest order |
$contact.<field id> | by the field type from list_contact_fields: text, integer, number, date or datetime | as the field; boolean and other fields are refused |
ina and !ina on tags and segments take at least one id. On
$contact.tags, = means the contact has that tag among its tags.
$contact.isSubscribed compares the stored status code as the admin does:
S does not match a contact who confirmed double opt-in, U does not match
one who never subscribed or awaits double opt-in, and B matches every
bounced contact. The contact statuses subscribed, unsubscribed and
bounced are the broader groups.
Ids are integers or strings of digits. A number is a 32-bit integer or a
string holding one. A date is YYYY-MM-DD or ISO 8601 with an offset. For $contact.date,
$shopifyOrderDate and datetime fields, a value at midnight is a whole
day: = and != cover the day, and the second value of between runs to
its end. Date fields and $contact.email*Date compare with midnight
exactly.
Nested segments may not form a cycle. A list must reference each nested segment once, and not one nested inside another.
Conditions are checked the way they run: nested segments must exist and the whole tree must compile, so an unknown variable or a value of the wrong type is refused. Conditions saved in the admin are returned as they are and may use other variables and values.
Source: OpenAPI specification, the conditions field of SegmentCreate.