Narrow any list to exactly the records you need, right in the query string. The same filter syntax works on every entity and every connected system, so one integration serves them all.Match a field#
Name the field in a filter query parameter. filter[<field>]=<value> matches by equality, and an operator goes in the key, filter[<field>:<op>]=<value>:GET /v4/work-orders?filter[priorityLevel]=1
GET /v4/work-orders?filter[dueAt:lt]=2026-10-01
GET /v4/work-orders?filter[title:contains]=pump
| Operator | Meaning | Works on |
|---|
eq | Equals (the default) | Every field type |
neq | Not equal | Every field type |
in | One of a comma-separated list | Every type except boolean |
gt | Greater than | Text, number, date |
gte | Greater or equal | Text, number, date |
lt | Less than | Text, number, date |
lte | Less or equal | Text, number, date |
contains | Text contains, case-insensitive | Text |
startsWith | Text starts with, case-insensitive | Text |
endsWith | Text ends with, case-insensitive | Text |
Text fields take all ten operators, and relations and enumerations take eq, neq and in. Each filter parameter in the API Reference lists its own set.in takes a comma-separated list: filter[statusCategory:in]=open,on_hold. In the text operators, % and _ are literal characters.neq on a non-relation field also matches records where the field is null. On a relation, records with no link are left out.Write filter values#
Relations filter by the related record's Makini id: filter[asset]=<id>. On a many-relation, this matches records whose relation includes that id. A work order's status is a relation too, so it filters by id. To filter by lifecycle state, use the statusCategory enumeration.
Dates take a date (2026-09-01, meaning midnight UTC) or an RFC 3339 date-time with an offset (2026-09-01T00:00:00Z).
Numbers are plain numbers. priorityLevel runs from 1 (highest) to 5 (lowest), so filter[priorityLevel:lte]=2 finds the two highest levels.
Booleans take true or false.
Enumerations take one of the values listed on the parameter. For a work order's statusCategory these are draft, pending_approval, open, in_progress, on_hold, completed, closed and cancelled.
null means "no value" with eq and neq on a non-relation field: filter[dueAt]=null finds records with no due date.
Lists never include soft-deleted records, whatever the filter.
Filter by a range#
Use the same field under two operators: filter[dueAt:gte]=2026-09-01&filter[dueAt:lt]=2026-10-01.The same field under the same operator twice is a 400.Reference#
Next steps#
Reading data
Paging, sorting and incremental sync on every list.
Relations and expand
Pull related records into the same response.
Makini Query Language
Combine filters with or, patterns and ranges in one statement.
Errors
What an error response looks like.