ArcalotlArcalotl

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.cancelled

GET /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_id

A typical polling loop:

  1. Store the id of the newest event you have processed.
  2. On each poll, call GET /v1/events?after_id=<that id>&limit=100.
  3. Process the page. If next_cursor is present, keep paging with cursor until it is empty; that page still respects after_id, so every event returned is new.
  4. Advance your checkpoint to the newest id you 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.

On this page