Lists and paging
Every list the API answers has one shape and pages one way, so one loop reads any of them.
{ "data": [ { "viewLinkId": "…", "status": "active", "createdAt": "2026-10-14T09:30:12.418Z" } ], "hasMore": true, "nextCursor": "MXx2aWV3LWxpbmtzfDYzODk…"}- Newest first.
dataholds at mostlimititems, the newest first. - The next page: while
hasMoreistrue, ask again withcursorset tonextCursor, exactly as it came. The list continues just after the last item you were given, so items made or removed while you read never make you see one twice or miss one. On the last pagehasMoreisfalseandnextCursorisnull. A cursor is opaque: it works only on the list that gave it. limit: 1 to 200, 50 when left out.- A time window:
createdAfterandcreatedBeforekeep only the items made strictly after and strictly before an ISO 8601 date and time -2026-10-14T09:30:00Z; a time without an offset is UTC, and a date alone is its midnight. In a URL, write an offset’s+as%2B. status: a list whose items have a status narrows to one withstatus.- Only your workspace’s own. Another workspace’s item, or an id nobody issued, is
404 not_foundwhen read by its id, and is never listed. - Refusals: an input a list does not take -
limitout of range, a cursor it did not give, a time it cannot read,createdAfternot beforecreatedBefore, a status it does not know - is400 invalid_request, itsdetailnaming the input and what it takes.
| List | status |
Who |
|---|---|---|
GET /v1/extractions |
queued, splitting, extracting, completed, failed; and fileName, part of the file name |
any live key |
GET /v1/view-links |
active, expired, withdrawn |
a live key acting as the owner or an admin |
GET /v1/api-keys |
active, stopping, revoked |
a key acting as the owner or an admin |
GET /v1/credits/history |
type: grant, reservation, spend, refund, expiry, takenBack |
any key |
GET /v1/workspace/invitations |
pending, expired |
a key acting as the owner or an admin |
GET /v1/webhooks/{webhookId}/deliveries |
pending, delivered, dead |
any live key |
The workspace’s people (GET /v1/workspace/members) and its webhook endpoints (GET /v1/webhooks, at most
10) come whole, in the same shape with hasMore false: they fit on one
page, so those lists take no paging inputs. The templates list keeps its own shape (templates, defaultTemplateId):
the standard template and at most 20 of the workspace’s own.