Skip to main content
The delivery list and the PULL feed use opaque, forward-only cursors.
1

Request the first page

Call the endpoint with no after. Optionally set limit and any filters.
2

Read data.nextCursor

A non-null value means there are more results.
3

Request the next page

Call again with after=<nextCursor> and the same filters. Stop when nextCursor is null.
limit defaults to 25 and caps at 100 — a larger value is silently clamped, while a value below 1 is 400 ERRWHK_1401. A malformed date is ERRWHK_1402; a startDate after endDate is ERRWHK_1403.

Date windows

Both feeds also accept startDate and endDate, each an ISO-8601 instant (2026-05-21T10:00:00Z) or a bare date (2026-05-21). A bare startDate is read as 00:00:00Z and a bare endDate as 23:59:59.999999Z, so startDate=2026-05-21&endDate=2026-05-21 covers the whole of the 21st. Supplying only one bound is fine — the other end stays open. The dates say which rows are in scope and the cursor says where the last page stopped, and the two are independent. To page through a fixed window, keep startDate and endDate constant and advance only after.
The window is validated before the cursor is decoded and before the PULL-subscription lookup, so a malformed date is always reported as a bad date — never masked as an ERRWHK_1400 or a 404. A startDate later than endDate is a 400 rather than a silently empty result.
A short page is not the end. Filters are applied after the query, so a page can return fewer than limit items — even zero — while nextCursor is still non-null. Keep following the cursor until it is null.

Cursor scope

Cursors are bound both to you and to a single feed, either DELIVERIES or EVENTS. Tampering with one, forging one, or reusing another partner’s returns 400 ERRWHK_1400 — all causes answer alike, so a guessed cursor learns nothing. A limit below 1 is 400 ERRWHK_1401.
The feeds are ordered in opposite directions on purpose. The delivery log answers “what just broke?”, so it leads with the newest. The event feed is a replayable stream you checkpoint through in order, so it leads with the oldest.