Contents
Pagination
Pagination
All list endpoints return paginated results. The API uses offset-based pagination with consistent query parameters and response shape across every resource.
Query Parameters
| Parameter | Type | Default | Range | Description |
|---|---|---|---|---|
page | integer | 1 | 1+ | Page number (1-based) |
pageSize | integer | 25 | 1–250 | Items per page |
sort | string | varies | — | Column to sort by (validated per endpoint) |
direction | string | ASC | ASC, DESC | Sort direction |
modifiedSince | datetime | — | — | Only return records modified on or after this timestamp |
Order-specific endpoints (Purchase Orders, Shipping Orders, Work Orders) accept additional parameters:
| Parameter | Type | Description |
|---|---|---|
startDate | datetime | Filter orders created on or after this date |
endDate | datetime | Filter orders created on or before this date |
Order endpoints have a smaller maximum page size of 50 instead of 250.
Response Shape
Every paginated response wraps results in a consistent object:
{
"value": [
{ "partNo": 1, "shortID": "WIDGET-001", "description": "Standard Widget" },
{ "partNo": 2, "shortID": "GADGET-002", "description": "Premium Gadget" }
],
"totalCount": 847,
"page": 1,
"pageSize": 25,
"pageCount": 34,
"hasMore": true
}| Field | Type | Description |
|---|---|---|
value | array | Items in the current page |
totalCount | integer | Total records matching your query (before paging) |
page | integer | Current page number |
pageSize | integer | Items per page (what you requested, capped at max) |
pageCount | integer | Total pages available |
hasMore | boolean | true if more pages exist after this one |
Response Headers
Paged responses also include these headers for clients that prefer header-based pagination:
| Header | Value |
|---|---|
X-Total-Count | Total matching records |
X-Page-Size | Items per page |
X-Page | Current page number |
X-API-Version | API version (v2) |
Iterating All Pages
To retrieve all records, increment page until hasMore is false:
$page = 1
$allItems = @()
do {
$response = Invoke-RestMethod -Uri "$baseUrl/Item?page=$page&pageSize=100" `
-Headers @{ Authorization = "Bearer $token" }
$allItems += $response.value
$page++
} while ($response.hasMore)
Write-Host "Retrieved $($allItems.Count) items"page=1
while true; do
response=$(curl -s "$BASE_URL/Item?page=$page&pageSize=100" \
-H "Authorization: Bearer $TOKEN")
# Process items in .value
echo "$response" | jq '.value[]'
has_more=$(echo "$response" | jq '.hasMore')
if [ "$has_more" = "false" ]; then break; fi
page=$((page + 1))
doneSorting
Pass sort with a column name and optionally direction:
GET /Item?sort=shortID&direction=DESC&page=1&pageSize=50Available sort columns vary by endpoint. Invalid sort columns or directions return HTTP 400 (Invalid sort column or direction.). direction accepts only ASC or DESC (case-insensitive). Check the Swagger documentation on your instance for the sort options each endpoint supports.
Modified Since
Use modifiedSince for incremental sync. Only records with a Modified timestamp on or after your value are returned:
GET /Item?modifiedSince=2026-05-01T00:00:00Z&page=1&pageSize=250The timestamp should be in ISO 8601 format (UTC recommended). Store the latest Modified value from each sync run and use it as modifiedSince on the next run.
Not all endpoints support modifiedSince. Endpoints backed by entities with a Modified column filter on it; others reject the parameter with HTTP 400 (modifiedSince is not supported on this endpoint.).
| Endpoint | modifiedSince |
|---|---|
/Item, /Item/All | Supported |
/Asset, /Asset/All, /Asset/Types | Supported |
/Category, /Category/All | Supported |
/Customer, /Customer/All | Supported |
/Vendor, /Vendor/All | Supported |
/ReasonCode, /ReasonCode/All | Supported |
/Location | Supported |
/Warehouse | Supported |
/Inventory/MaterialIn, /Inventory/MaterialOut (and variants) | Supported |
/PurchaseOrder | Supported (header-level only) |
/ShippingOrder | Supported (header-level only) |
/WorkOrder | Supported (header-level only) |
/Inventory, /Inventory/{wid} | 400 — not supported |
/Warehouse/{id}/Items | 400 — not supported |
/Report/{id} | Not supported (ignored) |
Note: On order endpoints (
/PurchaseOrder,/ShippingOrder,/WorkOrder),modifiedSincefilters on the order header’sModifiedtimestamp and may not reflect all line-level changes.
Page Size Limits
| Endpoint Type | Max Page Size |
|---|---|
| Standard resources (Items, Inventory, etc.) | 250 |
| Order resources (POs, SOs, Work Orders) | 50 |
| Reports | 250 |
Requesting a pageSize above the maximum silently caps it at the limit. (The GET /Report/{id}/{count} convenience endpoint is the exception — it clamps count to 1–1000.)
On this page