GET /organisations/{id}/users, GET /organisations/{id}/api-tokens, etc.) support a consistent query system for filtering results, sorting them, and paginating through large collections. Once you understand the pattern, it applies identically across every list endpoint.
Filtering
Filtering is controlled via thefilter query parameter. Multiple filter conditions are comma-separated, and the system evaluates them with an implicit AND — meaning all conditions must be true for a result to be returned.
The basic syntax for equality is field=value. For inequality, use field!=value. For more advanced comparisons, Voxmind supports a colon-delimited comparator syntax: field=comparator:value.
The supported comparators are gt (greater than), gte (greater than or equal to), lt (less than), lte (less than or equal to), like (case-sensitive pattern match), and ilike (case-insensitive pattern match). The like and ilike comparators support standard SQL-style wildcards: % matches any string of zero or more characters, and _ matches any single character.
Here are some practical examples to illustrate the pattern:
Sorting
Sorting is controlled via thesort query parameter. It uses the same colon-delimiter pattern for direction: sort=field:direction. Use asc for ascending (A→Z, oldest→newest) and desc for descending. Multiple sort keys are comma-separated and applied in order of priority.
Pagination
Voxmind uses page/per_page pagination rather than cursor-based pagination. Theper_page parameter controls how many results are returned per page (maximum 300, default 100), and the page parameter specifies which page of results you want, starting at 1.
The response headers include X-Total-Pages, which tells you how many pages exist in total for your query. This lets you build a complete pagination loop without needing to guess when you’ve reached the end.
Combining all three
The real power comes from combining filtering, sorting, and pagination together to build efficient queries. For example, to retrieve all enabled API tokens ordered by creation date, 20 at a time:X-Total-Pages returns 3, you’d make two additional requests with page=2 and page=3 to retrieve the complete set. A clean pattern for this in application code is to loop while current_page <= total_pages, incrementing page on each iteration.
