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/meta | Network, contracts, ranks, tiers, fee split. |
| GET /v1/nodes | Every registered operator with reputation and rank. |
| GET /v1/nodes/:tokenId | One operator and their recent attestations. |
| GET /v1/consensus | What the network said about each assertion. `?dissentOnly=true` for contested rows only. |
| GET /v1/incidents | Declared incidents and near misses, with the threshold. |
| GET /v1/assertions | Assertions read from the rollup contract on Ethereum. |
| GET /v1/assertions/:hash | One assertion, its consensus, and every node’s verdict. |
| GET /v1/roots | Daily Merkle roots, with their Ethereum anchors. |
| GET /v1/escape-hatch | Force-inclusion monitoring. |
| GET /v1/observatory | Standing probes of what the chain actually does. |
| GET /v1/challenge | The signed challenge the rollup refuses. |
| GET /v1/status | Chain heads, quorum health, watchtower state. |
Requires a key
| POST /v1/rpc | Allowlisted JSON-RPC. Rate limited by tier; a batch is charged per call. |
| GET /v1/feed | WebSocket relay of the sequencer feed. Delay and socket count by tier. |
| GET /v1/keys/whoami | What 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.