Segments

Get a segment

One segment with its name, conditions and folder, the same as in list_segments. Conditions saved in the admin are returned as they are.

get/v1/sites/{site_id}/segments/{segment_id}

Request

  • Base URL
    https://api.getsitecontrol.com
  • Auth
    HTTP bearer

Path parameters

site_idinteger required
segment_idinteger required

Segment id from list_segments

Response

Successful Response

idinteger required

Segment id; list_contacts takes it as segment_id

namestring required

Name; several segments may share one

conditionsobject required

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.

OperatorMeaning
=, !=equals, differs
ina, !inaany of the list, none of it
<, >, between, !betweencompare; between includes both ends
^, $, in, match (and !-forms)starts with, ends with, contains, wildcard * without case
*, undefinedis 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.

VariableOperatorsValue
$contact.email, phone, firstName, lastNametext operators, =, !=, ina, !ina, *, undefinedstring
$contact.country=, !=, ina, !ina, *, undefinedISO 3166-1 alpha-2, upper case
$contact.date=, !=, <, >, between, !between, *, undefineddate the contact was added
$contact.isSubscribed=marketing status: S subscribed, U unsubscribed, B bounced
$contact.emailQuality=, !=, ina, !ina, *, undefinedCorp+, Corp corporate, Pers+, Pers personal (+ is the higher grade), Edu education, Gov government, Risk risky, Temp disposable, Unk unknown
$contact.tags=, !=, ina, !ina, *, undefinedtag ids from list_tags
$contact.segments=, !=, ina, !inaids from list_segments, as integers
$contact.emailSend, emailOpen, emailClick=, !=, ina, !ina, *, undefinede-mail id, as email_id of a broadcast
$contact.emailSendCount, emailOpenCount, emailClickCount=, !=, <, >, between, !between, *, undefinedinteger, not negative
$contact.emailSendDate, emailOpenDate, emailClickDateas $contact.datethe latest event
$contact.$shopifySpent, $shopifyOrdersas the countsinteger
$contact.$shopifyOrderDateas $contact.datethe latest order
$contact.<field id>by the field type from list_contact_fields: text, integer, number, date or datetimeas 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.

created_atstring date-time required
updated_atstring date-time required

A move to another folder does not change it

Example response

{
  "conditions": {
    "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"
            ]
          }
        ]
      }
    ]
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.