{"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/prepare-launch":{"get":{"operationId":"prepare_token_launch","summary":"Draft a Bags token launch with VaultBags preconfigured: a launcher link a person finishes and signs.","description":"Draft a Bags token launch with VaultBags preconfigured: a launcher link a person finishes and signs. 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":"name","in":"query","required":true,"description":"Token name, 1 to 32 characters.","schema":{"type":"string"}},{"name":"symbol","in":"query","required":true,"description":"Ticker, 1 to 10 letters or digits (a leading $ is dropped).","schema":{"type":"string"}},{"name":"description","in":"query","required":true,"description":"What the token is, 1 to 1000 characters.","schema":{"type":"string"}},{"name":"website","in":"query","required":false,"description":"Optional https address.","schema":{"type":"string"}},{"name":"twitter","in":"query","required":false,"description":"Optional X handle or profile address.","schema":{"type":"string"}}]}},"/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, decision receipts, and what each asset's issuer can do to it.","description":"Reserve wallets, certified issuers, live on-chain balances, decision receipts, and what each asset's issuer can do to 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/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"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"x402 v2 standard lane: base64 JSON PaymentPayload (x402Version 2, the accepted requirement copied from the PAYMENT-REQUIRED header, and payload.transaction, the USDC transfer signed but not sent). Verified by the facilitator against these terms before the work starts and sent only once the response is ready.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-X402-Receipt":{"description":"Present on responses settled on-chain via X-PAYMENT or PAYMENT-SIGNATURE: an RS256 JWT receipt (tx_hash, payer_wallet, amount in USDC atomic units, pay_to, asset, resource, network, jti, exp, and delivery: question_sha256 + answer_sha256 + tools read for an answer, with tools_incomplete when a read could not be named, content_sha256 of the canonicalized body for an export) verifiable offline against /.well-known/jwks.json. Absent on credit spends and on the free lane.","schema":{"type":"string"}},"PAYMENT-RESPONSE":{"description":"Present on responses paid via PAYMENT-SIGNATURE: base64 JSON settlement result (success, transaction, network, payer).","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.","headers":{"PAYMENT-REQUIRED":{"description":"The same terms in the x402 v2 standard, base64 JSON: accepts[] with scheme exact, the Solana mainnet network, USDC, amount, payTo and the facilitator's feePayer. Read by any x402 v2 client.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"409":{"description":"PAYMENT-SIGNATURE only: this payment cannot buy this request. It is being processed by another request (wait for that one), it already bought its response, it was made for another resource, or it was tried too many times without an answer (nothing was charged then). Answered without a payment request, so a client is never prompted to pay again for the same thing."},"429":{"description":"Rate limited; slow down."},"503":{"description":"The payment could not be processed right now, or its settlement is still landing on Solana. Retry the same request with the same payment (X-PAYMENT, or the same PAYMENT-SIGNATURE) after Retry-After; it is never charged twice, so never pay again for it."}},"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"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"x402 v2 standard lane: base64 JSON PaymentPayload (x402Version 2, the accepted requirement copied from the PAYMENT-REQUIRED header, and payload.transaction, the USDC transfer signed but not sent). Verified by the facilitator against these terms before the work starts and sent only once the response is ready.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-X402-Receipt":{"description":"Present on responses settled on-chain via X-PAYMENT or PAYMENT-SIGNATURE: an RS256 JWT receipt (tx_hash, payer_wallet, amount in USDC atomic units, pay_to, asset, resource, network, jti, exp, and delivery: question_sha256 + answer_sha256 + tools read for an answer, with tools_incomplete when a read could not be named, content_sha256 of the canonicalized body for an export) verifiable offline against /.well-known/jwks.json. Absent on credit spends and on the free lane.","schema":{"type":"string"}},"PAYMENT-RESPONSE":{"description":"Present on responses paid via PAYMENT-SIGNATURE: base64 JSON settlement result (success, transaction, network, payer).","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.","headers":{"PAYMENT-REQUIRED":{"description":"The same terms in the x402 v2 standard, base64 JSON: accepts[] with scheme exact, the Solana mainnet network, USDC, amount, payTo and the facilitator's feePayer. Read by any x402 v2 client.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"409":{"description":"PAYMENT-SIGNATURE only: this payment cannot buy this request. It is being processed by another request (wait for that one), it already bought its response, it was made for another resource, or it was tried too many times without an answer (nothing was charged then). Answered without a payment request, so a client is never prompted to pay again for the same thing."},"429":{"description":"Rate limited; slow down."},"503":{"description":"The payment could not be processed right now, or its settlement is still landing on Solana. Retry the same request with the same payment (X-PAYMENT, or the same PAYMENT-SIGNATURE) after Retry-After; it is never charged twice, so never pay again for it."}}}},"/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"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"description":"x402 v2 standard lane: base64 JSON PaymentPayload (x402Version 2, the accepted requirement copied from the PAYMENT-REQUIRED header, and payload.transaction, the USDC transfer signed but not sent). Verified by the facilitator against these terms before the work starts and sent only once the response is ready.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"X-X402-Receipt":{"description":"Present on responses settled on-chain via X-PAYMENT or PAYMENT-SIGNATURE: an RS256 JWT receipt (tx_hash, payer_wallet, amount in USDC atomic units, pay_to, asset, resource, network, jti, exp, and delivery: question_sha256 + answer_sha256 + tools read for an answer, with tools_incomplete when a read could not be named, content_sha256 of the canonicalized body for an export) verifiable offline against /.well-known/jwks.json. Absent on credit spends and on the free lane.","schema":{"type":"string"}},"PAYMENT-RESPONSE":{"description":"Present on responses paid via PAYMENT-SIGNATURE: base64 JSON settlement result (success, transaction, network, payer).","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.","headers":{"PAYMENT-REQUIRED":{"description":"The same terms in the x402 v2 standard, base64 JSON: accepts[] with scheme exact, the Solana mainnet network, USDC, amount, payTo and the facilitator's feePayer. Read by any x402 v2 client.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"409":{"description":"PAYMENT-SIGNATURE only: this payment cannot buy this request. It is being processed by another request (wait for that one), it already bought its response, it was made for another resource, or it was tried too many times without an answer (nothing was charged then). Answered without a payment request, so a client is never prompted to pay again for the same thing."},"429":{"description":"Rate limited; slow down."},"503":{"description":"The payment could not be processed right now, or its settlement is still landing on Solana. Retry the same request with the same payment (X-PAYMENT, or the same PAYMENT-SIGNATURE) after Retry-After; it is never charged twice, so never pay again for it."}}}},"/.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}}}}}}}}}}}}