API

Everything the network found, free.

No key needed for any finding. Keys exist for throughput, feed freshness, archive depth and alerting.

Base URL https://warrant.watch/api

Free and unauthenticated

GET /v1/metaNetwork, contracts, ranks, tiers, fee split.
GET /v1/nodesEvery registered operator with reputation and rank.
GET /v1/nodes/:tokenIdOne operator and their recent attestations.
GET /v1/consensusWhat the network said about each assertion. `?dissentOnly=true` for contested rows only.
GET /v1/incidentsDeclared incidents and near misses, with the threshold.
GET /v1/assertionsAssertions read from the rollup contract on Ethereum.
GET /v1/assertions/:hashOne assertion, its consensus, and every node’s verdict.
GET /v1/rootsDaily Merkle roots, with their Ethereum anchors.
GET /v1/escape-hatchForce-inclusion monitoring.
GET /v1/observatoryStanding probes of what the chain actually does.
GET /v1/challengeThe signed challenge the rollup refuses.
GET /v1/statusChain heads, quorum health, watchtower state.

Requires a key

POST /v1/rpcAllowlisted JSON-RPC. Rate limited by tier; a batch is charged per call.
GET /v1/feedWebSocket relay of the sequencer feed. Delay and socket count by tier.
GET /v1/keys/whoamiWhat a key currently resolves to.

Getting a key

Three calls. The tier comes from your stake at the moment you ask, and is re-read on every request afterwards — so unstaking downgrades the key rather than leaving a permanent tier bought with a temporary balance. There is no waiting period.

# 1 — ask for something to sign
curl -X POST https://warrant.watch/api/v1/keys/challenge \
  -H 'content-type: application/json' \
  -d '{"address":"0xYourWallet"}'
# -> { "nonce": "...", "message": "..." }
# 2 — sign `message` with that wallet (personal_sign), then redeem
curl -X POST https://warrant.watch/api/v1/keys \
  -H 'content-type: application/json' \
  -d '{"nonce":"...","signature":"0x..."}'
# -> { "key": "warr_turbo_...", "tier": "turbo", "owner": "0x..." }
#    A wallet below the first threshold gets 402 with what it holds and what is needed.
# 3 — use it
curl https://warrant.watch/api/v1/keys/whoami -H 'authorization: Bearer warr_turbo_...'
Two guarantees about the free surface
A finding is never moved behind a key. And an endpoint that cannot answer returns an error rather than a plausible default — no endpoint here will ever tell you there were zero dissents because it could not reach the database.