{"path":"/lp-pool-apr","service_name":"Lp Pool Apr","method":"POST","allowed_methods":["POST"],"category":"DeFi & Markets Data","class":"read-only","summary":"Uniswap pool fee, incentive and total APR with one-hour caching, source and original observation age.","description":"Read fee APR, provider-advertised incentive APR and total APR for an exact Uniswap V3/V4 pool on Robinhood Chain (4663). Successful observations stay CURRENT for one hour, capped by incentive expiry; failed refreshes retain last-good figures as STALE for up to 24 hours with their original age and component timestamps. Rates are percentage points and pool statistics, not personal earnings or token/hook approval. Independent of NFT reads. $0.001 USDC on Base per call.","schema":{"params":null,"body":{"type":"object","description":"Exact provider-bound pool identity. Tokens must be distinct and sorted numerically; V3 uses a 20-byte pool address and zero hook, V4 a 32-byte PoolId. Identity matching is not a token or hook safety approval.","properties":{"chainId":{"const":4663},"protocol":{"enum":["uniswap-v3","uniswap-v4"]},"poolId":{"type":"string","pattern":"^0x(?:[0-9a-fA-F]{40}|[0-9a-fA-F]{64})$"},"token0":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"token1":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"hook":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"}},"required":["chainId","protocol","poolId","token0","token1","hook"],"additionalProperties":false,"allOf":[{"if":{"properties":{"protocol":{"const":"uniswap-v3"}}},"then":{"properties":{"poolId":{"pattern":"^0x[0-9a-fA-F]{40}$"},"hook":{"const":"0x0000000000000000000000000000000000000000"}}},"else":{"properties":{"poolId":{"pattern":"^0x[0-9a-fA-F]{64}$"}}}}]},"note":"Request schema derived from the Otto catalog -- not output-measured."},"sample_output":null,"cost":{"price_usd":0.001,"pricing_mode":"fixed","currency":"USDC","pricing_note":"Indicative. The live 402 PAYMENT-REQUIRED header is the single source of truth -- set maxPayment from it, never from this map.","settlement_note":"Settlement is on success only: a 4xx/5xx response is not settled, so a rejected or failed call does not charge you. (A 200 that returns an error body still settles.)"},"auth":{"type":"x402","note":"Pay per call in USDC via x402 V2 (EIP-3009 or Permit2). The networks THIS route accepts are in its own 402 accepts[] (returned in both the PAYMENT-REQUIRED header and the 402 JSON body): USDC on Base is accepted on every route, Solana only where that route lists it."},"signals":[{"id":"otto-money-back-guarantee","type":"guarantee","summary":"Money-back guarantee on Otto's own services: if a paid result misses, request a refund via /feedback with the payment tx_hash ($0.01 per tx, up to 10×/day system cap). Otto's own services and Full Auto only -- not third-party Bazaar picks.","status":"active","last_verified":"2026-07-01"},{"id":"otto-first-party","type":"characteristic","summary":"Served by an Otto-operated agent backend (first-party), not a re-listed third-party marketplace endpoint.","status":"active","last_verified":"2026-07-01"},{"id":"required-param-400","type":"gotcha","summary":"Requires a specific parameter -- omitting it returns HTTP 400. A 4xx is not settled, so a rejected call is not charged; read the request schema before paying.","status":"derived","last_verified":"2026-07-01"}],"patterns":[],"measured":{"quality_score":null,"uptime_pct":null,"measured_at":null,"note":"Not yet measured by the QA crawler -- quality/uptime stay null, never fabricated."},"catalog_hash":"65e99933815db934f46db339d84d836f71960b537d415ead061b31aea304d2a9","snapshot_generated_at":"2026-09-21T09:07:27.998Z","you_were_not_charged":true}