An API, not a portal with a download button.
Scope is a property of the key: a request may narrow it and can never widen it. Every response carries a bounding block saying whether the answer is complete, what it was scoped to, what was left out and what it cost.
Reading the evidence
GET /v1/scope
What this key may read. The first call any integration should make.
GET /v1/search
Full-text search across acquired documents, within scope.
GET /v1/claims
Every fact held about a subject, with quotes, disagreements and an as-of date.
GET /v1/changes
Current and superseded claims in an append-only, filterable evidence feed.
GET /v1/sources
Per-source acquisition and knowledge-readiness, including visible mapping gaps.
GET /v1/coverage
How much of a jurisdiction’s evidence ecosystem we actually see.
GET /v1/accuracy
Published per-geography scorecards — the same artifact this website renders.
GET /v1/launch
Public per-geography legal, freshness, daily-canary and independent-scorecard launch gates.
Relationships
GET /v1/related
What an entity is connected to, bounded by hops and metered on edges expanded.
GET /v1/path
How two entities are connected, with the documents that establish each link.
GET /v1/network
A bounded neighbourhood around one entity.
GET /v1/exposures
What two or more companies are both exposed to.
Analysis and bulk
GET /v1/sql
Bounded SQL over the claim and document lakes. Reads only; scope comes from the key, never from the SQL.
GET /v1/export
Presigned URLs to the same immutable Parquet segments the query engine reads, pinned to the same epoch.
Working with it
POST /v1/searches
Save a search, with its scope narrowed to the key’s grant at the moment it is saved.
POST /v1/alerts
Fire on matches committed since the alert last ran — never twice on the same match.
POST /v1/corrections
Dispute a fact. Name the document, quote the words; it enters the same review queue as everything else.
POST /v1/mcp
The same tools an agent reaches over stdio, over HTTP. Read-only.
Every answer says how it was bounded
"bounding": {
"complete": false,
"scope": ["GB"],
"returned": 2,
"available": 3,
"note": "2 of 3 matches; 1 shard has no current index,
so there may be documents not yet searchable",
"charged": [
{ "unit": "requests", "quantity": 1 },
{ "unit": "bytes_scanned", "quantity": 57303 }
]
}Metered in the unit that makes each surface expensive
A graph traversal through a hub and one through a leaf are not the same work, so relationships are charged on edges expanded. SQL and export are charged on bytes scanned. Charging everything as “one request” prices the cheap query out and the expensive one free.
Agents, over the same surface
The CapexSignal MCP endpoint exposes the same read-only tools an agent reaches over stdio. There is deliberately no tool that writes: a proposal is reviewable because it names the agent run behind it, and a call made on a customer key names nothing.
Unzoi's MCP endpoint is a separate first-party discovery overlay. It is not connected to customer claims until its binding terms and retention rights are reviewed, and its news metadata will not substitute for the original public document behind a claim.
Bulk export is the real segments
Not a second copy in a different format — the same immutable Parquet objects the query engine reads, pinned to the same manifest epoch. So an export is reconcilable against a query: both name the epoch, and “why does my file disagree with your API” has an answer.