Introduction
When a response from the Payroll Integrations API would include many results, the data is paginated and a subset is returned. For example,/v1/connections/{connection}/employees by default only returns the first 20 employees even if there are more employees available.
This page outlines how the response is structured for all paginated endpoints and how to configure the amount and order of the results.
Request
Query Parameters
The maximum number of records provided in the current response.
The starting point for retrieving records with respect to the beginning of the list.The resulting list is inclusive and zero-indexed with respect to the offset value.
The current sort order and direction.
sort is a single string value following the regular expression format of ^(-?\w+)(,-?\w+)*$.See the Sort section below for more information.Response
Data
All returned records are located in thedata property in the response.
Metadata
Pagination metadata is provided in themeta property in the response. It contains the following properties:
The maximum number of records provided in the current response.
The starting point for retrieving records with respect to the beginning of the list.The resulting list is inclusive and zero-indexed with respect to the offset value.
The number of records in the current response.Note: This is not the same as
limit. For example, a request can be configured to return a maximum of 20 records (limit) and only return 3 records (currentCount).The total number of records available.
The filters applied to the request. This object contains key-value pairs where each key is a field name and each value is either a simple equality value or an object with operator-based filters.When filters are applied, the
totalCount reflects the total number of records matching the filter criteria, not the total number of all records.Sort
The default sort property and direction varies depending on the endpoint. If the provided value is not a valid sortable property for the records, the endpoint returns 400 Bad Request, detailing which fields can be used for sorting. Even if the provided value is a valid property of the record schema, it does not guarantee that sorting is supported for that property. If the first character ofsort is - (e.g. -sortProperty), the list of records is returned in descending order.
To sort by multiple properties, separate the values by commas. The descending order syntax is also allowed for individual properties (e.g. sort=sortProperty,-anotherProperty).
Note: This returns a 400 Bad Request if the multi-sort configuration is not supported.
Examples
Ascending Sort
Descending Sort
Using Link Headers
Each response also includes a Link header that contains the previous, next, first, and last “page” URLs that will need to be iterated through.
limit is preserved for all relevant links provided while offset is changed depending on the page.
Listed below are the link headers generated for a request with query parameters limit=30&offset=60 and a total of 160 records:
Link header provides the URL for the previous, next, first, and last page of results:
- The URL for the current page is followed by
rel="self". - The URL for the previous page is followed by
rel="prev". - The URL for the next page is followed by
rel="next". - The URL for the last page is followed by
rel="last". - The URL for the first page is followed by
rel="first".
Filtering
Many endpoints in the Payroll Integrations API support filtering to retrieve a subset of records that match specific criteria. For example,/v1/payroll-connections/:payroll_connection/employee-data?updatedAt[gt]=2026-01-01 returns only employee data which has been updated after January 1st, 2026.
This section outlines the filtering syntax, supported operators, and how to combine multiple filters.
Query Parameters
Filters are applied using query parameters with the following syntax:Simple equality filter. Returns records where the field exactly matches the
value.
Operator-based filter. Returns records where the field matches the value according to the specified operator.See the Operators section below for the full list of supported operators.
Operators
The following operators are supported for filtering. Not all operators are available for every field; the allowed operators depend on the field’s data type.| Operator | Description | Example |
|---|---|---|
| (none) | Equal (default) | ?status=active |
eq | Equal | ?status[eq]=active |
ne | Not equal | ?status[ne]=deleted |
gt | Greater than | ?amount[gt]=100 |
gte | Greater than or equal | ?createdAt[gte]=2024-01-01 |
lt | Less than | ?amount[lt]=500 |
lte | Less than or equal | ?createdAt[lte]=2024-12-31 |
in | Matches any value in list | ?status[in]=active,pending |
not_in | Does not match any value in list | ?status[not_in]=deleted,archived |
contains | Case-insensitive substring inclusion | ?displayName[contains]=middle |
not_contains | Case-insensitive substring exclusion | ?displayName[not_contains]=another |
empty | Field is null | ?deletedAt[empty]=true |
not_empty | Field is not null | ?email[not_empty]=true |
Combining Multiple Filters
Multiple filters can be applied in a single request by including multiple query parameters. All filters are combined using AND logic, meaning records must match all specified conditions.Array Operators
Thein and not_in operators accept comma-separated values:
Null Checking
Use theempty and not_empty operators to filter on null values. These operators accept true or false as values:
[empty]=trueor[not_empty]=false— field is null[empty]=falseor[not_empty]=true— field is not null
Filter Error Handling
The API returns 400 Bad Request in the following cases:- Unknown filter field: Attempting to filter on a field that does not support filtering
- Invalid operator: Using an operator that is not allowed for the specified field
- Invalid value: Providing a value that does not match the expected field type (e.g., non-UUID value for a UUID field)
Response Metadata
When filters are applied to a request, the response metadata includes afilters object that reflects the active filters:
Combining Filtering with Pagination
Filters can be combined with pagination parameters. Filters are applied first, then pagination is applied to the filtered results:totalCount reflects the total number of records matching the filter criteria (156 records with updatedAt >= 2024-01-01), not the total number of all records.