Skip to content

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.

GET /v1/companies/SG_UEN/12345678A/changes?limit=100
Authorization: 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.

GET /v1/watchlists/portfolio/changes?limit=100
Authorization: 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".

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.