Use this to read Apier's cross-source change archive — detected created / updated / deleted events across the upstreams Apier polls: Brønnøysund ingestion plus the multi-source pollers for Altinn schemas, DigDir policies, and Norges Bank rates. It answers "what changed, where, and when?" so an agent can drive an incremental sync instead of re-fetching whole entities. NOT every row is a real-world change: each row carries a derived `observation_kind` — first_observation (the archive's first sighting of a field/entity, i.e. Apier's cache warming up) vs value_change (a genuine observed transition). Filter by { source } (brreg / altinn / digdir / norges_bank …), { entity_type }, { entity_id } (e.g. a specific org number), { change_type } (created / updated / deleted), and a { from }–{ to } detected_at date range (ISO 8601 with a timezone offset — bare `Z` or `+02:00`, never a bare local time; `from` must be ≤ `to`). Queries WITHOUT { entity_id } return non-personal rows only — role-holder field rows (board_members / signaturrett / prokura / innehaver) AND whole-entity company created/deleted rows (their full snapshots embed role-holder arrays) are withheld — intentionally, not an ingestion gap. The org-scoped form with { entity_id } returns everything, and the response says so via `personal_fields_withheld: true`. Results are keyset-paginated newest-first: pass { limit } (1–500, default 50) and carry the response's `next_cursor` back into { cursor } verbatim for the next page — cursors are HMAC-signed, so constructing or editing one is rejected as CURSOR_INVALID. The public projection strips the internal correlation_id but preserves `source_snapshot_id` (a consumer-facing receipt join). Input: { source?, entity_type?, entity_id?, change_type?, from?, to?, limit?, cursor? }. Failure modes the agent must handle: SCOPE_INSUFFICIENT if the key is not scoped read:changes; VALIDATION_FAILED on a malformed date, an out-of-range limit, or from > to; CURSOR_INVALID if the cursor was tampered or expired (start over without a cursor). This tool has no sandbox mirror — under the sandbox bearer it returns SANDBOX_TOOL_UNAVAILABLE; call it with a real read:changes key.