Events
Poll GET /v1/events to reconcile state without relying solely on webhook delivery.
GET /v1/events (scope events:read) returns the same envelopes your webhook
endpoints receive, but pull-based. Use it to reconcile state after downtime,
to back an integration that cannot expose an HTTPS receiver, or to
double-check that no webhook delivery was missed.
Listing events
GET /v1/events?limit=50
Authorization: Bearer arclt_live_...{
"data": [
{
"id": "evt_9f2c4b1e5a7d4c0f8b3a2d1e6f5c4b3a",
"type": "subscription.active",
"timestamp": "2026-07-02T12:34:56Z",
"api_version": "2026-07",
"data": { "...": "..." }
}
],
"next_cursor": null
}Results are ordered newest first. Filter by one or more event types with
type (repeat the parameter, or pass a comma-separated list):
GET /v1/events?type=subscription.active,subscription.cancelledGET /v1/events/{id} fetches a single envelope by id.
Polling with after_id
after_id returns only events created after the given event's id, so you can
track a checkpoint instead of a timestamp:
GET /v1/events?after_id=evt_last_seen_idA typical polling loop:
- Store the
idof the newest event you have processed. - On each poll, call
GET /v1/events?after_id=<that id>&limit=100. - Process the page. If
next_cursoris present, keep paging withcursoruntil it is empty; that page still respectsafter_id, so every event returned is new. - Advance your checkpoint to the newest
idyou saw (results are newest first, so that is the first item of the first page) and wait before polling again.
Because pages are newest-first, replay a batch in reverse if you need to apply events in chronological order.
Reconciliation
Every event's data is a snapshot of the resource at projection time, which
can already be behind the resource's current state by the time you read it
(the same property Stripe's events have). Treat GET /v1/events as a change
feed, not a state store: after acting on an event, re-fetch the underlying
resource (for example GET /v1/subscriptions/{id}) if you need current
truth rather than the value at the moment the event fired.
Events are retained for 90 days, which bounds how far back reconciliation via this endpoint can look.