Skip to main content
The data coverage manifest is the institutional-trust artifact of the Alterscope API. It is a machine-readable inventory of which markets, vaults, feeds, and protocols we have complete data for, and where we have known gaps. You can stake risk decisions on the answer because the answer names its own gaps. There are two endpoints:
  • GET /v2/data-manifest returns the top-level summary across every scope.
  • GET /v2/data-manifest/coverage returns per-row coverage with named gaps, sorted worst-covered first.

Refresh cadence

Both endpoints are cached for 5 minutes. The actual cache age is reported on every response at meta._agentic.freshness.age_seconds, and the next refresh is at meta._agentic.freshness.next_update_at. The cache TTL is honest: a non-zero age_seconds means the snapshot is older than zero seconds, not “fresh because we said so.”

Endpoint: GET /v2/data-manifest

Open access. Returns the cross-scope inventory.
The honest framing matters: markets.unknown = 423 means 423 markets have classification rows but the staleness probe could not assign a verdict yet. That is the gap, not a bug, and it is the contract this endpoint exists to expose.

Endpoint: GET /v2/data-manifest/coverage

Team plan or higher. Returns per-row coverage with completeness percentages and gap arrays.

Query parameters

Sort order

Rows are ordered by history_completeness_pct ASC, then id ASC. Worst- covered first is intentional. Customers asking “what is the gap” should not have to scroll past the well-covered rows to find it.

Gap kinds

last_update_at contract

last_update_at reflects when the underlying data last changed (most recent oracle price, governance event, or registry write), not when the manifest row was computed. Manifest computation time is on meta._agentic.freshness.computed_at.

completeness_pct math

completeness_pct = rows_present / rows_expected_if_full * 100. Per scope: The math is documented in the handler source so it can be audited at the grep boundary, not just here.

Tier gating