{"openapi":"3.1.0","info":{"title":"Borro public API","version":"1.0.0","summary":"Stock-token lending, borrowing and shorting on Robinhood Chain (4663), on Morpho.","description":"Read-only JSON for desks, bots and agents. Transactions go straight to the contracts in /contracts.json, signed by your own wallet; the MCP server at /mcp can also prepare them unsigned. Rate limits: answers worked out by the Worker on request (markets, prices, health, player) share a per-address allowance with /rpc and /mcp; past it the last good copy or a 429 with Retry-After. Docs: https://borro.markets/developers.","contact":{"name":"Borro","url":"https://borro.markets/developers"}},"servers":[{"url":"https://borro.markets/v1","description":"Version 1: fields are only ever added, never renamed or removed."},{"url":"https://borro.markets","description":"The same answers at the unversioned paths the site uses."}],"tags":[{"name":"contracts","description":"Addresses, ABIs, owners, timelocks and every market's parameters."},{"name":"markets","description":"Prices, rates, caps and what is free, live."},{"name":"positions","description":"One wallet's positions and their health."},{"name":"programs","description":"The Drip, Locker Rebates, Bookrunners, buybacks."},{"name":"agents","description":"The MCP server."}],"paths":{"/contracts.json":{"get":{"operationId":"contracts","summary":"The contract registry","description":"Every contract a desk calls (address, deploy block, code hash, ABI URL, source, verification, owner and what the owner can do, Vault V2 timelocks) and every market (Morpho ids, parameters, oracles and their feeds, LLTVs, caps as of `block`, routes), the weekend policy, fees, and the events and errors to listen for with their topics and selectors. Static per release; regenerated from the chain when anything changes.","tags":["contracts"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"schema_version":{"const":1},"generated_at":{"type":"string","format":"date-time"},"block":{"type":"integer"},"chain":{"type":"object","properties":{},"required":[],"additionalProperties":true},"owner":{"type":"object","properties":{},"required":[],"additionalProperties":true},"contracts":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"address":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"kind":{"enum":["borro","morpho","third_party"]},"deploy_block":{"type":["integer","null"]},"codehash":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"abi_url":{"type":"string"}},"required":[],"additionalProperties":true}},"markets":{"type":"array","items":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"events":{"type":"array","items":{"type":"object","properties":{"contract":{"type":"string"},"name":{"type":"string"},"topic0":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}},"required":[],"additionalProperties":true}},"errors":{"type":"array","items":{"type":"object","properties":{"contract":{"type":"string"},"name":{"type":"string"},"selector":{"type":"string"}},"required":[],"additionalProperties":true}}},"required":["schema_version","block","contracts","markets"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"per release","x-borro-timestamp":"generated_at","x-borro-stale-after":null}},"/abi/{name}.json":{"get":{"operationId":"abi","summary":"One ABI","description":"A contract's ABI by the name /contracts.json gives in abi_url (BorroShort, VaultV2, Morpho, ERC20Permit, ...).","tags":["contracts"],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"e.g. BorroShort"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{},"required":[],"additionalProperties":true}}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"No ABI by that name","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"per release","x-borro-timestamp":null,"x-borro-stale-after":null}},"/openapi.json":{"get":{"operationId":"openapi","summary":"This document","tags":["contracts"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"per release","x-borro-timestamp":null,"x-borro-stale-after":null}},"/markets.json":{"get":{"operationId":"markets","summary":"Every market, live","description":"Each stock: price and feed age, lending rate, what is lent, borrowed and free to short, the stock vault's cap, the borrow fee and open fee, LLTVs, the USDG side (rate, free, Borro's vault cap), Morpho market parameters and oracles; the USDG vault; the Drip; the market clock. The MCP markets tool's answer, exactly. Amounts are decimals in whole units (shares, USDG).","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"schema_version":{"const":1},"read_at":{"type":"string","format":"date-time"},"chain":{"type":"object","properties":{},"required":[],"additionalProperties":true},"stocks":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"name":{"type":"string"},"live":{"type":"boolean"},"price_usd":{"type":"number","description":"Chainlink feed price"},"price_at":{"type":["string","null"],"format":"date-time"},"paused":{"type":"boolean","description":"new shorts stopped; closes always work"},"feed_age_seconds":{"type":["integer","null"]},"lend":{"type":"object","properties":{"apr":{"type":"number"},"includes_borro":{"type":"boolean"},"lent":{"type":"number"},"borrowed":{"type":"number"},"free_to_short":{"type":"number","description":"stock free to borrow, in shares"},"utilization":{"type":"number"},"vault_cap":{"type":"number","description":"the most the stock vault lends, in shares"}},"required":[],"additionalProperties":true},"short":{"type":"object","properties":{"yearly":{"type":"number","description":"borrow fee a year, less $BORRO paid to shorters, as a fraction"},"rent_alone":{"type":"number","description":"the borrow fee alone (field name kept for compatibility)"},"open_fee":{"type":"number","description":"fraction of the sale money"},"closed_for_you_past":{"type":"number","description":"the short market's LLTV"}},"required":[],"additionalProperties":true},"borrow_usdg":{"oneOf":[{"type":"null"},{"type":"object","properties":{"apr":{"type":"number"},"limit":{"type":"number","description":"the USDG market's LLTV"},"lent":{"type":"number"},"borrowed":{"type":"number"},"free":{"type":"number"},"post_and_lend_in_one":{"type":"boolean"}},"required":[],"additionalProperties":true}]},"contracts":{"type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"vault":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"market_id":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"usdg_market_id":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"feed":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":[],"additionalProperties":true},"morpho":{"oneOf":[{"type":"null"},{"type":"object","properties":{"short_market":{"type":"object","properties":{"id":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"params":{"type":"object","properties":{"loan_token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"collateral_token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"oracle":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"irm":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"lltv":{"type":"string","description":"WAD (1e18 = 100%)"}},"required":[],"additionalProperties":true},"lltv":{"type":"number"},"oracle":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":[],"additionalProperties":true},"usdg_market":{"oneOf":[{"type":"null"},{"type":"object","properties":{"id":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"params":{"type":"object","properties":{"loan_token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"collateral_token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"oracle":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"irm":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"lltv":{"type":"string","description":"WAD (1e18 = 100%)"}},"required":[],"additionalProperties":true},"lltv":{"type":"number"},"oracle":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"usdg_vault_cap":{"type":["number","null"]},"usdg_vault_lent":{"type":["number","null"]}},"required":[],"additionalProperties":true}]}},"required":[],"additionalProperties":true}]}},"required":["symbol","price_usd","lend","short","contracts"],"additionalProperties":true}},"usdg":{"type":"object","properties":{},"required":[],"additionalProperties":true},"drip":{"type":"object","properties":{},"required":[],"additionalProperties":true},"market_clock":{"type":"object","properties":{"open":{"type":"boolean"},"closes_at":{"type":["string","null"],"format":"date-time"},"reopens_at":{"type":["string","null"],"format":"date-time"},"rule":{"type":"string"}},"required":[],"additionalProperties":true}},"required":["read_at","stocks"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 60 s; a copy up to 15 min old is answered at once while a new one is made","x-borro-timestamp":"read_at","x-borro-stale-after":900}},"/prices.json":{"get":{"operationId":"prices","summary":"Token prices on chain against the stock","description":"What BorroShort's own route would pay (buy) or give (sell) for $1,000 and $10,000 of each stock token, by eth_call, before Borro's fee, against the Chainlink feed (or Borro's weekend estimate and band while the market is shut). The arbitrage view.","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","description":"unix seconds"},"marketClosed":{"type":"boolean"},"reopenAt":{"type":["integer","null"]},"sizesUsd":{"type":"array","items":{"type":"number"}},"stocks":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"token":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"feed":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"feedPrice":{"type":"number"},"feedAt":{"type":"integer","description":"unix seconds"},"buy":{"type":"object","properties":{},"required":[],"additionalProperties":true},"sell":{"type":"object","properties":{},"required":[],"additionalProperties":true},"mid":{"type":["number","null"]},"gapPct":{"type":["number","null"]}},"required":[],"additionalProperties":true}}},"required":["at","stocks"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 30 s","x-borro-timestamp":"at","x-borro-stale-after":120}},"/stats.json":{"get":{"operationId":"stats","summary":"Totals and per-stock numbers","description":"Free to borrow, lent and borrowed in dollars, rates and the open fee. Published by the keeper.","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"integer"},"updatedAt":{"type":"integer","description":"unix seconds"},"block":{"type":"integer"},"totals":{"type":"object","properties":{},"required":[],"additionalProperties":true},"stocks":{"type":"object","properties":{},"required":[],"additionalProperties":true},"usdg":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"required":["updatedAt"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"every 5 minutes","x-borro-timestamp":"updatedAt","x-borro-stale-after":900}},"/weekend.json":{"get":{"operationId":"weekend","summary":"The market clock and weekend prices","description":"closed, closeAt, reopenAt (unix seconds), and for each stock its feed's paused price, Borro's weekend price and 95% band while shut, its volatility and past Monday gaps. Nothing on chain reads the weekend price.","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","description":"unix seconds"},"closed":{"type":"boolean"},"closeAt":{"type":"integer","description":"unix seconds"},"reopenAt":{"type":"integer","description":"unix seconds"},"stocks":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"required":["at","closed"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"every 5 minutes","x-borro-timestamp":"at","x-borro-stale-after":1200}},"/health/{wallet}.json":{"get":{"operationId":"health","summary":"A wallet's health and liquidation prices","description":"Every short and USDG loan of the wallet, worst first: limit_used (1 = Morpho can liquidate it), health, the stock price that liquidates it and how far the price is from it, a status, and the market clock. The MCP health tool's answer.","tags":["positions"],"parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"description":"The wallet (for a short, the shorter, not its BorroAccount)"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"read_at":{"type":"string","format":"date-time"},"thresholds":{"type":"object","properties":{},"required":[],"additionalProperties":true},"worst":{"oneOf":[{"type":"null"},{"type":"object","properties":{"symbol":{"type":"string"},"kind":{"enum":["short","usdg_loan"]},"market_id":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"morpho_borrower":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"the address that owns the Morpho position (a short's BorroAccount)"},"price_usd":{"type":"number"},"limit_used":{"type":"number","description":"owed / allowed at LLTV; 1 = liquidatable"},"health":{"type":["number","null"]},"liquidation_price_usd":{"type":["number","null"]},"price_move_to_liquidation_pct":{"type":["number","null"]},"status":{"enum":["ok","warn","danger","liquidatable"]}},"required":[],"additionalProperties":true}]},"positions":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"kind":{"enum":["short","usdg_loan"]},"market_id":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"morpho_borrower":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$","description":"the address that owns the Morpho position (a short's BorroAccount)"},"price_usd":{"type":"number"},"limit_used":{"type":"number","description":"owed / allowed at LLTV; 1 = liquidatable"},"health":{"type":["number","null"]},"liquidation_price_usd":{"type":["number","null"]},"price_move_to_liquidation_pct":{"type":["number","null"]},"status":{"enum":["ok","warn","danger","liquidatable"]}},"required":[],"additionalProperties":true}},"market_clock":{"type":"object","properties":{"open":{"type":"boolean"},"closes_at":{"type":["string","null"],"format":"date-time"},"reopens_at":{"type":["string","null"],"format":"date-time"},"rule":{"type":"string"}},"required":[],"additionalProperties":true}},"required":["wallet","positions"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 10 s per wallet","x-borro-timestamp":"read_at","x-borro-stale-after":60}},"/charts/{symbol}.json":{"get":{"operationId":"chart","summary":"30 days of a stock's feed","description":"[[unixSeconds, price], ...], oldest first, every Chainlink round.","tags":["markets"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Z0-9.]{1,10}$"},"description":"e.g. NVDA"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"array","prefixItems":[{"type":"integer","description":"unix seconds"},{"type":"number"}]}}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"No chart for this stock yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"every 10 minutes","x-borro-timestamp":"the last point's time","x-borro-stale-after":3600}},"/prices-history/{days}.json":{"get":{"operationId":"pricesHistory","summary":"Token quotes against the feed over time","description":"Each token's buy and sell quote for $1,000 against its feed: a day every 15 minutes, a week hourly, 30 days every 4 hours. Points are [t, stock, buy, sell].","tags":["markets"],"parameters":[{"name":"days","in":"path","required":true,"schema":{"enum":["1","7","30"]},"description":"1, 7 or 30"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"at":{"type":"integer","description":"unix seconds"},"days":{"type":"integer"},"size":{"type":"number"},"grid":{"type":"integer"},"stocks":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"required":["at","stocks"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"every 15 minutes","x-borro-timestamp":"at","x-borro-stale-after":3600}},"/merkl.json":{"get":{"operationId":"merkl","summary":"Merkl campaigns on Borro and Robinhood Earn's rate","description":"No timestamp field: X-Merkl: stale says an answer is a last good copy.","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"nvda":{"type":"object","properties":{},"required":[],"additionalProperties":true},"usdg":{"type":"object","properties":{},"required":[],"additionalProperties":true},"earn":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 5 minutes","x-borro-timestamp":null,"x-borro-stale-after":3600}},"/drip.json":{"get":{"operationId":"drip","summary":"The $BORRO Drip: claim proofs and ledger","description":"Merkle root and each wallet's cumulative claim with its proof, the days counted, routes. Wallets only (regular wallets, Safes, EIP-7702 wallets).","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"},"root":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"accounts":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"required":["updatedAt"],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"daily count; claim roots every few hours","x-borro-timestamp":"updatedAt","x-borro-stale-after":172800}},"/drip-rate.json":{"get":{"operationId":"dripRate","summary":"The Drip at today's rate and price","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 60 s","x-borro-timestamp":"updatedAt","x-borro-stale-after":600}},"/rebates.json":{"get":{"operationId":"rebates","summary":"Locker Rebates statement","description":"Borro's fees given back to $BORRO lockers: terms, weeks, what each wallet is owed and was paid. Before the first statement it answers 200 with { published: false } (no version, no terms).","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"published":{"type":"boolean","description":"false before the first statement"}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"daily (01:42 UTC), paid weekly","x-borro-timestamp":"updatedAt","x-borro-stale-after":172800}},"/builders.json":{"get":{"operationId":"builders","summary":"Bookrunners statement","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"hourly","x-borro-timestamp":"updatedAt","x-borro-stale-after":10800}},"/burns.json":{"get":{"operationId":"burns","summary":"Every buyback and burn of $BORRO with Borro's fees","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"},"burns":{"type":"array","items":{"type":"object","properties":{},"required":[],"additionalProperties":true}}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"when the fees job burns","x-borro-timestamp":"updatedAt","x-borro-stale-after":null}},"/caps.json":{"get":{"operationId":"caps","summary":"Caps sized from pool depth","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"when the caps job runs","x-borro-timestamp":"updatedAt","x-borro-stale-after":null}},"/borro-price.json":{"get":{"operationId":"borroPrice","summary":"$BORRO's price","tags":["programs"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"},"usd":{"type":"string"}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 60 s","x-borro-timestamp":"updatedAt","x-borro-stale-after":600}},"/trades.json":{"get":{"operationId":"trades","summary":"Recent shorts opened and closed","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"},"trades":{"type":"array","items":{"type":"object","properties":{},"required":[],"additionalProperties":true}}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 30 s","x-borro-timestamp":"updatedAt","x-borro-stale-after":300}},"/leaderboard.json":{"get":{"operationId":"leaderboard","summary":"The weekly prize's scores (round trips left out)","tags":["markets"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"updatedAt":{"type":"integer","description":"unix seconds"}},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 60 s","x-borro-timestamp":"updatedAt","x-borro-stale-after":600}},"/player/{wallet}.json":{"get":{"operationId":"player","summary":"A wallet's achievements and closes","tags":["positions"],"parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"description":"The wallet"}],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"a new copy at most every 60 s per wallet","x-borro-timestamp":"updatedAt","x-borro-stale-after":600}},"/history.json":{"get":{"operationId":"history","summary":"Every wallet's portfolio history (or an index of 16 shards at /history/{0-f}.json)","tags":["positions"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":true}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"404":{"description":"Not published yet","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"keeper","x-borro-cadence":"every 10 minutes","x-borro-timestamp":"updatedAt","x-borro-stale-after":3600}},"/tools.json":{"get":{"operationId":"tools","summary":"The MCP server's tools","tags":["agents"],"parameters":[],"responses":{"200":{"description":"OK","headers":{"ETag":{"description":"A hash of the body. Send it back as If-None-Match for a 304.","schema":{"type":"string"}},"Cache-Control":{"description":"How long a copy may be kept.","schema":{"type":"string"}},"X-Borro-Api-Version":{"description":"The API's major version (1).","schema":{"type":"string"}},"X-Borro-Updated-At":{"description":"When the data was made (ISO 8601), from the body's timestamp field, when it has one.","schema":{"type":"string"}},"X-Borro-Data-Age":{"description":"Seconds since X-Borro-Updated-At, at the moment of the answer.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"args":{"type":"array","items":{"type":"string"}},"required":{"type":"array","items":{"type":"string"}}},"required":[],"additionalProperties":true}}}}},"304":{"description":"Not modified (If-None-Match matched the ETag)"},"429":{"description":"Too many requests from this address; wait Retry-After seconds.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Not available right now (no good copy yet). Retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}},"x-borro-source":"worker","x-borro-cadence":"per release","x-borro-timestamp":null,"x-borro-stale-after":null}},"/mcp":{"post":{"operationId":"mcp","tags":["agents"],"summary":"MCP over Streamable HTTP (JSON-RPC 2.0)","description":"initialize, tools/list, tools/call, ping; batches of up to 10. Read tools and tools that prepare unsigned transactions (approvals first, simulated from the wallet). Never takes or holds keys.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"const":"2.0"},"id":{},"method":{"type":"string"},"params":{"type":"object","properties":{},"required":[],"additionalProperties":true}},"required":[],"additionalProperties":true}}}},"responses":{"200":{"description":"JSON-RPC answer","content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":true}}}},"429":{"description":"Over the per-address allowance"}}}}}}