Pagination and filters
List endpoints share one shape:
HTTP
GET /v1/templates?limit=50&sort=-updatedAt&filter[name][contains]=welcome&include=totalJSON
{
"data": [
{
"id": "tpl_01JA2C4E6G8J0K2M4P6R8T0V2X",
"name": "Welcome postcard",
"folderId": null,
"productId": "prd_01J9ZZZZZZZZZZZZZZZZZZZZP6",
"productSpecificationId": "psp_01J9ZZZZZZZZZZZZZZZZZZZZA6",
"draft": {
"revision": 7,
"updatedAt": "2026-10-14T15:20:11.000Z",
"updatedById": "usr_01J9ZZZZZZZZZZZZZZZZZZZZU1"
},
"latestVersion": {
"id": "tv_01JA2C4E6G8J0K2M4P6R8T0V3Y",
"number": 3,
"publishedAt": "2026-10-14T15:22:40.000Z",
"publishedByType": "USER",
"publishedById": "usr_01J9ZZZZZZZZZZZZZZZZZZZZU1",
"staticLayerStatus": "READY"
},
"archivedAt": null,
"createdAt": "2026-09-30T08:00:00.000Z",
"updatedAt": "2026-10-14T15:22:40.000Z"
}
],
"nextCursor": "eyJzIjpbIjIwMjYtMTAtMTRUMTU6MjI6NDAuMDAwWiJdfQ",
"hasMore": true,
"totalCount": 132
}Each row of data is the operation's list view (here a template); the example shows one of the fifty.
limit: 1 to 200, default 50.cursor: thenextCursorof the previous page; keep the samesortand filters or the cursor is refused.sort: comma separated field names,-prefix for descending; the reference lists the sortable fields per endpoint. Ties break on the id, so paging never skips or repeats a row.filter[field]=valueequals;filter[field][op]=valuewitheq,ne,in(comma separated),gte,gt,lte,lt,null(trueorfalse) andcontains(case-insensitive text). Dates accept RFC 3339 orYYYY-MM-DD.include=totaladdstotalCountfor the filter.
An unknown field, operator or value answers 422 validation_failed with one entry per parameter in errors, named as you wrote it (filter[status][in]).
The SDKs accept the nested form and serialise it:
TypeScript
await client.templates.list({ query: { filter: { status: { in: ['ACTIVE', 'ARCHIVED'] } } } });Python
client.templates.list(query={"filter": {"status": {"in": ["ACTIVE", "ARCHIVED"]}}})