# NetNet Intel
> Independent, on-chain intelligence for NetNet ($NET) on Robinhood Chain (chain ID 4663): the treasury, NAV (core and incl. the RWA sleeve), supply, holders and whale moves, bonds and credit, read straight from the chain, with every on-chain figure's exact contract call published and a live verifier; plus a model and live race for NetNet's weekly Treasury prediction market, and Shift Run, a points-only arcade. Fan-made: not affiliated with NetNet Capital. Read-only analysis, not financial advice.
The site is a single-page app: its pages need JavaScript. For data, use the JSON read API or the MCP server below. All figures come from public chain reads unless a field says otherwise; each response carries the chain `block` and `asOf` time it was read at. Official figures: NetNet Capital's own app at https://app.netnet.capital.
## Start here (agents)
- Connect the MCP server `https://netnetintel.com/mcp` (no auth; its `instructions` carry this guide) or `GET https://netnetintel.com/api/v1/`. No key.
- Most questions take one call with the tool's filters; stop as soon as the question is answered (rarely more than three calls). Common chains: daily report → `get_desk`; whale check → `get_holders` { kind: "sell", days: 7, minUsd } → `get_whale`; liquidation watch → `get_loop` { status: "at-risk,wind-down" } → `get_loop_liquidations`; why the number moved → `get_growth` → `get_history`; the weekly print → `get_predict` → `get_predict_intel`; a figure that drives a decision → its call → `verify_figures`. Full table: **Common chains** below.
- Quote each figure with its `block`/`asOf`. `stale`, `lastGood`, `complete: false` mean not fully live: say so. Errors (`bad_request`, `not_found`, `rate_limited`, `unavailable`) and what to do: **Errors and partial answers** below. Never fill a gap from memory.
- Every list has a cap; narrow with filters (limits per tool: **Answer sizes** below). Client code: [Python](https://netnetintel.com/examples/netnet_client.py), [TypeScript](https://netnetintel.com/examples/netnet-client.ts). Agent skill: https://netnetintel.com/skills/netnet-intel/SKILL.md
## Verify, don't trust
Every figure that is a direct chain read can be checked independently:
- [Sources](https://netnetintel.com/api/v1/sources): the contract registry and, for every verifiable figure, the exact `eth_call` (address, function, 4-byte selector, decimals), its formula and a ready `curl` against the chain's public RPC (https://rpc.mainnet.chain.robinhood.com, no key).
- [Verify](https://netnetintel.com/api/v1/verify?figures=nav_core,rfv,supply): NetNet Intel re-reads the named figures (or all of them) from the public RPC, independent of the provider the site reads with, at the block they were served from, and reports `exact`, `match` (within a stated tolerance) or `mismatch`, with the raw results. The public node keeps about the last thousand blocks of state; older blocks are re-checked at the chain head.
- [Verify in your browser](https://netnetintel.com/verify): the same check run by a person's own browser straight against the public RPC; `/api/v1/verify?local=1` returns only the served values and calls, for verifiers that run elsewhere. The public node rate-limits shared server addresses: when it refuses NetNet Intel's edge server, the same calls go to the same public node from NetNet Intel's backend; if that is refused too, they are re-read at the same block from the site's archive provider and the report says `independent: false`. `checkedBy` always says which path answered. For a fully independent check, use /verify or run the calls yourself.
- [Second opinion](https://netnetintel.com/api/v1/peer): the core figures beside Netstack's (https://netnet.exe.xyz, an independent NetNet reader with its own code and chain reads), each row with both blocks and exact / match / differs; MCP `get_peer_check`.
- Figure ids: `nav_core`, `nav_core_check`, `rfv`, `rfv_liquid_usdg`, `rfv_morpho_counted`, `rfv_pol`, `supply`, `price_twap`, `premium_core`, `staked`, `staked_share`, `dividend_index`, `sleeve_wallet`.
- To check by hand: run each call at the response's `block` (or `latest`), take the first 32-byte word as an unsigned integer ÷ 10^decimals, apply the formula.
- Calculated figures (NAV incl. the RWA sleeve, the model's odds) are labelled as such, with their inputs listed part by part. Whale moves carry their transaction hash: check them in the receipt's Transfer logs on https://robin.etherscan.io.
- [Methodology in full](https://netnetintel.com/llms-full.txt)
## Build it yourself (open recipes)
Every figure NetNet Intel shows can be rebuilt from Robinhood Chain alone, without this API or any NetNet Intel server: 73 recipes across the treasury, growth, buybacks, liquidity, bonds, NET Advance, Loop, holders, Predict, the arcade games and Turbo. MIT licensed.
- [Recipes catalog](https://netnetintel.com/api/v1/recipes): each recipe's contract calls (address, calldata, decimals), event filters (address, topic0, fromBlock), formula, steps, caveats and what it `needs` (`eth_call`, `eth_getLogs`, `archive`, or an off-chain input such as address labels). `/api/v1/recipes/{id}` adds the figure NetNet Intel serves for it; `?run=1` adds a worked example pinned to a block with every raw request and result (contract-read recipes).
- [The code](https://netnetintel.com/kit/netnet-recipes.mjs): one dependency-free ES module (browser, Node 18+, Workers): `import { RECIPES, makeCtx, run } from "https://netnetintel.com/kit/netnet-recipes.mjs"; await run(RECIPES.find((r) => r.id === "nav_core"), makeCtx())`. Point `makeCtx({ rpc })` at any node; `ctx.trail` lists every request as proof. Sources per area: https://netnetintel.com/kit/src/
- [Recipes page](https://netnetintel.com/recipes): run any recipe in your own browser and compare with the served figure.
- [Desk in one call](https://netnetintel.com/api/v1/desk): every tile of the community desk with each figure's value, block, asOf, source endpoint and field, and recipe; MCP `get_desk`. Start here for broad questions.
- [Community desk](https://netnetintel.com/kit/): the whole ecosystem on one screen, read by the visitor's browser straight from the chain; [one-file version](https://netnetintel.com/kit/netnet-desk.html) to host anywhere. The site's version with side-by-side checks: https://netnetintel.com/desk
- Limits of the public RPC: contract state is kept for about 10 minutes (a pinned-block read re-checks there for a few minutes, on an archive node forever); event history (eth_getLogs, up to 10M blocks a request) always re-checks; it rate-limits busy addresses, so heavy recipes (full holder or loan books) take minutes. Recipes marked `archive` need an archive node.
## Read API (JSON, GET, no key, any origin)
120 requests a minute per address (20 for `/api/v1/verify`); a 429 carries `Retry-After`. Formats, limits and examples: "Usage, limits and formats" below.
- [API index](https://netnetintel.com/api/v1) · [OpenAPI spec](https://netnetintel.com/openapi.json)
- [Live $NET figures](https://netnetintel.com/api/v1/net): price (pair-oracle TWAP), NAV per token, premium, reserves, supply, staked, DEX market; `liquidity`: TVL, 24h volume and ±2% depth summed over every NET pool against USDG, WETH or ETH. About 15 s fresh (liquidity about 2 min).
- [NAV](https://netnetintel.com/api/v1/nav): NAV per NET two ways, core (Treasury.backingPerToken(), on-chain) and incl. the RWA sleeve ((Treasury.rfv() + the sleeve) ÷ NET in issue, calculated), the RFV parts, the sleeve's breakdown, both premiums and the recipes.
- [Treasury](https://netnetintel.com/api/v1/treasury): RFV and its parts, holdings, LP positions and pools, the sleeve's directly held assets.
- [Supply & staking](https://netnetintel.com/api/v1/supply): NET in issue, staked, circulating and its exclusions, burned, NET held per protocol contract, index, epoch, rate.
- [Holders](https://netnetintel.com/api/v1/holders?moves=50): the top 50 holders' own wallets (contracts that hold for others, such as pools and Pendle's SY, and the protocol's Safes are listed apart, in `held`; balance, stance, 7- and 30-day flows), their latest decoded moves with tx hashes, `flowTotals` (the whale flow over 24 hours, 7 and 30 days, as the Holders page shows it: holders' own wallets, linked-wallet reshuffles and the protocol's Safes left out), and wallet clusters (wallets linked by two-way transfers: likely one owner, with the evidence). Each whale carries its `history` (`avgEntry`, `pnl` at the board's price). Filters: `address` (one wallet's moves), `kind` (comma list: buy, sell, bond, stake, unstake, lp-add, lp-remove, deposit, withdraw, transfer-in, transfer-out), `days`, `minUsd`, and `stance` for whales; `movesByKind` totals the matched moves. `priceSource` / `priceAsOf` say which price the board used (it rebuilds about hourly). Example: `?moves=50&kind=sell&days=7&minUsd=10000`.
- [One whale](https://netnetintel.com/api/v1/whale/0x72f273312b253d301b593ca1bbcb740aa500a242): balances, history (entry, P&L, rebase earned), loan, moves and its linked wallets with live balances.
- [Bonds](https://netnetintel.com/api/v1/bonds?epochs=21&trend=24h): the bond desk by 8-hour epoch (NET sold against the cap, `fill`, `soldAfter1h` / `2h` / `4h`, sell-out time, buyers, `paidVsMarket` and `afterVest`), the `live` epoch, and `demandByTrend`: sell-outs grouped by NET's price trend going in (`trend=8h|24h|3d`, last 30 days).
- [Credit](https://netnetintel.com/api/v1/credit): the USDG vault, the Loopback wsNET market and how it marks collateral, the stock markets, liquidations.
- [Buybacks](https://netnetintel.com/api/v1/buybacks?days=7): the team's NET buybacks from the RWA sleeve's Safes: 24-hour, 7-day, 30-day and all-time totals and their `shareOfSupply`, a `window` of `days` (1-90) against the window before it, buys per UTC day (average, low and high price), `bySafe`, venues, the latest buys with tx hashes, the `otcDesk`, the loan that funds them, and the Treasury's inverse bond (NAV × 0.985, burned).
- [Predict market](https://netnetintel.com/api/v1/predict): the open weekly series, the live number it grades, NetNet Intel's model odds, every past series.
- [Loop loans](https://netnetintel.com/api/v1/loop?status=at-risk,wind-down&sort=risk): every Loopback loan (wsNET/USDG on Morpho Blue) with its status (AT RISK, WIND DOWN, WATCH, SAFE: the closer of health < 1.05 / 1.10 / 1.20 and a 5 / 15 / 30% TWAP fall), the TWAP fall to liquidation, the USDG to repay (or wsNET to add) to get back to health 1.20 or survive a 15% or 30% fall, and for a liquidatable loan the full-liquidation repay, seize and profit; filter by `status`, `account`, `minDebt`; sort by `risk` (lowest health first), `debt`, `health`, `collateral`. No transaction data.
- [Predict intel](https://netnetintel.com/api/v1/predict/intel?above=29000000): ask the model: its odds that the print lands above any numbers (`above`, comma list, up to 20), its 68% and 90% ranges, the gap to the line per day, the drivers (incl. the NET TWAP the line implies), each side's value against its break-even, and its graded record.
- [Number history](https://netnetintel.com/api/v1/history?days=7): 1 to 90 days, every 30 minutes up to 7 days, every 4 hours up to 30 and daily beyond (`detail=full` or `interval=30m|1h|4h|1d` to choose): Core RFV, the sleeve mark, `memoHoldings` and `trueRfv`, backing, TWAP, supply, staked (`NET.balanceOf(staking)`), and `trueRfvByClass` at each day's close.
- [What grows NET](https://netnetintel.com/api/v1/grows?days=30): the treasury's change over `days` (1-90, or `all`): money in by source (bonds, the trading fee, premium sales, desks…), money out, value changes, the sleeve by asset class, and the per-NET effect (reserves vs new NET).
- [Liquidator release](https://netnetintel.com/api/v1/liquidator): the self-run Loop liquidator's latest version, whether it is urgent, what's new, and the command that updates it.
- [LP](https://netnetintel.com/api/v1/lp): the NET/USDG v2 pool: reserves, TVL, the week's volume, swaps and fees by day, and who holds the LP (protocol, wallets, contracts, locked) with each holder's fees; `allPools`: every NET pool against USDG, WETH or ETH with TVL, 24h volume, turnover flags and ±2% depth.
- [Sleeve memo holdings](https://netnetintel.com/api/v1/sleeve): the RWA sleeve's holdings beyond its Safe, line by line (NET held, the Loopback position, NET Advance receivables, THE BOOK's pot, the asset desk, v4 LP).
- [Sleeve loan](https://netnetintel.com/api/v1/sleeve/loan): the sleeve's Loopback loan: wsNET posted, USDG owed, LTV, the NET mark at which it could be liquidated, and what the borrowed USDG bought.
- [Pendle](https://netnetintel.com/api/v1/pendle): Pendle's sNET market: the implied APY against what sNET's rebase pays now, by day.
- [NET Advance](https://netnetintel.com/api/v1/advance): lock NET for 30 days and take 40% of its value in USDG now (the lock's rebase pays it back): `howItWorks` in plain words, a worked `example` on today's rate, `capacity` (USDG open for new locks now, every refill and how fast holders used it up), the terms, the book (outstanding, coverage, shortfall, break-even mark), maturities, the positions most at risk.
- [House Vault](https://netnetintel.com/api/v1/vault): the vault behind Predict: share price, capital, queued exits, settles, depositors.
- [THE BOOK](https://netnetintel.com/api/v1/book): the sportsbook: house pot, open markets, results, weekly totals.
- [Presser card](https://netnetintel.com/api/v1/presser/1): one Button Presser card, No. 1 to 4,999, with its OpenSea ask (`market`) and `opensea` link.
- [Presser search](https://netnetintel.com/api/v1/pressers?plate=brass&character=none&sort=price): Brass and Steel cards by `plate`, `faction` (none, bluechips, frontier, chosen), `character` (none, created), `race`, `listed`, `minPrice` / `maxPrice`, `combine` (and, or), `sort` (price, -price, id, -id), `limit`; cheapest first with OpenSea links, plus each plate's census.
- [Presser census & market](https://netnetintel.com/api/v1/presser): sides, races and plates, the Brass and Steel floors (NetNet Intel tracks those two plates; `market.collectionFloor` is OpenSea's floor for the whole collection, which holds other items too, so it is not a card's price; full collection: https://opensea.io/collection/button-presser), how many are listed, the cheapest asks.
- [Gear search](https://netnetintel.com/api/v1/gear?tier=artifact&sort=price): NetNet Gear by `item`, `tier`, `slot`, `table`, `wearable`, `plate`, `earnedBy`, `listed`, `minPrice` / `maxPrice`, `sort` (price, -price, id, scarcity), `limit`; plus per item its supply, minted, listed and floor ask.
- [Games](https://netnetintel.com/api/v1/games): NetNet's arcade (play.netnet.capital) from NetNet Intel's own index of the games' events: per game (DIAL-UP.EXE, COINflip, SpaceX Invaders, MSFT Flight Simulator; WinNET, the prize draw, on its own row) and window (24h, 7d, 30d, all) plays, players, `wagered`, `paidOut`, `houseResult` and `houseEdge`, `fees` (and the share swept to the manager and to the RWA sleeve), bankroll funding, `netBought` through DIAL-UP's zaps, and `daily`; `?game=dialup` for one. Token amounts exact, USD at today's marks. The games send nothing to the Core Treasury.
- [Where the money goes](https://netnetintel.com/api/v1/value?days=7): the Core Treasury's USDG in by source (`coreTreasury.moneyIn.bySource`: bonds, fees, premium, pteam, desks, …) and out, stated zeros for what the arcade, Turbo and THE BOOK send it, and the RWA sleeve by source (`sleeve.bySource`: games, turbo, book, stocks, netBuybacks). `days`: 1, 7 or 30. MCP: `get_value_capture`.
- [Loop liquidations](https://netnetintel.com/api/v1/loop/liquidations): every Loop (Loopback) liquidation from NetNet Intel's own index, the newest merged from the live feed: `windows` for 30m, 12h, 24h, 7d and 30d (`n`, `repaid`, `seized`, `valueOracle`, `valueMarket`, `profitOracle`, `profitMarket`, `badDebt`), a time `series` (`?window=24h`), who liquidates (`leaders`, `&leaders=7d`) and the latest 20. MCP: `get_loop_liquidations`.
- [Turbo](https://netnetintel.com/api/v1/turbo): Turbo, NetNet Capital's knock-out card desk on tokenized stocks (NVDA, AAPL, SPCX), from NetNet Intel's own index of the desk's events: per window (24h, 7d, 30d, all) cards bought, buyers, `paidUsdg`, opening and performance fees, `payoutUsd`, `deskResultUsd`, `sweptToSleeve`; the series board (`series[]`: strike, leverage, expiry, sold, outstanding, state) and the house's stock pots. `?series=17`, `&days=7`. MCP: `get_turbo`.
- [Official docs](https://netnetintel.com/api/v1/docs?q=knock-out%20card): NetNet Capital's own documentation (docs.netnet.capital), searched: `results[]` with `page`, `heading`, `excerpt` and the `url` to cite. Without `q`, the list of pages; `/api/v1/docs/{page}` for one page (e.g. `/api/v1/docs/turbo`). MCP: `search_docs`, `get_doc`. For what a term means and how a desk works; live figures come from the data endpoints.
- [Shift Run](https://netnetintel.com/api/v1/shiftrun?scope=all): the leaderboard (points only); `scope=all|today`.
Numbers are plain JSON numbers in their natural unit (USD, NET or USDG; not wei). Times are ISO 8601 UTC. OpenSea asks are read by NetNet Intel every 2 minutes for Button Presser cards (every 10 for NetNet Gear) and are not sale prices; give their age and check the link before acting.
### Ask it anything
| Question | Call |
|---|---|
| Cheapest Brass presser with no character, with OpenSea links? | `/api/v1/pressers?plate=brass&character=none&sort=price` (`search_pressers`) |
| Brass pressers with no side or no character, cheapest first? | `/api/v1/pressers?plate=brass&faction=none&character=none&combine=or` |
| Cheapest ARTIFACT gear, and how scarce is each item? | `/api/v1/gear?tier=artifact&sort=price` (`search_gear`; `items[]` has supply, minted, floor) |
| Which Loop loans need to wind down, and how much should they repay? | `/api/v1/loop?status=at-risk,wind-down` (`get_loop`) |
| Is there USDG to take on NET Advance, and how fast do refills go? | `/api/v1/advance` (`get_advance`): `capacity` |
| What are the odds the print is above 29M? | `/api/v1/predict/intel?above=29000000` (`get_predict_intel`) |
| How much did the team buy back this week vs last? | `/api/v1/buybacks?days=7` (`get_buybacks`): `window` and `window.previous` |
| What grew the treasury this month? | `/api/v1/grows?days=30` (`get_growth`): `answer`, `moneyIn.bySource` |
| Do bonds sell slower when NET falls? | `/api/v1/bonds?trend=24h` (`get_bonds`): `demandByTrend` |
| Which whales are selling this week? | `/api/v1/holders?kind=sell&days=7` (`get_holders`): `moves`, `movesByKind` |
| Who holds the LP? | `/api/v1/lp` (`get_lp`): `byClass`, `holders` |
| Total liquidity and volume? | `/api/v1/net` (`get_net`): `liquidity`; per pool in `/api/v1/lp` `allPools` |
| Are the arcade games making money? How many players? | `/api/v1/games` (`get_games`): `totals.d7`, `games[].windows.d7.houseResult` |
| Where does the money go? What feeds the sleeve? Do the games pay the treasury? | `/api/v1/value?days=7` (`get_value_capture`): `coreTreasury.moneyIn.bySource`, `coreTreasury.fromGames`, `sleeve.bySource` |
| How many Loop liquidations in the last 24 hours, and who took them? | `/api/v1/loop/liquidations` (`get_loop_liquidations`): `windows.h24.n`, `windows.h24.repaid`, `leaders.rows` |
| How is Turbo doing? What does the sleeve get from it? | `/api/v1/turbo` (`get_turbo`): `windows.d7.paidUsdg`, `windows.d7.deskResultUsd`, `windows.all.sweptToSleeve` |
| What is X? How does a desk work? What are its rules or fees? | `/api/v1/docs?q=...` (`search_docs`), then `/api/v1/docs/{page}` (`get_doc`): quote and cite `url` |
| What does the sleeve hold beyond its Safe? | `/api/v1/sleeve` (`get_sleeve_memo`) |
## Usage, limits and formats
**Connect.** MCP: `https://netnetintel.com/mcp` (Streamable HTTP; plain JSON replies, no sessions, no auth; protocol versions 2024-11-05 to 2025-11-25). REST: `GET https://netnetintel.com/api/v1/` from any HTTP client and any origin. No key, no account.
**Limits, per minute**
| Surface | Limit | Counted per |
| --- | --- | --- |
| MCP tool calls | 240 | client (address + User-Agent) |
| MCP messages, `initialize`, `ping` and `tools/list` included | 1,500 | address |
| Read API | 120 | address |
| `/api/v1/verify` | 20 | address |
| A2A | 60 | address |
Over a limit: HTTP 429 with `Retry-After` (seconds). The read API answers `{ "error": "rate_limited", "retryAfter": N }`; MCP answers a JSON-RPC error with the request's id, `{ "code": -32029, "message": "Rate limited: retry in N s", "data": { "retryAfter": N } }` (one per message in a batch). Wait N seconds, then retry once.
**Calling it well**
- One call per question: the narrowest tool or endpoint, with its filters (`days`, `kind`, `minUsd`, `status`, `sort`, `limit`). `get_desk` (`/api/v1/desk`) for a broad overview in one call.
- How often the data moves: prices about every 15 s; OpenSea asks every 2 minutes; the indexes (games, Turbo, Loop liquidations) every 5 minutes; holders and bonds every 1-2 minutes. Polling faster returns the same answer.
- Dashboards and scheduled jobs: read `/api/v1/desk` once per run, or the few areas the dashboard shows, every few minutes at most; a daily sync needs one call per area a day.
- Send a `User-Agent` that names your app (no key needed; it shows us what is used).
- Bodies are compact JSON; `?pretty=1` indents them. `?summary=1` gives the compact shape of `/api/v1/holders`, `/advance` and `/buybacks`; over MCP those are compact unless `detail: true`.
**Common chains** (stop as soon as the question is answered: most take one call, few need more than three)
| Question | Calls, in order |
| --- | --- |
| Daily report, dashboard | `get_desk` (`/api/v1/desk`) once; `get_alerts` only for "anything I should know?" |
| Whale check | `get_holders` { kind: "sell", days: 7, minUsd: 10000 } → `get_whale` { address } for the 1-3 that matter; outside the top 50, `get_wallet` |
| Liquidation watch | `get_loop` { status: "at-risk,wind-down" } → `get_loop_liquidations` { window: "24h" } |
| Why did the number move | `get_growth` { days: 7 } → `get_history` { days: 7 } if the path matters; `get_value_capture` for where the money went |
| The weekly print | `get_predict` → `get_predict_intel` { above: [the line] } |
| A figure that drives a decision | its area call → `verify_figures` (core figures) or `get_recipes` { id } to rebuild it |
| A term or rule | `search_docs` { query } → `get_doc` { page } only if the snippet isn't enough |
Don't repeat a call within its refresh time, and don't walk every wallet or loan: use the filters.
**Answer sizes.** Most answers are 1-30 KB. Every list has a cap, so there is no paging: narrow with the filters. On the API, `/api/v1/holders`, `/advance` and `/buybacks` are full unless `?summary=1`; `/api/v1/history` follows the same spacing as `get_history` (`&detail=full` for every 30-minute row).
| Tool | Size controls (MCP arguments; most are query parameters of the same name on the API) | Notes |
| --- | --- | --- |
| `get_history` | `days` 1-90 (default 7); `interval` 30m / 1h / 4h / 1d; `detail` (default false) | 30-minute rows up to 7 days, then 4-hourly (to 30) and daily; `detail: true` is every row (90 days about 1.2 MB) |
| `get_holders` | `moves` 0-500 (default 50); `days`; `detail` (default false) | compact: the decision fields and a detail URL; filter moves with `kind`, `days`, `minUsd`, `address` |
| `get_bonds` | `epochs` 1-90 (default 21) | |
| `get_buybacks` | `days` 1-90 (default 7); `detail` (default false) | compact unless `detail: true` |
| `get_desk` | none | one call for every area (about 25 KB): the dashboard read |
| `get_games` | `days` 1-30; `detail` (default false) | totals; `detail: true` adds the day-by-day series |
| `get_value_capture` | `days` 1 / 7 / 30 (default 7) | |
| `search_docs` | `limit` 1-10 (default 5) | the best sections, not whole pages; `get_doc` for one page |
| `get_loop_liquidations` | `window` 30m / 12h / 24h / 7d / 30d (default 24h) | |
| `get_turbo` | `days` 1-30; `detail` (default false) | totals and the board; `detail: true` adds the series |
| `get_recipes` | none | the catalog without `id`; one full recipe with it |
| `search_pressers` | `limit` 1-200 (default 25) | cheapest first; narrow with `plate`, `faction`, `character`, `maxPrice` |
| `search_gear` | `limit` 1-200 (default 25) | cheapest first; narrow with `tier`, `slot`, `item`, `maxPrice` |
| `get_growth` | `days` | `days` 1-90 or "all" (default 30) |
| `get_loop` | `limit` 1-200 (default 25) | riskiest first; filter with `status`, `minDebt`, `account` |
| `get_advance` | `detail` (default false) | compact unless `detail: true` |
| `get_shiftrun` | `scope` all / today (default all) | |
**What comes back**
- JSON with the figures in plain units (USD, NET, USDG; never wei) and UTC times. Every body with an `asOf` carries `freshness` { asOf, block, ageSec, maxAgeSec, stale }: quote the block or time with each figure.
- Uptime and what is failing now: https://netnetintel.com/status (`/status.json`, MCP `get_status`).
**Errors and partial answers**
| You get | Meaning | Do |
| --- | --- | --- |
| 400 `{ "error": "bad_request", "message", "allowed"? }` | the arguments are wrong: a bad id or address, or a filter value that doesn't exist (an unknown `kind`, `stance`, `status`, `sort`, `trend`…; never silently ignored) | fix them from `message` / `allowed`; don't retry as is |
| 404 `{ "error": "not_found" }` | no such card, wallet, page or recipe | say so |
| 429 `{ "error": "rate_limited", "retryAfter": N }`; MCP: JSON-RPC error `{ "code": -32029, "message", "data": { "retryAfter": N } }` with the request's id (one per message in a batch) | over a limit | wait N seconds (`Retry-After`), retry once, never in a loop |
| 503 `{ "error": "unavailable", "message", "retryAfter": 30, "fallback": "" }`; MCP: the same body with `isError: true` | the source is down and nothing is saved | retry once after `retryAfter`; then follow `fallback` (it rebuilds the figure from the chain) or say it is unavailable |
| 200 with `lastGood` { savedAt, reason }, `stale: true`; REST header `x-fallback: last_good` | the source was slow (over 8 s) or down; this is the last good answer | use it, quote its `asOf`, say it may be behind |
| `complete: false`, `unread`, a `note` | part of the answer is missing | say which part |
Never fill a gap from memory. OpenSea asks, the verifier and the status are always live (no last good answers).
**Client code.** Ready-made, dependency-free clients for the read API and MCP that send a User-Agent, wait once on 429/503 and flag answers that aren't live: [Python](https://netnetintel.com/examples/netnet_client.py) (standard library) and [TypeScript](https://netnetintel.com/examples/netnet-client.ts) (fetch: Node 18+, Deno, Bun, browsers, Workers). MIT.
MCP over HTTP:
```sh
curl -s https://netnetintel.com/mcp -H 'content-type: application/json' -H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_net","arguments":{}}}'
```
Python:
```python
from netnet_client import NetNet # https://netnetintel.com/examples/netnet_client.py
nn = NetNet("my-dashboard/1.0")
desk = nn.get("/api/v1/desk") # everything once
loans = nn.tool("get_loop", status="at-risk,wind-down")
print(nn.warnings(loans) or "live") # e.g. ["stale: 640 s old (fresh within 600 s)"]
```
TypeScript:
```ts
import { NetNet } from "./netnet-client.ts"; // https://netnetintel.com/examples/netnet-client.ts
const nn = new NetNet("my-bot/1.0");
const sells = await nn.get("/api/v1/holders", { kind: "sell", days: 7, minUsd: 10000 });
const net = await nn.tool("get_net");
console.log(net.price, net.freshness?.block, NetNet.warnings(net));
```
**MCP clients.** Claude (web and desktop): Customize → Connectors → Add custom connector, paste `https://netnetintel.com/mcp`. Claude Desktop from its config file (`claude_desktop_config.json`): `{ "mcpServers": { "netnet-intel": { "command": "npx", "args": ["-y", "mcp-remote", "https://netnetintel.com/mcp"] } } }`. Claude Code: `claude mcp add --transport http netnet-intel https://netnetintel.com/mcp`. Cursor (`.cursor/mcp.json`): `{ "mcpServers": { "netnet-intel": { "url": "https://netnetintel.com/mcp" } } }`. VS Code (`.vscode/mcp.json`): `{ "servers": { "netnet-intel": { "type": "http", "url": "https://netnetintel.com/mcp" } } }`. ChatGPT: Settings → Apps & Connectors → Developer mode → Create, no authentication, paste the URL.
## For agents
- [MCP server](https://netnetintel.com/mcp): remote MCP (Streamable HTTP, no auth); add it by URL in Claude, Cursor or any MCP client. Tools: `get_net`, `get_nav`, `get_treasury`, `get_supply`, `get_holders` (`moves`, `address`, `kind`, `days`, `minUsd`, `stance`), `get_whale`, `get_bonds` (`epochs`, `trend`), `get_credit`, `get_buybacks` (`days`), `get_predict`, `get_predict_intel` (`above`), `get_loop` (`status`, `account`, `minDebt`, `sort`, `limit`), `get_history`, `get_growth` (`days`), `get_lp`, `get_sleeve_memo`, `get_sleeve_loan`, `get_pendle`, `get_advance`, `get_house_vault`, `get_book`, `get_presser`, `search_pressers`, `get_presser_market`, `search_gear`, `get_shiftrun`, `get_sources`, `verify_figures`, `get_recipes` (`id`, `run`), `get_desk`, `get_peer_check`, `get_alerts` (`minUsd`), `get_wallet` (`address`), `get_games` (`game`, `days`, `detail`), `get_turbo` (`series`, `days`, `detail`), `get_loop_liquidations` (`window`, `leaders`), `get_value_capture` (`days`), `search_docs` (`query`), `get_doc` (`page`), `report_gap` (`question`: when nothing here answers it), `get_status` (uptime: checked about every 5 minutes, every tool in turn about every 35 minutes). Same shapes as the read API, with three differences for agents: `get_holders`, `get_advance` and `get_buybacks` answer compactly unless `detail: true`; every result carries `freshness` { asOf, block, ageSec, maxAgeSec, stale }; when a source is slow (over 8 s) or down, the answer is its last good one, with a `lastGood` note (`savedAt`, `reason`), its own asOf and `freshness.stale: true`; a failure with nothing saved is `{ error, retryAfter, fallback }` (fallback: the recipe that rebuilds the figure from the chain). Uptime: https://netnetintel.com/status. Server card: https://netnetintel.com/.well-known/mcp.json
- [API catalog](https://netnetintel.com/.well-known/api-catalog) (RFC 9727): the read API and the MCP server with their specs, docs and status ([status](https://netnetintel.com/api/v1/status)). Every page also sends `Link` headers to it.
- Markdown pages: request any page (for example https://netnetintel.com/buybacks) with `Accept: text/markdown` for a short live summary of it: what it shows, its current figures with the block, and where to check them.
- [A2A agent](https://netnetintel.com/.well-known/agent-card.json): an Agent2Agent JSON-RPC endpoint at https://netnetintel.com/a2a; `SendMessage` with a question (or a data part `{"skill": "buybacks"}`, or a 0x address) answers with a Markdown summary and the area's JSON.
- [Agent Skills index](https://netnetintel.com/.well-known/agent-skills/index.json): the published skills with their SHA-256 digests. In a browser, the site also registers WebMCP tools (`open_page`, `get_page_summary`, `get_live_data`, `lookup_wallet`).
- [auth.md](https://netnetintel.com/auth.md): no registration, no keys; everything is public, read-only and rate-limited.
- [Agent Skill](https://netnetintel.com/skills/netnet-intel/SKILL.md): which call answers what, how to read the figures, how to verify them.
- When you report a NetNet figure, give the block it was read at; verify it when accuracy matters.
- Not covered yet? Say so rather than estimating, and send the question with the MCP tool `report_gap` (plain words, no personal details). Usage: NetNet Intel counts calls per tool and endpoint to improve the service; it stores no IP addresses, and keeps the questions sent to `report_gap` (and A2A questions it couldn't route) for 90 days.
- [Alerts](https://netnetintel.com/api/v1/alerts?minUsd=10000): what needs attention now (NET Advance open, Loop AT RISK / WIND DOWN, a buyback after a quiet stretch, whale sells over minUsd in 24 h), each with a level (act / watch / info) and its source.
- Every read-API body with an `asOf` carries `freshness` { asOf, block, ageSec, maxAgeSec, stale }; `?summary=1` on /api/v1/holders, /advance and /buybacks gives the compact shape. Bodies are compact JSON (no indentation); add `?pretty=1` to any /api/v1 path or to /openapi.json for an indented copy. If your fetcher caches by URL, add any query (e.g. `?t=`) to get a fresh read.
- [Status](https://netnetintel.com/api/v1/status): the newest successful core read (block, asOf, ageSec) and `stale` when it is older than 10 minutes, plus `mcp`: the heartbeat's view (about every 5 minutes, every MCP tool in turn about every 35 minutes: status, last check, uptime over 24 h, 7 d and 30 d, tools failing now). The page: https://netnetintel.com/status; JSON: /status.json; MCP: `get_status`.
- Last good answers: a read API call (GET) or MCP tool whose source fails, or takes over 8 s, answers with its last good body: HTTP 200, header `x-fallback: last_good`, a `lastGood` field (`savedAt`, `reason`), `stale: true` and its own asOf. Treat it as stale data: quote its time. OpenSea asks, the verifier and the status are always live.
- Errors are small and typed: see **Errors and partial answers** above for each shape and what to do.
- Building on this data: call one endpoint or tool per question (the **Common chains** above for multi-step questions) and quote its `block`/`asOf`; use the filters (`days`, `kind`, `minUsd`, `status`, `sort`, `limit`) rather than fetching everything; treat `stale: true`, `complete: false` or a `note` as part of the answer; on a 429 wait for `retry-after`, and on a 502/503 retry once, then fall back to the recipe (`/api/v1/recipes/{id}`) and read the chain directly. A verify report's `checkedBy` and `independent` say who re-read the chain. The A2A skills (17) route a plain question to the right area; the read API and MCP cover everything with filters.
## Alerts
- [@netnetintel_bot](https://t.me/netnetintel_bot) on Telegram: follow any top-50 wallet and get a message on each of its buys, sells, stakes and transfers of 10 NET or more (the moves NetNet Intel decodes). Connecting a wallet is optional. Deep link to follow one: `https://t.me/netnetintel_bot?start=w_`.
## Key terms
- NAV per NET (core): Treasury.backingPerToken() = Treasury.rfv() ÷ NET.totalSupply(), what the contracts back each NET with.
- RFV: Treasury.rfv(): liquid USDG + the Morpho position after a 2% haircut + protocol-owned liquidity.
- RWA sleeve: tokenized equities, hOHM and positions held by a team-custodied Safe, disclosed and counted by the official Reports, outside RFV and not a guaranteed backstop.
- NAV incl. RWA sleeve: (RFV + the sleeve) ÷ NET in issue, the Reports' "NAV incl. RWAs". True RFV = RFV + the sleeve.
- The number: True RFV in USD. The weekly Predict series asks whether it will be above (HIGHER) or below (LOWER) a fixed line at the print time; a series opens Wednesdays 14:00 UTC.
- HIGHER / LOWER tokens pay 1 USDG if their side is right, so a token's price is the market's implied probability. The model's odds are NetNet Intel's inference, not the desk's price.
- Premium: the TWAP price ÷ NAV per NET (core). The distribution rate follows it: 0.45% per 8-hour epoch at 1.75× and above, zero at 1×.
## Pages
- [Overview](https://netnetintel.com/): price, both NAVs, the treasury at a glance, the live Predict series
- [What grows NET](https://netnetintel.com/grows): how much the treasury grew and from where: money in by source, the sleeve by asset class, the effect per NET
- [NAV](https://netnetintel.com/nav): NAV per NET core and incl. the RWA sleeve, side by side, with each figure's source
- [Treasury](https://netnetintel.com/treasury): every holding read on-chain
- [Holders & whales](https://netnetintel.com/holders): the top 50 wallets, their moves decoded, follow any on Telegram
- [Supply & Staking](https://netnetintel.com/supply): supply decomposition, sNET emissions and known holders
- [Predict](https://netnetintel.com/predict): the model's call on the weekly print, its graded record, the book and past prints
- [Liquidity](https://netnetintel.com/liquidity): NET/USDG LP pools
- [Bonds](https://netnetintel.com/bonds): the BondDepository's bonds and offering board
- [Credit](https://netnetintel.com/credit): NetNet Credit, Loopback and Pendle loans
- [Advance](https://netnetintel.com/advance): NET Advance positions
- [The Book](https://netnetintel.com/book): sports spreads settled in wsNET
- [Buybacks](https://netnetintel.com/buybacks): what the team buys back from the RWA sleeve's Safe, at what price against NAV, through which venues and paid from what; the Treasury's inverse-bond floor bid; the fee schedule; the treasury's inflows by source are charted on NAV
- [Contracts](https://netnetintel.com/contracts): the discovered NetNet contract registry
- [Risks](https://netnetintel.com/risks): smart-contract, admin and economic risk map
- [Claims](https://netnetintel.com/claims): what NetNet claims, checked on-chain
- [Report Reconciliation](https://netnetintel.com/reconciliation): the official terminal's figures against a reconstruction from raw balances
- [Sources](https://netnetintel.com/sources): data hierarchy, methodology and audit trail
- [Verify](https://netnetintel.com/verify): your browser re-reads the on-chain figures from the public RPC at the served block and compares
- [Recipes](https://netnetintel.com/recipes): how every figure is built, with a Run button that rebuilds it in your browser
- [Community desk](https://netnetintel.com/desk): the ecosystem on one screen, each figure checkable from the chain
- [Button Presser](https://netnetintel.com/presser): faction, race and plate census, card and gear lookup, OpenSea asks
- [Shift Run](https://netnetintel.com/shiftrun): the arcade; beat the number to the print line. Points only, nothing to wager.
## Optional
- [Trade](https://netnetintel.com/trade): Predict trades signed by the visitor's own wallet; the site holds no keys or funds
- [Wallet](https://netnetintel.com/wallet): look up any address's NET holdings
- [NAV Lab](https://netnetintel.com/nav-lab): scenario calculator from the live figures
- [Research](https://netnetintel.com/research)