Most data vendors tell you what they cover. Alterscope also tells you where it doesn’t — as a live, machine-readable feed you can query before you build on a number. The data coverage manifest is that inventory: which markets, oracle feeds, vaults, and protocols have complete data, and exactly where the known gaps are. You can stake a risk decision on the answer because the answer names its own gaps.
Two endpoints, two depths
| Endpoint | What it returns | Access |
|---|
GET /v2/data-manifest | Top-level summary across every scope: market, feed, vault, and per-protocol counts broken down by status. | Open — no key required. |
GET /v2/data-manifest/coverage | Per-row coverage with completeness percentages and named gaps, sorted worst-covered first. | Team plan or higher. |
The summary is open on purpose: anyone evaluating Alterscope can see the shape of coverage before signing up. The per-row gap inventory — the artifact that tells you which specific feed is missing history — is the institutional differentiator and sits behind the Team tier.
Both endpoints are cached for 5 minutes. The actual cache age is reported on every response at meta._agentic.freshness.age_seconds, so a non-zero age means the snapshot is genuinely that old — never “fresh because we said so.”
How to read a coverage row
Each row in /v2/data-manifest/coverage describes one unit of coverage — an oracle feed, a market, a vault, or a protocol — and carries:
history_completeness_pct — how complete the data is for that row, 0–100.
classified / has_metadata — whether the row has been processed and whether it carries registry metadata.
last_update_at — when the underlying data last changed (most recent oracle price, governance event, or registry write) — not when the manifest was computed.
gaps — an explicit list of what’s missing, if anything.
Rows are returned worst-covered first. If you are asking “where is the gap,” you should not have to scroll past the healthy rows to find it.
What a gap means
| Gap kind | Meaning |
|---|
missing_metadata | The row has no metadata in its registry yet. |
missing_history | The row has metadata but no time-series history yet. |
stale | The row has data, but its latest update is older than its expected heartbeat. |
unverifiable | The row’s freshness semantics are not modeled yet (e.g. an oracle architecture outside the classified set). It is surfaced honestly rather than guessed. |
How completeness is measured
Completeness is rows_present / rows_expected_if_full, and what counts as “present” and “expected” depends on the scope:
| Scope | Present | Expected if full |
|---|
oracle_feed | observed price points in history | elapsed time ÷ expected heartbeat |
morpho_market | 1 if classified with a known staleness status | 1 |
morpho_vault | distinct governance event types observed | 7 (timelock, guardian, allocator, cap, fee, owner, queue) |
protocol | sum of its markets’ completeness | total markets in the protocol |
You can filter by scope, scope_id, and min_completeness_pct, and page with an opaque cursor. The full parameter and field reference is on the Data coverage manifest page in the API reference.
Why this is the trust mechanism
A vendor that only reports its wins is selling you confidence, not data. By publishing the gaps as a queryable feed, Alterscope lets you:
- Verify before you buy — check coverage for the exact markets you care about, on the open summary endpoint, before committing.
- Gate your own automation — skip or down-weight a row your pipeline knows is incompletely covered, instead of acting on a partial number.
- Audit after the fact — the manifest’s
last_update_at and the per-response freshness metadata together reconstruct exactly how complete the data was at decision time.
For the customer-facing list of which chains and protocols are covered, see the Coverage matrix. For where the data originates, see Data provenance.