Docs / REST API

GET /v1/changes

Corpus changefeed since a date or a knowledge cursor (append-only, walkable)

Walk the feed: call once with since=<date|cursor>, then repeat with cursor=page.next_cursor until truncated=false. Rows come in FEED ORDER (cursor ascending) and next_cursor is the cursor of the LAST ROW RETURNED, so consecutive pages never overlap and never skip. A date in `since` is resolved to a starting position in the feed and echoed back as since_cursor — dates are a way to FIND a position, not a second paging mode. Each item carries its own `cursor`: stop anywhere, resume exactly there. `summary` counts the WHOLE tail behind the cursor, not just this page, so you can decide between paging through and dropping your cache. With as_of_knowledge=<cursor> the feed replays as it stood at that cursor.

Endpoint

GET https://api.lexatlas.creatora.app/v1/changes

Parameters

NameInRequiredTypeDescription
sincequeryyesstringYYYY-MM-DD or a knowledge cursor (integer)
cursorquerynostringsynonym of since; use page.next_cursor to walk the feed
jurquerynostringjurisdiction filter (csv)
limitquerynointegermax rows (default 100, cap 1000)
as_of_knowledgequerynostringreplay the feed as of this knowledge cursor

Example

curl -H "X-API-Key: lxa_YOUR_KEY" \
  "https://api.lexatlas.creatora.app/v1/changes?since=<since>"

Responses and error codes

StatusMeaningSchema
200{items[] with cursor, summary of the whole tail, page, knowledge}object
400bad request — see error_code (missing_parameter, invalid_parameter, invalid_body, invalid_cursor, empty_batch, batch_too_large, unsupported)Error
401missing/invalid API key (when auth is enabled) — error_code=unauthorizedError
413body too large — error_code=payload_too_largeError
429rate limit exceeded (per-key, per-minute window) — error_code=rate_limitedError

Errors use one envelope everywhere: error, error_code, hint, http_status. The full list of codes is served by GET /v1/errors.