Changes
Beta. Change reads use the same cursor pagination and replay rules on two scopes: one company, and one watchlist.
Planned base: https://api.telltale.actuans.com. Not live. Bearer token required.
Company changes
Section titled “Company changes”GET /v1/companies/SG_UEN/12345678A/changes?limit=100Authorization: Bearer <api_token>The body is an event page { "events": [...], "next_cursor": ..., "source_health": {...} }, ordered by append-only ledger sequence. Grouped company.changed events link before/after observations and source snapshots.
A field with not_supplied on either side is reported as indeterminate rather than fabricated into a value change.
The company must be a resolved watched member or the response is 403 company_not_watched. Company cursors remain usable only while that company is still watched.
Watchlist changes
Section titled “Watchlist changes”GET /v1/watchlists/portfolio/changes?limit=100Authorization: Bearer <api_token>Portfolio pages include matching events, next_cursor, a summary of changed resolved members, unchanged resolved members, and unresolved inputs, plus source_health.
Watchlists and all their pages are isolated to the authenticated account. A watchlist absent from that account returns HTTP 404 with error.code: "not_found".
Cursors and replay
Section titled “Cursors and replay”next_cursor is present only when more matching events remain. Pass it URL-encoded as the next request’s cursor parameter.
The cursor is opaque and scope-bound. Do not parse or construct it.
Repeating the same request and cursor against an unchanged ledger returns the same event IDs and payload semantics, with no gaps or duplicates.
A malformed cursor, a portfolio cursor from another account or watchlist, or a cursor invalidated by a watchlist membership replacement returns invalid_cursor. It does not silently restart from the newest event.
limit must be an integer from 1 to 1000. The default is 100. An out-of-range value returns invalid_limit.