Response envelope
Every list response has the same shape:| Field | Type | Meaning |
|---|---|---|
data | array | Up to limit items for this page. |
pagination.limit | number | The effective page size the server used. |
pagination.has_more | boolean | true if more pages exist beyond this one. |
pagination.next_cursor | string, optional | Present when has_more is true. Pass it as cursor on the next request. |
meta.request_id | string | Per-request ID — see Errors → Using request_id. |
Request parameters
Every list endpoint accepts these two query parameters:| Parameter | Type | Default | Max | Notes |
|---|---|---|---|---|
limit | number | 20 | 100 | Items per page. Smaller pages keep responses fast; larger pages reduce round trips for bulk iteration. |
cursor | string | — | — | The pagination.next_cursor from a prior page. Omit on the first request. |
verdict, search, sort) on top of these. See the per-resource filter sections below.
Iterating
The canonical pattern: call the endpoint, processdata, and loop while has_more is true, passing next_cursor forward.
Auto-pagination in the SDKs
The server SDKs ship with an auto-pagination helper that abstracts the cursor loop. Use it when you want to iterate the entire result set without managing state.Filters and sorting
Filter parameters layer on top of the standard pagination params. They narrow the result set but don’t change the envelope shape.Sessions
| Parameter | Type | Notes |
|---|---|---|
verdict | "bot" | "human" | "inconclusive" | Filter to a single verdict category. |
search | string | Fuzzy match against session ID and request metadata. |
Fingerprints
| Parameter | Type | Notes |
|---|---|---|
search | string | Fuzzy match against visitor ID, user agent, or IP. |
sort | "seen_count" | "first_seen" | Orders results. Default is most-recently-seen. |
API keys
| Parameter | Type | Notes |
|---|---|---|
limit, cursor | — | Pagination only. No additional filters today. |
limit controls page size of the filtered result set.
Caveats
- Don’t construct cursors. They’re opaque tokens — the server may change their encoding. If you need to page from a specific timestamp or ID, use a filter parameter instead.
- Cursor lifetimes. Cursors remain valid as long as the underlying result set does. For sessions (15-minute durable window) and fingerprints (365-day sliding window), a cursor minted today is valid until the records it points into expire.
- Result stability under concurrent writes. New records created during a long iteration may or may not appear in later pages — cursors provide “snapshot-like” stability without strong isolation guarantees. For auditing across a fixed window, pass a time filter when one is available for that resource.
- Ordering. Each list endpoint documents its default sort. Don’t assume an order that isn’t explicitly documented.
What’s next
Authentication
Key types and scopes.
Errors
Envelope shape, status codes, retry semantics.
Sessions
The most common list endpoint.
Fingerprints
Durable visitor fingerprint lookup.