Filtering
Filter WebPixie GraphQL list queries with WQL, WebPixie's compact, SQL-like query syntax.
Most list queries (e.g. findSite, findUptimeLink, findIncident) accept an optional query argument — a string written in WQL (WebPixie Query Language), a compact, SQL-like syntax used to filter results.
Discovering Filterable Fields
Not every field can be used in a query string. The description of each list query's query argument names the fields it supports, written exactly as you use them in a filter (for example isFavorite). The same fields work in sort. Read them with an introspection query:
query {
__type(name: "Query") {
fields {
name
args {
name
description
}
}
}
}In the result, look at the query argument of the list query you are calling (for example findSite or findUptimeLink).
Basic Structure
field operator valuequery {
findSite(query: "domain = \"acme.io\"") {
items {
domain
}
}
}Combining Conditions
Combine conditions with AND / OR, and use parentheses to group them:
status = ACTIVE AND checkInterval > 60
(status = ACTIVE OR status = PASSIVE) AND isFavorite = TRUEConditions are evaluated left-to-right. Use parentheses
whenever you mix AND and OR in the same query so the
conditions group the way you expect.
Operators
| Operator | Description | Example |
|---|---|---|
= | Equal to | status = ACTIVE |
!= | Not equal to | status != ACTIVE |
> | Greater than | checkInterval > 60 |
>= | Greater than or equal to | checkInterval >= 60 |
< | Less than | checkInterval < 300 |
<= | Less than or equal to | checkInterval <= 300 |
BETWEEN | Inclusive range (numbers and dates only) | checkInterval BETWEEN (60, 300) |
IN | Value is one of a list | status IN (ACTIVE, PASSIVE) |
NOT IN | Value is not any of a list | status NOT IN (PASSIVE) |
~ | Contains (case-insensitive) | domain ~ "acme" |
!~ | Does not contain | domain !~ "test" |
IS / IS NOT | Null / empty / boolean checks — see below | tags IS NOT NULL |
Special Values
Use IS / IS NOT with NULL, EMPTY, TRUE, and FALSE:
tags IS NULL
tags IS NOT NULL
name IS EMPTY
isFavorite IS TRUEisFavorite = TRUE works the same as isFavorite IS TRUE.
These keywords are case-sensitive and must be uppercase
(IS NULL, not IS null). A lowercase form is treated as a
literal text value instead of matching null or empty fields.
Lists
For IN / NOT IN, separate values with commas inside parentheses, without quotes — even for text values:
status IN (ACTIVE, PASSIVE)Text Values
Quote a text value if it contains spaces or special characters; unquoted text is also accepted when it doesn't. Quoted values cannot contain a literal " character.
domain = acme.io
name = "Acme Inc"Dates and IDs
Quote dates and IDs. Dates use ISO 8601:
createTime >= "2026-01-01T00:00:00Z"
id = "550e8400-e29b-41d4-a716-446655440000"List Fields
Some fields hold several values, such as tags, features, and locations. A condition on them matches a record when any of its values matches:
tags = prod
tags IN (prod, staging)
features = MONITOR_SSL!= and NOT IN match records that have none of the given values, including records with no values at all. To find records with no tags, use tags IS NULL; use tags IS NOT NULL for records that have at least one.