Read and export
Deleted records never come back on any read path: the change feed, export parts and point reads are all produced from live data.
Change feed
Section titled “Change feed”GET /v1/changes?cursor=head&limit=100&wait=30Events: chunks.published, deletion.accepted, epoch.rolled, erasure.completed. The answer carries next_cursor. The cursor is opaque; limit is at most 1,000, wait at most 30 seconds, and events are kept for 30 days. An expired cursor answers 410 cursor_expired; start an export and continue from its as_of_cursor.
Exports
Section titled “Exports”POST /v1/exports{"partitions": ["orders"], "from_day": "2026-09-01", "to_day": "2026-09-30"}- The answer is
201(ready) or202(waiting for approval). - Parts stream as NDJSON from
GET /v1/exports/{id}/parts/{n}, checked by theReindeer-RecordsandReindeer-SHA256trailers. - One export part spans eight chunks; exports expire after seven days.
These exports wait for a second person: full exports that name no partition and no day, exports above 5,000,000 records for one principal or 10,000,000 across principals within 24 hours, and exports of more than half the live corpus.
Point reads
Section titled “Point reads”GET /v1/records/{record}?day=2026-09-20&partition=trReturns the newest live version of the record. Point reads enter the access log, with the record id written as its pseudonym.
Partitions
Section titled “Partitions”GET /v1/partitions lists the published partitions with their day ranges, record and chunk counts and sizes.