Each filter is
{ "id", "fieldKey", "operator", "value" }, the same shape the Contacts page saves. Every filter is checked when you save the view: an unknown fieldKey, an operator the field doesn’t support, or a missing or badly formatted value gets a 400 that lists each problem. That matters because a view is a campaign’s audience, and a filter that doesn’t apply would match every contact.
Values by type:
- Yes/no (
dndand yes/no custom fields):YesorNo.trueandfalsealso work, in any case. The view storesYesorNo, the same as the dashboard, so reading a view back showsYesorNo.{ "fieldKey": "dnd", "operator": "equals", "value": "Yes" }matches contacts on Do Not Disturb. - Date: a day as
YYYY-MM-DD, for example2026-01-31.is_betweentakes two days joined by.., start first:2026-01-01..2026-01-31. Both days count.in_past_daystakes a whole number of days, for example30. - Number: a number, for example
10or-2.5. is_emptyandis_not_emptyneed no value.
FieldName is its name with the spaces removed, for example custom:{{LeadSource}} for Lead Source. value is at most 1,000 characters and id at most 64.
A view made through the API shows the account owner as its creator. If the account has no owner, creating a view returns a 409.
Create a view
