Contents
All list endpoints return paginated results. The API uses offset-based pagination with consistent query parameters and response shape across every resource.
| 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.
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 |
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 (v1) |
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))
donePass 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 values are ignored (the endpoint uses its default ordering). Check the Swagger documentation on your instance for the sort options each endpoint supports.
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 — see individual endpoint documentation for availability.
| Endpoint Type | Max Page Size |
|---|---|
| Standard resources (Items, Inventory, etc.) | 250 |
| Order resources (POs, SOs, Work Orders) | 50 |
| Reports | 1000 |
Requesting a pageSize above the maximum silently caps it at the limit.
On this page