# Retrieve changes since your last check

Poll the documents change feed with since and continue with next_since.

## Poll for what is new or revised
GET /api/changes?dataset=documents&since=<ISO 8601 timestamp> returns only documents we newly collected (change_type new or newly_discovered) or saw change (revised) after since, oldest first, each with change_at in UTC. The same rows answer at /api/datasets?dataset=documents&mode=changes&since=, one row per event; /api/changes collapses them to one item per document at its latest settled event. It is anonymous; tiers bound the page size and history window. See the [operation reference](/docs/api/get-changes).

```bash
curl 'https://china-snapshot.com/api/changes?dataset=documents&since=2026-11-01T00:00:00Z&limit=50'
```

## Continue without repeats
Each response carries next_since (also returned as next_cursor). Pass it back as since, or as cursor, to continue the walk; it is signed, so do not edit it. Store the last next_since as your checkpoint between polls. Events from the last 10 minutes are held back so a slow collection commit is never skipped, which means a fresh event can appear on the following poll rather than this one.

## Narrow the feed
source=, q= and watch= (alias topic=) work as they do on /api/datasets, so dataset=documents&watch=export-controls&since=... polls one maintained topic.

## Availability
Rolling out: the change feed, the document observation fields and revisions[] answer once database migration 043 is applied on a deployment. Before that, /api/changes and mode=changes answer HTTP 503 with code unavailable ("not yet enabled"), and list rows return the pending fields as null, named in unavailable_fields. Treat a 503 as "not enabled yet", not as an empty feed, and keep polling overlapping from/to windows until it answers.

## What a change means
revised means a retained body with a different content hash was observed after first_seen. It is our observation of the publisher's page, not the publisher's own revision log. newly_discovered means the publisher date is known and falls more than two days before we first saw the document. Polling only: there are no webhooks yet. The [record contract](/docs/data/documents) defines every field.
