---
title: "Poll changes"
method: GET
path: "/v0/changes"
tags: ["Changes"]
---

# Poll changes

`GET /v0/changes`

## Request

- Base URL: `https://docs.quivr.thevibecompany.co` (the document declares no server; this is the origin it was published from)
- URL: `https://docs.quivr.thevibecompany.co/v0/changes`
- Auth: HTTP bearer

Same durable journal as SSE. Every durable event has one identity and appears exactly once in a forward cursor traversal, in stable order with per-Record order preserved. Concurrent writes to different Records need not appear in exact commit order. Reusing an older cursor can redeliver events. Without cursor, return empty items and an exact start-now cursor, excluding already committed changes while retaining then-in-flight writes. Readers advance only through a safe published prefix; aborted allocations may leave gaps. In healthy parallel mode, publication delay is bounded by the longest configured engine transaction timeout (30 seconds by default) plus two 100 ms publisher polls. Outside long-running or prepared transactions and database unavailability can delay publication; readers fail closed rather than skip late commits. Cursor binds Organization, Corpus filter and authorization scope. Expiry is 410 cursor_expired with resync_url, never silent reset; changed scope/filter is 409 cursor_scope_changed with resync_url. resync_url is the API-relative Record catalog route for the Corpus (/v0/records?corpus_id=...). next_cursor advances over scanned events even when none are visible. Public events are invalidations; reread current state, do not replay historical content into a current mirror.

## Query parameters

- `cursor` string
- `corpus_id` string, required
- `limit` integer

## Response `200`

Successful response

- ChangePage
  - `items` ChangeEvent[], required
    - `event_id` string, required
    - `type` string, required
    - `schema_version` string, required
    - `occurred_at` string, date-time, required
    - `resource` ResourceReference, required
      - `kind` string, required
      - `id` string, required
      - `corpus_id` string
    - `cursor` string, required
    - `monitoring` MonitoringReferences: owner is the Subscription Owner, so a client routes the notice to its user; absent for a global Subscription and in notices committed before owners existed. match_id is the new Match for created/corrected, prior positive Match for no_longer_matches/withdrawn. record_version_id is the causal correction version for corrected/no_longer_matches, otherwise the matched version. delivery_id is present only when a destination created a Delivery. References alone confer no access.
      - `match_id` string, required
      - `record_id` string, required
      - `record_version_id` string, required
      - `subscription_id` string, required
      - `subscription_version_id` string, required
      - `delivery_id` string
      - `previous_match_id` string
      - `owner` string: Subscription Owner, an opaque end-user reference defined by the client application (for example user-123). Quivr stores, filters and echoes it without interpreting it. At most 128 characters without control characters; none is reserved for the listing filter. A refused owner is 422 invalid_owner, in a creation body as in the listing filter.
  - `next_cursor` string, required
  - `has_more` boolean, required

## Other responses

- `default`: Structured error; see contract HTTP mapping.

---

[API](https://skmtc.dev/thevibecompany/apis/quivr-http-api.md) - [All operations](https://skmtc.dev/thevibecompany/apis/quivr-http-api/llms.txt) - [OpenAPI document](https://skmtc.dev/thevibecompany/apis/quivr-http-api/revisions/4f4e30ba8f4e?raw)
