Courier supports the following operators:

Equality & Inequality

EQ

Checks if a specified attribute is equal to a given value.

{
  "operator": "EQ",
  "value": "Oakland",
  "path": "location.city"
}

NEQ

Checks if a specified attribute is not equal to a given value.

{
  "operator": "NEQ",
  "value": "sonicpigeons.com",
  "path": "company"
}

String Comparison

STARTS_WITH

Checks if a specified attribute starts with a given value.

{
  "operator": "STARTS_WITH",
  "value": "pigeons",
  "path": "email"
}

ENDS_WITH

Checks if a specified attribute ends with a given value.

{
  "operator": "ENDS_WITH",
  "value": "sonicpigeons.com",
  "path": "email"
}

INCLUDES

Checks if a specific attribute in the user’s profile includes any of the specified values.

{
  "operator": "INCLUDES",
  "value": ["push", "email"],
  "path": "favorite_notification_channel"
}

OMIT

Checks if a specified attribute is not included in the user’s profile.

{
  "operator": "OMIT",
  "value": "email",
  "path": "favorite_notification_channel"
}

Numeric Comparison

GT

Checks if a specific numeric attribute in the user’s profile is greater than a specified value.

{
  "operator": "GT",
  "value": "100",
  "path": "foss_ball_victories"
}

GTE

Checks if a specific numeric attribute in the user’s profile is greater than or equal to a specified value.

{
  "operator": "GTE",
  "value": "99",
  "path": "foss_ball_victories"
}

LT

Checks if a specific numeric attribute in the user’s profile is less than a specified value.

{
  "operator": "LT",
  "value": "100",
  "path": "foss_ball_victories"
}

LTE

Checks if a specific numeric attribute in the user’s profile is less than or equal to a specified value.

{
  "operator": "LTE",
  "value": "99",
  "path": "foss_ball_victories"
}

Date Comparison

IS_BEFORE

Checks if a specified date attribute is before a given date. The date should be in ISO 8601 format.

{
  "operator": "IS_BEFORE",
  "value": "1990-01-01",
  "path": "date_of_birth"
}

IS_AFTER

Checks if a specified date attribute is after a given date. The date should be in ISO 8601 format.

{
  "operator": "IS_AFTER",
  "value": "1990-01-01",
  "path": "date_of_birth"
}

Existence

EXISTS

Checks if a specific attribute exists in the user’s profile.

{
  "operator": "EXISTS",
  "value": "true", // false if you want to check for the absence of the attribute
  "path": "email"
}

Special Operators

MEMBER_OF

Checks if the user is a member of the tenant specified in the path.

{
  "operator": "MEMBER_OF",
  "value": "acme",
  "path": "account_id"
}

caution

All operators are case-sensitive.

Nested Operator Examples

Here are some examples demonstrating how to use nested operators for more complex audience targeting:

Combining AND and OR Operators

Scenario: Notify Software Engineers in San Francisco or Oakland

{
  "operator": "AND",
  "filters": [
    {
      "operator": "EQ",
      "path": "title",
      "value": "Software Engineer"
    },
    {
      "operator": "OR",
      "filters": [
        {
          "operator": "EQ",
          "path": "location.city",
          "value": "Oakland"
        },
        {
          "operator": "EQ",
          "path": "location.city",
          "value": "San Francisco"
        }
      ]
    }
  ]
}

Combining Equality and Inclusion Checks

Scenario: Notify Software Engineers who like TypeScript

{
  "operator": "AND",
  "filters": [
    {
      "operator": "EQ",
      "path": "title",
      "value": "Software Engineer"
    },
    {
      "operator": "INCLUDES",
      "path": "favorite_programming_languages",
      "value": "Typescript"
    }
  ]
}