Pagination & filtering
Page, filter and sort list endpoints.
List endpoints (such as workspaces) share a set of
query parameters, all prefixed with $. Not every endpoint supports every
parameter — each endpoint's reference page lists the ones it accepts.
| Parameter | Type | Description |
|---|---|---|
$offset | integer | Number of items to skip. Omit it to start from the beginning. |
$limit | integer | Maximum number of items to return in one page. |
$filter | string | Narrows the result to items matching an expression. |
$orderBy | string | Field to sort by, with an optional direction. |
Paging through results
Combine $offset and $limit to walk the collection. The meta.maxResults
field in the response tells you the total number of matching items, so you know
when to stop. A list response wraps the rows in items:
{
"items": [ /* … */ ],
"meta": { "maxResults": 128 }
}# First page
curl "https://api.knips.com/feeds?\$offset=0&\$limit=20" -H "x-api-key: YOUR_API_KEY"
# Next page
curl "https://api.knips.com/feeds?\$offset=20&\$limit=20" -H "x-api-key: YOUR_API_KEY"Remember to URL-encode the $ (%24) if your HTTP client treats it specially,
and to quote the URL in a shell so $limit isn't read as a variable.
The public posts endpoint (GET /feeds/{feedId}/posts) caps $limit at
30 and $offset at 100 — higher values are quietly clamped, not
rejected.
Contact search
Contacts use the optimized POST /feeds/{feedId}/contacts-search endpoint.
Pagination, filtering, sorting and selected fields are sent in the JSON request
body. limit and offset are required. The maximum limit is 100. A
larger value returns 400 and the search is not run.
Omit filter to search all contacts in the workspace:
curl https://api.knips.com/feeds/YOUR_FEED_ID/contacts-search \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"limit": 20,
"offset": 0,
"orderBy": { "field": "created", "direction": "desc" },
"fields": ["id", "name", "email", "created"]
}'Use a structured filter to narrow the results:
{
"limit": 20,
"offset": 0,
"filter": {
"type": "filter",
"field": "name",
"operator": "like",
"value": "ola"
}
}Product search
Products use POST /feeds/{feedId}/products-search. Pagination, filtering,
sorting, selected fields and natural-language search are sent in the JSON
request body. limit and offset are required. The maximum limit is 100.
Omit filter and prompt to search all products in the workspace:
curl https://api.knips.com/feeds/YOUR_FEED_ID/products-search \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"limit": 20,
"offset": 0,
"orderBy": { "field": "created", "direction": "desc" },
"fields": ["externalId", "title", "price", "imageUrl"]
}'Use a structured filter to narrow the results:
{
"limit": 20,
"offset": 0,
"filter": {
"type": "filter",
"field": "title",
"operator": "ilike",
"value": "bottle"
}
}Sorting
For GET list endpoints, pass a field name followed by a direction — asc
(default) or desc, separated by a space:
?$orderBy=createdAt descFiltering
For GET list endpoints, $filter takes an OData-style expression of the form
field operator value, with string values in single quotes. Combine conditions
with and / or.
| Operator | Meaning |
|---|---|
eq / ne | equals / not equal |
gt / ge | greater than / greater than or equal |
lt / le | less than / less than or equal |
like | text match |
in | value is in a list |
between | value is within a range |
?$filter=name eq 'Summer campaign'
?$filter=created gt '2026-01-01' and archived eq falseThe set of filterable fields depends on the endpoint — each endpoint's
reference page shows whether it supports $filter.
On GET /feeds, results are automatically scoped to the workspaces your API
key can access — your $filter is combined with that scope.