How to Build URL Query Strings
This syntax guide defines how to construct query parameters for filtering, searching, sorting, and paginating records across objects.
The same rules apply consistently across any object that accepts a query string paramter including Data List Objects (DLO) and API calls.
Quick summary:
- Queries are passed as standard
key=valuepairs, combined using&(e.g.key=value&key=value). - All normal URL query string rules apply, including URL encoding where required.
- This system adds a small set of extensions where operators are placed directly after the
=(for example!,*,^,>,<, andNULL) to control filtering and search behaviour.
Once you understand the extensions below, the rest behaves like a standard key=value query string.
Basic query format
?{table}.{field}={value}
Selects records where a field equals the supplied value.
?items.status=active
Filtering syntax
| Operation | Syntax | Example | Description |
|---|---|---|---|
| Equals | ?{table}.{field}={value} |
?items.status=active |
Selects records where the field equals the supplied value. |
| Not equals | ?{table}.{field}=!{value} |
?items.status=!inactive |
Selects records where the field does not equal the supplied value. |
| Empty | ?{table}.{field}= |
?items.description= |
Selects records where the field is empty. |
| Null | ?{table}.{field}=NULL |
?items.description=NULL |
Selects records where the field is null. |
| Greater than or equal | ?{table}.{field}=>={value} |
?items.price=>=100 |
Selects records where the field is greater than or equal to the supplied value. |
| Less than or equal | ?{table}.{field}=<={value} |
?items.price=<=500 |
Selects records where the field is less than or equal to the supplied value. |
Text matching syntax
| Operation | Syntax | Example | Description |
|---|---|---|---|
| Contains | ?{table}.{field}=*{value} |
?items.name=*phone |
For string fields configured with full-text indexing. Matches values that contain the supplied value. |
| Starts with | ?{table}.{field}=^{value} |
?items.name=^pro |
For string fields configured with auto-complete indexing. Matches values that start with the supplied value. |
Full-text search
Full-text search parameters affect relevance scoring and result ordering. They do not filter records directly.
| Search type | Syntax | Example | Description |
|---|---|---|---|
| Search all indexed fields | ?{table}.q={value} |
?items.q=wireless charger |
Searches across all full-text indexed fields in the table and applies relevance scoring. |
| Search one indexed field | ?{table}.{field}.q={value} |
?items.name.q=charger |
Searches a specific full-text indexed field for relevance scoring and ordering. |
Combining multiple parameters
Multiple query parameters can be combined using &.
?items.status=active&items.price=>=100&items.name=*pro
Sorting
Use the sort parameter to control result ordering.
?sort={field} ASC
?sort=price DESC
Use ASC for ascending order or DESC for descending order.
Sorting by multiple fields
You can sort by multiple fields by separating each rule with a comma.
?sort=price ASC,name DESC
This sorts by price ascending, then by name descending when values are equal.
Pagination
Use pageNumber and pageSize to control which records are returned.
?pageNumber=1&pageSize=25
Query Syntax and Interpretation Rules
Object, Table, and Field Resolution
Query parameters follow one of the formats below:
?{table}.{field}={value}
?{object}.{table}.{field}={value}
When an object is provided, the query is resolved only against that object. The specified table must belong to the object, and the field must exist within that table.
If no object is provided, the query applies to all objects on the current page that use the specified table.
Use the object-qualified format when:
- Multiple objects on the page reference the same table
- You need to target a specific object without affecting others
Case Sensitivity
Table and field names are case sensitive and must match exactly.
Values are not case sensitive.
?items.status=active
?items.status=ACTIVE
?items.status=Active
Reserved Operators
The following values are reserved because they are used as query operators:
! , ^ , * , < , <= , > , >= , NULL
If a value begins with a reserved character, wrap it in quotes so it is treated as a literal value.
?items.name="!Special"
Complete example
/api/data-list/example-list?items.status=active&items.price=>=100&items.name=*pro&sort=price ASC,name DESC&pageNumber=1&pageSize=25
This filters active items, restricts results to price ≥ 100, matches names containing "pro", sorts by price then name, and returns the first page of results.