# Pagination, sorting and filtering

Cursor pagination, sort and filter parameters on list operations.

Lists return:

```json
{ "data": [], "page": { "nextCursor": "…", "prevCursor": null, "limit": 25, "total": 120 } }
```

- Pass `cursor=<page.nextCursor>` until it is `null`.
- `limit` 1–100 (default 25).
- `sort=-createdAt` (prefix `-` for descending; the allowed fields are listed per operation).
- `filter[field]=a,b` (comma = OR, different fields = AND). Unknown filters are `400` [`unknown-filter`](/errors#unknown-filter).
- `q` for free text where supported.
- Operations that support it take up to 5 `filter[metadata.<key>]=<value>` parameters (ANDed) on integrator-owned `metadata`.

Cursors are opaque and valid only with the same `sort` and `filter`; a cursor from another query is `400` [`invalid-cursor`](/errors#invalid-cursor).

## Long-running work

Exports, custom statements, reports and bulk submissions return `202` with a `Job` and `Location: /v1/jobs/{jobId}`. Poll [`getJob`](/reference/activity#getJob) until it reports `succeeded`, then download from `resultUrl` (pre-signed, 15 minutes).
