{"openapi":"3.1.0","info":{"title":"VaultBags Agent API","version":"1.1.0","description":"Read-only access to the VaultBags autonomous treasury: today's allocation, the daily briefing, the market signals and honest track record behind it, live treasury stats, decision history with on-chain receipts, every integrated project's treasury, and condensed docs. Every endpoint returns public data assembled server-side in fixed schemas. Nothing here moves funds or signs anything. An equivalent Model Context Protocol server is available at /api/mcp."},"servers":[{"url":"https://vaultbags.app"}],"paths":{"/api/agent/todays-allocation":{"get":{"operationId":"get_todays_allocation","summary":"Today's RWA buy proportions, band, rationale and on-chain receipt.","description":"Today's RWA buy proportions, band, rationale and on-chain receipt. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/daily-briefing":{"get":{"operationId":"get_daily_briefing","summary":"Today's public market briefing, weights and on-chain receipt.","description":"Today's public market briefing, weights and on-chain receipt. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/treasury-stats":{"get":{"operationId":"get_treasury_stats","summary":"Live per-asset balances, total value, and totals paid to holders. holdersCount and cyclesCount are $VAULT's own; protocolHoldersTracked and protocolCyclesExecuted span every integrated project. activeLocks counts lock contracts, uniqueLockers counts the wallets holding them (several locks can belong to one wallet).","description":"Live per-asset balances, total value, and totals paid to holders. holdersCount and cyclesCount are $VAULT's own; protocolHoldersTracked and protocolCyclesExecuted span every integrated project. activeLocks counts lock contracts, uniqueLockers counts the wallets holding them (several locks can belong to one wallet). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/decision-history":{"get":{"operationId":"get_decision_history","summary":"Recent daily decisions with on-chain receipts, newest first.","description":"Recent daily decisions with on-chain receipts, newest first. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"days","in":"query","required":false,"description":"How many recent days to return (default 14, max 30).","schema":{"type":"integer","minimum":1,"maximum":30}}]}},"/api/agent/market-signals":{"get":{"operationId":"get_market_signals","summary":"The market signals behind today's allocation, each with its per-asset read.","description":"The market signals behind today's allocation, each with its per-asset read. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/brain-vs-flat":{"get":{"operationId":"get_brain_vs_flat","summary":"Honest track record: the daily allocation line versus a fixed even split.","description":"Honest track record: the daily allocation line versus a fixed even split. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/simulate":{"get":{"operationId":"simulate_allocation","summary":"Run the vault's allocation model on your own market inputs.","description":"Run the vault's allocation model on your own market inputs. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"realYield","in":"query","required":false,"description":"10-year real (TIPS) yield, percent (e.g. 2.1).","schema":{"type":"number"}},{"name":"breakevenInfl","in":"query","required":false,"description":"10-year breakeven inflation, percent.","schema":{"type":"number"}},{"name":"dxyChangePct","in":"query","required":false,"description":"Broad US dollar index percent change over ~1 month.","schema":{"type":"number"}},{"name":"goldMomentumPct","in":"query","required":false,"description":"Gold price percent change (recent trend).","schema":{"type":"number"}},{"name":"hyOas","in":"query","required":false,"description":"US High Yield credit spread (OAS), percent.","schema":{"type":"number"}},{"name":"vix","in":"query","required":false,"description":"CBOE volatility index (VIX) level.","schema":{"type":"number"}},{"name":"spx30dPct","in":"query","required":false,"description":"S&P 500 percent change over ~1 month.","schema":{"type":"number"}},{"name":"tenYear","in":"query","required":false,"description":"10-year Treasury nominal yield, percent.","schema":{"type":"number"}},{"name":"curve10y2y","in":"query","required":false,"description":"10-year minus 2-year Treasury spread, percent.","schema":{"type":"number"}},{"name":"fearGreed","in":"query","required":false,"description":"Crypto Fear & Greed index, 0 to 100.","schema":{"type":"number"}}]}},"/api/agent/projects":{"get":{"operationId":"get_projects","summary":"Every treasury currently running on VaultBags (not just $VAULT).","description":"Every treasury currently running on VaultBags (not just $VAULT). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/project-treasury":{"get":{"operationId":"get_project_treasury","summary":"One integrated project's live treasury (claim/lock pools, value) by mint.","description":"One integrated project's live treasury (claim/lock pools, value) by mint. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"mint","in":"query","required":true,"description":"The project's SPL token mint address (base58).","schema":{"type":"string"}}]}},"/api/agent/evaluate":{"get":{"operationId":"get_agent","summary":"Evaluate any VaultBags agent by mint: Autonomy Score (split inherited vs earned), passport and treasury.","description":"Evaluate any VaultBags agent by mint: Autonomy Score (split inherited vs earned), passport and treasury. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"mint","in":"query","required":true,"description":"The agent's SPL token mint address (base58).","schema":{"type":"string"}}]}},"/api/agent/vault-docs":{"get":{"operationId":"get_vault_docs","summary":"Condensed protocol documentation and live surface links.","description":"Condensed protocol documentation and live surface links. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/rwas":{"get":{"operationId":"list_rwas","summary":"Curated, on-chain-certified registry of tokenized RWAs on Solana (gold, treasuries, equities).","description":"Curated, on-chain-certified registry of tokenized RWAs on Solana (gold, treasuries, equities). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"category","in":"query","required":false,"description":"Filter by asset category.","schema":{"type":"string"}},{"name":"issuer","in":"query","required":false,"description":"Filter by issuer id.","schema":{"type":"string"}}]}},"/api/agent/rwa":{"get":{"operationId":"get_rwa","summary":"Resolve one tokenized RWA's certified mint and issuer context by symbol or mint.","description":"Resolve one tokenized RWA's certified mint and issuer context by symbol or mint. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"query","in":"query","required":true,"description":"A token symbol (case-insensitive) or an exact Solana mint address.","schema":{"type":"string"}}]}},"/api/agent/protocol-meter":{"get":{"operationId":"get_protocol_meter","summary":"The Meter: the protocol's live, receipt-backed numbers in one consolidated snapshot.","description":"The Meter: the protocol's live, receipt-backed numbers in one consolidated snapshot. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/autonomy":{"get":{"operationId":"get_autonomy","summary":"The vault agent's Autonomy Score and the verifiable facts behind it.","description":"The vault agent's Autonomy Score and the verifiable facts behind it. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/autonomy-spec":{"get":{"operationId":"get_autonomy_spec","summary":"The Autonomy Score's own rules: dimensions, weights, formulas and where each input comes from.","description":"The Autonomy Score's own rules: dimensions, weights, formulas and where each input comes from. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/passport":{"get":{"operationId":"get_agent_passport","summary":"The vault agent's portable machine-readable passport (identity, surfaces, receipts).","description":"The vault agent's portable machine-readable passport (identity, surfaces, receipts). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/rwa-performance":{"get":{"operationId":"get_rwa_performance","summary":"The vault's real cost basis and return per RWA position since purchase (USD and SOL).","description":"The vault's real cost basis and return per RWA position since purchase (USD and SOL). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/shadow-vs-brain":{"get":{"operationId":"get_shadow_vs_brain","summary":"The shadow language model's daily calls measured against the deterministic brain.","description":"The shadow language model's daily calls measured against the deterministic brain. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/recent-cycles":{"get":{"operationId":"get_recent_cycles","summary":"The latest distribution cycles with their on-chain transaction receipts.","description":"The latest distribution cycles with their on-chain transaction receipts. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"limit","in":"query","required":false,"description":"How many recent cycles to return (default 5).","schema":{"type":"integer","minimum":1,"maximum":20}}]}},"/api/agent/monthly-reports":{"get":{"operationId":"get_monthly_reports","summary":"The agent's closed books, one per month, each committed on-chain.","description":"The agent's closed books, one per month, each committed on-chain. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"months","in":"query","required":false,"description":"How many recent months to return (default 12).","schema":{"type":"integer","minimum":1,"maximum":24}}]}},"/api/agent/treasury-history":{"get":{"operationId":"get_treasury_history","summary":"The treasury's value and per-asset balances over time, sampled across the whole window.","description":"The treasury's value and per-asset balances over time, sampled across the whole window. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"days","in":"query","required":false,"description":"Window length in days (default 30, max 365).","schema":{"type":"integer","minimum":1,"maximum":365}},{"name":"points","in":"query","required":false,"description":"How many samples to return across that window (default 60, max 200).","schema":{"type":"integer","minimum":2,"maximum":200}}]}},"/api/agent/holder-distribution":{"get":{"operationId":"get_holder_distribution","summary":"How many wallets hold the token, how that changed, how much is locked, and how concentrated the supply is.","description":"How many wallets hold the token, how that changed, how much is locked, and how concentrated the supply is. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/recent-activity":{"get":{"operationId":"get_recent_activity","summary":"Recent trading in aggregate: trades, buys, sells and distinct traders over the last day and week.","description":"Recent trading in aggregate: trades, buys, sells and distinct traders over the last day and week. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/payout-integrity":{"get":{"operationId":"get_payout_integrity","summary":"Every payout the protocol recorded, checked against the chain and counted. Serves nothing when it cannot verify all of them.","description":"Every payout the protocol recorded, checked against the chain and counted. Serves nothing when it cannot verify all of them. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/lock-tier":{"get":{"operationId":"get_lock_tier","summary":"The tier a lock term reaches, and the tier a wallet currently holds. Derived from the term, stored nowhere, and pays nothing.","description":"The tier a lock term reaches, and the tier a wallet currently holds. Derived from the term, stored nowhere, and pays nothing. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"days","in":"query","required":false,"description":"A lock term in days, to ask which tier it would reach.","schema":{"type":"integer","minimum":1,"maximum":3650}},{"name":"wallet","in":"query","required":false,"description":"A Solana wallet address, to ask which tier it currently holds.","schema":{"type":"string"}}]}},"/api/agent/proof-of-reserves":{"get":{"operationId":"get_proof_of_reserves","summary":"Reserve wallets, certified issuers, live on-chain balances, and decision receipts.","description":"Reserve wallets, certified issuers, live on-chain balances, and decision receipts. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/verify-claim":{"get":{"operationId":"verify_claim","summary":"Verify one holder claim against the on-chain Merkle root (proof + receipt).","description":"Verify one holder claim against the on-chain Merkle root (proof + receipt). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"tx","in":"query","required":true,"description":"The claim's Solana transaction signature (base58).","schema":{"type":"string"}}]}},"/api/agent/lock-boost":{"get":{"operationId":"simulate_lock_boost","summary":"Estimate the lock boost: current shared multiplier, and the state after locking N more $VAULT.","description":"Estimate the lock boost: current shared multiplier, and the state after locking N more $VAULT. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"amount","in":"query","required":false,"description":"Whole $VAULT tokens you are considering locking. Omit for the current state only.","schema":{"type":"number"}}]}},"/api/agent/verify-day":{"get":{"operationId":"verify_day","summary":"Verify a whole day of the claim ledger against its stamped Merkle root (defaults to the latest).","description":"Verify a whole day of the claim ledger against its stamped Merkle root (defaults to the latest). Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"period","in":"query","required":false,"description":"UTC day as YYYY-MM-DD. Omit for the latest stamped day.","schema":{"type":"string"}}]}},"/api/agent/verify-decision":{"get":{"operationId":"verify_decision","summary":"Verify one daily allocation decision against the hash stamped on-chain that day.","description":"Verify one daily allocation decision against the hash stamped on-chain that day. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"date","in":"query","required":false,"description":"UTC date as YYYY-MM-DD. Omit for today.","schema":{"type":"string"}}]}},"/api/agent/liquidity":{"get":{"operationId":"get_liquidity","summary":"The liquidity the protocol built, what it cost, what it is worth now, whether any of it can be withdrawn, and the trading fees it earned and put back.","description":"The liquidity the protocol built, what it cost, what it is worth now, whether any of it can be withdrawn, and the trading fees it earned and put back. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/supply":{"get":{"operationId":"get_supply","summary":"Both supply figures that go by that name: the total minted that market caps use, and the pool-excluded figure the protocol's own holder accounting uses.","description":"Both supply figures that go by that name: the total minted that market caps use, and the pool-excluded figure the protocol's own holder accounting uses. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/raffle":{"get":{"operationId":"get_raffle","summary":"The holder raffle's public state: window, weighted tickets, participant count, prizes, and how the draw gets its randomness. Aggregate only.","description":"The holder raffle's public state: window, weighted tickets, participant count, prizes, and how the draw gets its randomness. Aggregate only. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/strategies":{"get":{"operationId":"get_strategies","summary":"Every vault strategy: the four presets (live paper strategies with receipted daily decisions) and each strategy adopted by a live project, with today's frozen weights.","description":"Every vault strategy: the four presets (live paper strategies with receipted daily decisions) and each strategy adopted by a live project, with today's frozen weights. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/api/agent/strategy":{"get":{"operationId":"get_strategy","summary":"One strategy in depth by preset id or 64-hex key: its signed asset selection, adoption, and its recent daily decisions with on-chain receipts.","description":"One strategy in depth by preset id or 64-hex key: its signed asset selection, adoption, and its recent daily decisions with on-chain receipts. Read-only public data; nothing here moves funds, requires auth, or exposes personal data.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}},"parameters":[{"name":"strategy","in":"query","required":true,"description":"A preset id (classic, growth, hard-money, income) or a 64-hex strategy key.","schema":{"type":"string"}}]}},"/api/agent/ask":{"post":{"operationId":"ask","summary":"Ask the vault's analyst a question in natural language.","description":"The conversational lane over the same read-only public data. Free lane first, rate-limited per caller per day; when it is exhausted the endpoint answers 402 with its terms. Nothing here moves funds or signs anything.","parameters":[{"name":"X-PAYMENT","in":"header","required":false,"description":"A settled USDC payment on Solana, in the form the 402 body specifies (commit-reveal memo binding). One settled payment buys exactly one response; a reused transaction is refused.","schema":{"type":"string"}},{"name":"X-CREDIT-TOKEN","in":"header","required":false,"description":"A prepaid credit token minted by a pack purchase (advertised in the 402 body). Spends credits instead of a new transaction.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-X402-Receipt":{"description":"Present on responses settled on-chain via X-PAYMENT: an RS256 JWT receipt (tx_hash, payer_wallet, amount in USDC atomic units, pay_to, asset, resource, network, jti, exp) verifiable offline against /.well-known/jwks.json. Absent on credit spends and on the free lane.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"402":{"description":"Payment required. The body carries the exact terms in x402 form (accepts[]: amount, asset, payTo, network, the memo binding, and the resource's self-describing apiSchema). Call the resource bare to read them.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate limited; slow down."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":3,"maxLength":500,"description":"The question, 3-500 characters."}}}}}}}},"/api/agent/ledger":{"get":{"operationId":"ledger","summary":"The ledger: the complete receipted decision history plus measurement series, one export.","description":"Paid data product on the same x402 flow. GET bare returns the 402 terms.","parameters":[{"name":"X-PAYMENT","in":"header","required":false,"description":"A settled USDC payment on Solana, in the form the 402 body specifies (commit-reveal memo binding). One settled payment buys exactly one response; a reused transaction is refused.","schema":{"type":"string"}},{"name":"X-CREDIT-TOKEN","in":"header","required":false,"description":"A prepaid credit token minted by a pack purchase (advertised in the 402 body). Spends credits instead of a new transaction.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-X402-Receipt":{"description":"Present on responses settled on-chain via X-PAYMENT: an RS256 JWT receipt (tx_hash, payer_wallet, amount in USDC atomic units, pay_to, asset, resource, network, jti, exp) verifiable offline against /.well-known/jwks.json. Absent on credit spends and on the free lane.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"402":{"description":"Payment required. The body carries the exact terms in x402 form (accepts[]: amount, asset, payTo, network, the memo binding, and the resource's self-describing apiSchema). Call the resource bare to read them.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate limited; slow down."}}}},"/api/agent/rwa-registry-live":{"get":{"operationId":"rwaRegistryLive","summary":"Every certified tokenized RWA with a live market read for each, in one call.","description":"Paid data product on the same x402 flow. The registry list and single lookups are free elsewhere in this spec. GET bare returns the 402 terms.","parameters":[{"name":"X-PAYMENT","in":"header","required":false,"description":"A settled USDC payment on Solana, in the form the 402 body specifies (commit-reveal memo binding). One settled payment buys exactly one response; a reused transaction is refused.","schema":{"type":"string"}},{"name":"X-CREDIT-TOKEN","in":"header","required":false,"description":"A prepaid credit token minted by a pack purchase (advertised in the 402 body). Spends credits instead of a new transaction.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-X402-Receipt":{"description":"Present on responses settled on-chain via X-PAYMENT: an RS256 JWT receipt (tx_hash, payer_wallet, amount in USDC atomic units, pay_to, asset, resource, network, jti, exp) verifiable offline against /.well-known/jwks.json. Absent on credit spends and on the free lane.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"402":{"description":"Payment required. The body carries the exact terms in x402 form (accepts[]: amount, asset, payTo, network, the memo binding, and the resource's self-describing apiSchema). Call the resource bare to read them.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"429":{"description":"Rate limited; slow down."}}}},"/.well-known/jwks.json":{"get":{"operationId":"receiptKeys","summary":"The public key set that verifies X-X402-Receipt tokens.","description":"A JWKS (RFC 7517) with the RSA public key(s) receipts are signed with; kid in a receipt's header selects the key. Verify offline: RS256 over header.claims, then iss, aud, exp; the on-chain transaction the receipt names remains the source of truth.","responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}}}}}}