{"openapi":"3.1.0","info":{"title":"YieldSignal","version":"1.0.0","description":"Risk-weighted yield and risk intelligence for autonomous agents, paid per call via x402 — no API key, no signup. Six products: the raw signal (what pays best), the decision (is moving worth the cost), durability (how much of the yield survives if incentives stop), capacity (can you actually withdraw), sensitivity (how close the market is to the kink where borrow rates explode), and exposure (how much of a portfolio sits behind the same risk). Every report names what it could NOT establish rather than filling the gap with a guess.","license":{"name":"MIT","url":"https://github.com/Stakemate369/yieldsignal/blob/main/LICENSE"},"contact":{"email":"evanoaltar@gmail.com","url":"https://github.com/Stakemate369/yieldsignal/issues"}},"servers":[{"url":"https://yieldsignal.vercel.app"}],"externalDocs":{"description":"Source and verifiable-trust write-up","url":"https://github.com/Stakemate369/yieldsignal"},"x-x402":{"version":1,"network":"eip155:8453","asset":"USDC","payTo":"0x561143BFE9E2D975D92e915B8EfFEAa54119472a","accuracy":"https://yieldsignal.vercel.app/accuracy.json","trackRecord":"https://yieldsignal.vercel.app/track-record.json","agentCard":"https://yieldsignal.vercel.app/agent-card.json","mcp":"https://yieldsignal.vercel.app/mcp"},"paths":{"/signal/eth-staking-yield":{"get":{"summary":"Real-time risk-weighted ETH liquid staking APY on Ethereum mainnet: Lido/Rocket Pool/Coinbase Wrapped Staked ETH/Frax Ether/Binance Staked ETH via DefiLlama, source tagged per reading (never estimated)","description":"Real-time risk-weighted ETH liquid staking APY on Ethereum mainnet: Lido/Rocket Pool/Coinbase Wrapped Staked ETH/Frax Ether/Binance Staked ETH via DefiLlama, source tagged per reading (never estimated). Staking yield, not a Base lending market. EIP-712 signed by the payment-receiving address (see X-Signal-* headers). Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"signal_eth_staking_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.10 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/signal/usdc-base-yield":{"get":{"summary":"Real-time risk-weighted USDC lending APY on Base: Aave/Compound/Morpho read onchain, Moonwell/Euler/Fluid via DefiLlama, source tagged per reading (never estimated)","description":"Real-time risk-weighted USDC lending APY on Base: Aave/Compound/Morpho read onchain, Moonwell/Euler/Fluid via DefiLlama, source tagged per reading (never estimated). EIP-712 signed by the payment-receiving address (see X-Signal-* headers), which also holds an ERC-8004 identity and attests readings on-chain via EAS. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"signal_usdc_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.10 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/signal/weth-base-yield":{"get":{"summary":"Real-time risk-weighted WETH lending APY on Base: Aave/Compound/Morpho read onchain, Moonwell/Euler/Fluid via DefiLlama, source tagged per reading (never estimated)","description":"Real-time risk-weighted WETH lending APY on Base: Aave/Compound/Morpho read onchain, Moonwell/Euler/Fluid via DefiLlama, source tagged per reading (never estimated). EIP-712 signed by the payment-receiving address (see X-Signal-* headers), which also holds an ERC-8004 identity and attests readings on-chain via EAS. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"signal_weth_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.10 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/decision/eth-staking-yield":{"get":{"summary":"Buyer-side MOVE/HOLD decision for ETH liquid staking (Ethereum mainnet) — same contract as the lending decision routes, for ETH staking","description":"Buyer-side MOVE/HOLD decision for ETH liquid staking (Ethereum mainnet) — same contract as the lending decision routes, for ETH staking. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"decision_eth_staking_yield","parameters":[{"name":"position","in":"query","required":false,"schema":{"type":"string"},"description":"Protocol where your capital sits now, or 'idle' if uninvested."},{"name":"amountUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Position size in USD. Scales the gain and the break-even."},{"name":"moveCostUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Your estimated cost to move (gas + slippage), in USD."},{"name":"horizonDays","in":"query","required":false,"schema":{"type":"number"},"description":"Days you expect to hold before re-evaluating."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.50 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/decision/usdc-base-yield":{"get":{"summary":"Buyer-side MOVE/HOLD decision for USDC lending on Base: given your position (?position=), size (?amountUsd=), move cost (?moveCostUsd=) and horizon (?horizonDays=), returns whether moving to the best risk-adjusted protocol pays for itself — with expected net gain, break-even days and a confidence tier","description":"Buyer-side MOVE/HOLD decision for USDC lending on Base: given your position (?position=), size (?amountUsd=), move cost (?moveCostUsd=) and horizon (?horizonDays=), returns whether moving to the best risk-adjusted protocol pays for itself — with expected net gain, break-even days and a confidence tier. Sells the decision, not the raw datapoint. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"decision_usdc_base_yield","parameters":[{"name":"position","in":"query","required":false,"schema":{"type":"string"},"description":"Protocol where your capital sits now, or 'idle' if uninvested."},{"name":"amountUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Position size in USD. Scales the gain and the break-even."},{"name":"moveCostUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Your estimated cost to move (gas + slippage), in USD."},{"name":"horizonDays","in":"query","required":false,"schema":{"type":"number"},"description":"Days you expect to hold before re-evaluating."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.50 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/decision/weth-base-yield":{"get":{"summary":"Buyer-side MOVE/HOLD decision for WETH lending on Base — same contract as the USDC decision route, for WETH","description":"Buyer-side MOVE/HOLD decision for WETH lending on Base — same contract as the USDC decision route, for WETH. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"decision_weth_base_yield","parameters":[{"name":"position","in":"query","required":false,"schema":{"type":"string"},"description":"Protocol where your capital sits now, or 'idle' if uninvested."},{"name":"amountUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Position size in USD. Scales the gain and the break-even."},{"name":"moveCostUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Your estimated cost to move (gas + slippage), in USD."},{"name":"horizonDays","in":"query","required":false,"schema":{"type":"number"},"description":"Days you expect to hold before re-evaluating."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.50 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/durability/usdc-base-yield":{"get":{"summary":"How much of the USDC lending APY on Base survives if incentives stop: per-protocol base-vs-reward split, the post-incentive floor, and whether the leader changes without incentives","description":"How much of the USDC lending APY on Base survives if incentives stop: per-protocol base-vs-reward split, the post-incentive floor, and whether the leader changes without incentives. Derived only from reported/inferred reward components already read — sources that do not itemize are listed as undecomposable, never assumed incentive-free. A stress test of current readings, not a date forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"durability_usdc_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/durability/weth-base-yield":{"get":{"summary":"How much of the WETH lending APY on Base survives if incentives stop — same contract as the USDC durability route, for WETH","description":"How much of the WETH lending APY on Base survives if incentives stop — same contract as the USDC durability route, for WETH. Undecomposable sources are named, never assumed incentive-free. Stress test of current readings, not a date forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"durability_weth_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/capacity/usdc-base-yield":{"get":{"summary":"Exit capacity for USDC lending on Base: per-protocol utilization and withdrawable liquidity read from the protocol's own books (Aave, Compound), plus whether your size (?amountUsd=) can be withdrawn right now and what share of the market it would be","description":"Exit capacity for USDC lending on Base: per-protocol utilization and withdrawable liquidity read from the protocol's own books (Aave, Compound), plus whether your size (?amountUsd=) can be withdrawn right now and what share of the market it would be. Protocols that do not expose borrowed-vs-supplied are marked unmeasured, never assumed liquid. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"capacity_usdc_base_yield","parameters":[{"name":"amountUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Position size in USD to test for exit. Omit for utilization and free liquidity without a verdict."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/capacity/weth-base-yield":{"get":{"summary":"Exit capacity for WETH lending on Base — same contract as the USDC capacity route","description":"Exit capacity for WETH lending on Base — same contract as the USDC capacity route. Utilization is reported for every measured protocol; USD figures are omitted for WETH (no price oracle in the paid path), so size verdicts need the USDC route. Unmeasured protocols are named, never assumed liquid. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"capacity_weth_base_yield","parameters":[{"name":"amountUsd","in":"query","required":false,"schema":{"type":"number"},"description":"Position size in USD to test for exit. Omit for utilization and free liquidity without a verdict."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/sensitivity/usdc-base-yield":{"get":{"summary":"How close USDC lending on Base is to the kink where borrow rates explode: per-protocol utilization, the kink read from the protocol's own rate curve, headroom in bps, and borrow APY at points around it","description":"How close USDC lending on Base is to the kink where borrow rates explode: per-protocol utilization, the kink read from the protocol's own rate curve, headroom in bps, and borrow APY at points around it. Aave and Compound only — Morpho's adaptive IRM has no static curve and DefiLlama-sourced protocols expose none, so they are marked unmeasured, never assumed stable. Describes state, not a forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"sensitivity_usdc_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/sensitivity/weth-base-yield":{"get":{"summary":"How close WETH lending on Base is to the kink where borrow rates explode — same contract as the USDC sensitivity route","description":"How close WETH lending on Base is to the kink where borrow rates explode — same contract as the USDC sensitivity route. Aave and Compound only; protocols without a readable curve are marked unmeasured, never assumed stable. Describes state, not a forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"sensitivity_weth_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/exposure/usdc-base-yield":{"get":{"summary":"Shared risk exposure across declared positions: pass ?positions=aave:200000,morpho:150000 and get, per factor, how much capital sits behind the same collateral, oracle or curator, and via which venues","description":"Shared risk exposure across declared positions: pass ?positions=aave:200000,morpho:150000 and get, per factor, how much capital sits behind the same collateral, oracle or curator, and via which venues. Morpho is attributed per isolated market, Compound by its real posted-collateral basket; Aave is unattributed because a v3 supplier is exposed to the whole pool, never split across assets. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"exposure_usdc_base_yield","parameters":[{"name":"positions","in":"query","required":true,"schema":{"type":"string"},"description":"REQUIRED. Positions as comma-separated protocol:usd pairs, e.g. aave:200000,morpho:150000. Known protocols: aave, morpho, compound, moonwell, euler, fluid."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/exposure/weth-base-yield":{"get":{"summary":"Shared risk exposure across declared WETH positions — same contract as the USDC exposure route","description":"Shared risk exposure across declared WETH positions — same contract as the USDC exposure route. Pass ?positions=aave:100000,morpho:50000. Protocols whose collateral composition cannot be established are reported unattributed with the reason, never split across assets to imply diversification. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"exposure_weth_base_yield","parameters":[{"name":"positions","in":"query","required":true,"schema":{"type":"string"},"description":"REQUIRED. Positions as comma-separated protocol:usd pairs, e.g. aave:200000,morpho:150000. Known protocols: aave, morpho, compound, moonwell, euler, fluid."}],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $0.25 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/persistence/eth-staking-yield":{"get":{"summary":"How long an ETH liquid staking leadership call actually holds — same contract as the lending persistence routes","description":"How long an ETH liquid staking leadership call actually holds — same contract as the lending persistence routes. Median lead duration, survival at 6/24/72h, and the round-trip share of leader rotation. Observed history with sample sizes, never a forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"persistence_eth_staking_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $1.00 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/persistence/usdc-base-yield":{"get":{"summary":"How long a USDC leadership call actually holds, from hourly on-chain attestations (EAS): median lead duration, survival at 6/24/72h, how much of the rotation is the same two protocols trading places, and what chasing the leader is worth per $10k before gas","description":"How long a USDC leadership call actually holds, from hourly on-chain attestations (EAS): median lead duration, survival at 6/24/72h, how much of the rotation is the same two protocols trading places, and what chasing the leader is worth per $10k before gas. Also reports whether a wider lead lasts longer — measured, and it does not. Observed history with sample sizes, never a forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"persistence_usdc_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $1.00 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}},"/persistence/weth-base-yield":{"get":{"summary":"How long a WETH leadership call actually holds — same contract as the USDC persistence route","description":"How long a WETH leadership call actually holds — same contract as the USDC persistence route. Where the lead has not changed in the observed window, the duration is reported as a floor with a censoring flag, never as a median. Observed history with sample sizes, never a forecast. Verified per-asset accuracy is free at /accuracy.json; raw on-chain attestations at /track-record.","operationId":"persistence_weth_base_yield","parameters":[],"responses":{"200":{"description":"Paid response. Signed as EIP-712 typed data by the payTo address; see the X-Signal-Signature, X-Signal-Signer and X-Signal-Eip712-Payload headers.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid query parameter. The message names the parameter and the accepted format."},"402":{"description":"Payment required — $1.00 USDC on Base (eip155:8453) via x402. Any x402-compatible client settles it automatically."},"503":{"description":"Temporary failure reading market data."}}}}}}