Werracle Radar API — Documentation
Base URL:
https://api.werracle.com/v1/radar
Dashboard: radar.werracle.com
Status: /status
Legal: Terms · Privacy · SLA
The Werracle Radar API provides:
- liquidation and oracle-extractable-value (OEV) analytics for Morpho Blue and Aave v3 on Base, derived from public on-chain data;
- stress tests of MetaMorpho vaults computed from live borrow positions.
The research behind the OEV figures is published openly, with all values re-derived on-chain:
1. Authentication
Paid endpoints require an API key. Send it in a header:
X-API-Key: wrk_pro_live_...
# or
Authorization: Bearer wrk_pro_live_...
Keys are stored only as SHA-256 hashes. A lost key cannot be recovered; contact us to have a new one issued.
| Plan | Price | Rate limit | Access |
|---|---|---|---|
| Free | — | per IP, fair use | overview, chains, dataset,
oev-analytics (summary), hot-positions
(25-market sample), curator/vaults |
| Pro | 149 USD / 30 days | 600 req/min | Free endpoints plus all tracked markets with borrower samples,
solvers, per-transaction SVR records |
| Institutional | 499 USD / 30 days | 3,000 req/min | Pro plus curator/{vault} stress tests |
Design-partner access for MetaMorpho curators is available on request: [email protected].
2. Endpoints
| Method | Path | Plan | Description |
|---|---|---|---|
| GET | /overview |
free | Research baseline (dataset v1.2) and live shadow state of the Base Morpho markets, with data-freshness flags |
| GET | /chains |
free | OEV mechanism and research figures per chain |
| GET | /dataset |
free | Metadata and summary of dataset v1.2 |
| GET | /oev-analytics |
free / Pro | SVR bid share and margins; Pro adds per-transaction records |
| GET | /hot-positions?limit=25 |
free / Pro | Markets with positions below HF 1.10; Pro: all markets and borrower address samples (limit ≤ 1000) |
| GET | /solvers?limit=50 |
Pro | Winning solver contracts: incentive, bids, oracle-priced margin |
| GET | /curator/vaults |
free | Largest MetaMorpho vaults on Base and supported aliases |
| GET | /curator/{vault} |
Institutional | Vault stress test from live positions (§4) |
| GET | /auth/plans |
free | Plans and payment details |
| POST | /auth/claim-key |
free | Activate a key after an on-chain payment (§3) |
| GET | /auth/verify-key |
key | Plan, rate limit and expiry of your key |
Examples
Free overview:
curl -s https://api.werracle.com/v1/radar/overview | jq '.realtime_surveillance.base_l2'Pro (solvers):
curl -s -H "X-API-Key: $WERRACLE_KEY" "https://api.werracle.com/v1/radar/solvers?limit=10"Institutional (vault stress test, by address or alias):
curl -s -H "X-API-Key: $WERRACLE_KEY" https://api.werracle.com/v1/radar/curator/0xbeeF010f9cb27031ad51e3333f9aF9C6B1228183
curl -s -H "X-API-Key: $WERRACLE_KEY" https://api.werracle.com/v1/radar/curator/steakhouseErrors
| Code | Meaning |
|---|---|
| 400 | Invalid request. claim-key returns the reason and,
where relevant, the message to sign |
| 401 | Missing or invalid key |
| 403 | Your plan does not include the endpoint |
| 404 | Unknown vault |
| 429 | Rate limit exceeded |
| 503 | An upstream data source is temporarily unavailable |
3. Subscribing with USDC on Base
Self-serve payment is available only when /auth/plans
shows "self_serve_payments_enabled": true. Otherwise, write
to [email protected] for an
invoice.
- Pay. Send the plan amount in native USDC on
Base (
0x8335…2913) to the address shown by/auth/plans, from a wallet you control. - Request the message. Call
claim-key. The response contains the exact message to sign:curl -s -X POST https://api.werracle.com/v1/radar/auth/claim-key \ -H 'content-type: application/json' \ -d '{"tx_hash":"0x…","tier":"pro","email":"[email protected]"}' # → {"error":"signature required","sign_this_message":"Werracle Radar API key claim\ntx: 0x…\ntier: pro\nemail: [email protected]", …} - Sign. Sign the message with the same wallet
that sent the USDC (EIP-191
personal_sign). Smart-contract wallets are supported through EIP-1271. Then send the request again with the signature:// ethers v6 const sig = await signer.signMessage(msg); // msg = sign_this_message exactly# Foundry cast wallet sign --private-key $PK "$MSG"curl -s -X POST …/auth/claim-key -H 'content-type: application/json' \ -d '{"tx_hash":"0x…","tier":"pro","email":"[email protected]","signature":"0x…"}' - Store the key. The response contains your key. It is shown once and is valid for 30 days.
Rules:
- A payment can be claimed once.
- A payment must be claimed within 7 days.
- Only transfers from a single paying address count.
4. Vault stress test model
/curator/{vault} evaluates every borrow position in the
markets the vault supplies to. Data comes from the Morpho public API and
is cached for 5 minutes. For each scenario (current price, −5, −10, −15,
−20 and −30% collateral price, with the loan asset held fixed):
| Quantity | Definition |
|---|---|
| Liquidatable | debt > collateral × (1 − shock) × LLTV |
| Liquidation incentive factor | LIF = min(1.15, 1 / (0.3·LLTV + 0.7)), as in Morpho
Blue |
| Repayable debt | R = min(debt, collateral' / LIF) |
| Incentive (OEV) | R × (LIF − 1) |
| Market bad debt | debt − R |
| Vault exposure | Market bad debt × the vault's share of market supply |
| Expected SVR proceeds | Incentive × 0.9438. This is the incentive-weighted bid share measured on Base. Proceeds accrue to SVR contracts, not to the vault |
Not modelled:
- price paths and liquidation cascades;
- DEX liquidity for liquidators;
- pre-liquidation contracts;
- correlated loan assets (for example wstETH/WETH);
- oracle-specific deviations.
For the largest markets, the 10,000 largest positions are evaluated.
The response reports the share of market debt they cover
(debt_coverage_of_evaluated_positions).
Back-test: 12–18 October 2026 sell-off
We re-ran the model against what actually happened on-chain between 12 and 19 October 2026 (Base, Morpho Blue). The test covers the 10 markets with SVR liquidations in our research sample: cbXRP, WETH, SOL, cbLTC, cbADA, JitoSOL, cbDOGE, cbZEC and cbHYPE against USDC, plus cbBTC/USDC.
Method:
- Positions. Every borrow position is read on-chain
at the start of each window, using
Morpho.positionat a historical block. - Shock. The model is applied with the oracle's realised maximum drawdown inside the window. The price path is sampled every 15 minutes and at every block that contains a liquidation.
- Comparison. The flagged positions are compared with
all Morpho
Liquidateevents in the window.
This tests whether the model finds the right positions and debt for a given price move. It does not test price forecasting.
| Run | Positions flagged | Liquidated positions (existing at start) | Found | Recall (debt) | Precision (debt) |
|---|---|---|---|---|---|
| Daily refresh (7 one-day windows) | 640 | 615 | 606 (98.5%) | 99.8% | 70.7% |
| Single snapshot, 7-day window | 768 | 608 | 581 (95.6%) | 98.3% | 46.1% |
What the numbers mean:
- Recall is the share of the debt that was actually liquidated which the model had flagged in advance.
- Precision is the share of flagged debt that was then liquidated.
- Why precision is lower. The rest of the flagged debt was saved because borrowers added collateral or repaid in time. That is the window an early-warning product is meant to use.
- Why a daily refresh matters. With a single 7-day snapshot, 16 of the missed positions had increased their leverage after the snapshot. Refreshing daily removes that gap.
Totals for the week:
| Quantity | Value |
|---|---|
| Liquidated debt in these markets | $1.67M |
| Bad debt | none |
| Model-predicted bad debt | $0 |
| Positions opened after the snapshot and liquidated in the same window | 2, $677 |
Data and code: backtest_oct12_18.py · result JSON.
5. Data freshness
/overview reports:
| Field | Meaning |
|---|---|
position_snapshot_age_sec |
Age of the live position snapshot |
shadow_status_age_sec |
Age of the shadow process's last status update |
markets_debt_snapshot_utc |
Time of the per-market debt snapshot |
data_stale |
true when the live shadow has not updated for more than
5 minutes |
Treat null values as "not available". The API never
substitutes placeholder numbers.
6. Changelog
- 2026-10-25 — v2.1
- Payment claims bound to the paying wallet by signature.
- Real vault stress test from live positions, plus the
curator/vaultsendpoint. - Freshness fields added; placeholder values removed.
- Research figures updated to dataset v1.2 (Zenodo v2).
7. Contact
| Purpose | Address |
|---|---|
| General and sales | [email protected] |
| Security | [email protected] |
| Privacy | [email protected] |
Werracle Radar is operated by ITouch Systems, Çukurova Teknokent, Adana, Türkiye. Outputs are estimates provided as information only, not financial advice.