Some API endpoints accept a where parameter, which applies a filter to the result set.
The following sections give some examples of filter usage and a full syntax reference.
For more real world examples, try applying some filters to a report on ahrefs.com using our visual interface, and then press the
API {}button to view thewhereparameter of the generated API v3 query.
Field "foo" equals 3:
{ "field": "foo", "is": ["eq", 3] }For fields of type object, use dot notation to refer to nested fields. Field "bar", nested under field "foo", equals 3:
{ "field": "foo.bar", "is": ["eq", 3] }The integer field "foo" equals 3 and the integer field "bar" is less than 10:
{
"and": [
{ "field": "foo", "is": ["eq", 3] },
{ "field": "bar", "is": ["lt", 10] }
]
}Either the uppercased value of the string field "foo" equals "AHREFS", or all string elements in the array field "bar" have the prefix "Ahrefs" and suffix "seo".
{
"or": [
{
"field": "foo",
"modifier": "uppercase",
"is": ["eq", "AHREFS"]
},
{
"field": "bar",
"list_is": {
"and": [
["prefix", "Ahrefs"],
["suffix", "seo"],
]
}
}
]
}The filter syntax is described by the following grammar, expressed in BNF-style notation.
A term enclosed in angle brackets < and > denotes a symbol. A symbol followed by a + denotes a non-empty array containing the symbol. A ? preceding an object field indicates that the field is optional.
The two terminal symbols are defined as follows:
<field_alias>A filter field alias. See the particular endpoint's documentation for the list of valid aliases. Note that theselectandwhereparameters may accept different aliases.<value>A JSON value. It should match the type of the field (or of the field's modifier, if one is present).
Permitted patterns in regex filter expressions differs by tool.
- Keywords Explorer: Only
*as a wildcard operator. - Site Explorer: RE2 syntax.
<bool_filter> ::= { "and" : <bool_filter>+ }
| { "or" : <bool_filter>+ }
| { "not" : <bool_filter> }
| <expr>
<expr> ::= {
"field" : <field_alias>,
? "is": <condition>,
? "list_is": <list_condition>
}
<condition> ::= [ "eq", <value> ]
| [ "neq", <value> ]
| [ "gt", <value> ]
| [ "gte", <value> ]
| [ "lt", <value> ]
| [ "lte", <value> ]
| [ "substring", <value> ]
| [ "isubstring", <value> ]
| [ "phrase_match", <value> ]
| [ "iphrase_match", <value> ]
| [ "prefix", <value> ]
| [ "suffix", <value> ]
| [ "regex", <value> ]
| "empty"
| "is_null"
<condition_bool_filter> ::= { "and" : <condition_bool_filter>+ }
| { "or" : <condition_bool_filter>+ }
| { "not" : <condition_bool_filter> }
| <condition>
<list_condition> ::= { "any" : <condition_bool_filter> }
| { "all" : <condition_bool_filter> }