Poll the permission-relevant change feed
/api/v1/changesForward, cursor-paginated catch-up feed of permission- and identity-relevant changes (role assignments, roles, permissions, hierarchy, membership, identity lifecycle, session revocation) — the pull complement to webhooks. Events are returned oldest-first as { id, event, data }, byte-identical to the webhook delivery body so the same handler can process pushed and replayed events. Store pagination.next_cursor and pass it back as ?cursor= to resume; an empty page echoes your cursor so you can keep polling. Account scope comes from the API-key / JWT principal; an env-pinned key only ever sees its own Application/Environment. Replay reaches only as far back as audit rows are retained.
Authentication
Authorization Option A JWT access token
X-API-Key Option B API key for management-tier access
Query Parameters
cursorstring Optional Opaque base64url cursor returned by the previous response as `pagination.next_cursor`. Omit for the first poll.
limitnumber Optional Page size. Defaults to 50; max 200.
Responses
application/json
items *ChangeEventDto[]pagination *object
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Pagination
This endpoint returns a paginated collection. Use the query parameters below to page through results.
pagenumberPage number (1-indexed). Defaults to 1.
takenumberItems per page (1–100). Defaults to 20.
Each response includes an items array alongside a pagination object with item_count, page_count, has_previous_page, and has_next_page fields.
Returned object
curl -X GET "https://auth.canopy-io.com/api/v1/changes?cursor=value&limit=0" \ -H "X-API-Key: $CANOPY_API_KEY"
{ "items": [ { "id": "string", "event": "string", "data": { "account_id": "string", "application_id": "string", "environment_id": "string", "actor_id": "string", "actor_type": "string", "resource_type": "string", "resource_id": "string", "metadata": {}, "timestamp": "string" } } ], "pagination": { "next_cursor": "string" } }
Tell us how we can improve this guide.