Skip to main content
Poll for your events instead of hosting a receiver. The feed returns your canonical events oldest-first, filtered to your PULL subscription, with cursor pagination. Requires the events permission and one ACTIVE PULL subscription.

End to end

1

Create a PULL subscription

POST /api/v0/webhooks/subscriptions with "deliveryMode": "PULL" and no target. It never delivers anything — it carries the eventFilter and schemaVersion this feed reads. One live PULL subscription per partner. See Create a PULL subscription.
2

Poll this endpoint

Send your API key and secret, optionally with types and limit.
3

Read the page

Take data.events — oldest first — and data.nextCursor.
4

Paginate

Call again with ?after=<nextCursor> until nextCursor is null. A short page that still carries a cursor is normal, so keep going.
5

Checkpoint and deduplicate

Persist the cursor, and deduplicate on eventId. Pull responses are not signed.
With no active PULL subscription, this endpoint returns 404 — not an empty list.

Query parameters

string
Narrows your subscription’s filter. Repeatable. It cannot widen the filter beyond what the subscription allows.
string
Pagination cursor.
integer
default:"25"
Page size, maximum 100.
Returns data.events[] oldest first, data.count, and data.nextCursor.
Same projection as PUSH. The feed renders through the exact projection PUSH signs, with every leaf value as a string, so what you poll reconciles with what a PUSH delivery would have contained.
200 · 400 bad limit, missing events permission, or INVALID_CURSOR · 401 authentication · 404 no active PULL subscription · 503 directory unavailable