{
  "name": "Otto Intelligence",
  "description": "Otto AI's live x402 intelligence services for Wallet MCP (formerly Base MCP) — market alpha, KOL sentiment, yield discovery, token security, and AI research. Paid per call from Coinbase Wallet in USDC on Base.",
  "version": "1.0.0",
  "license": "MIT",
  "publisher": "Otto AI",
  "twitter": "@useOttoAI",
  "skill": "https://x402.ottoai.services/otto.md",
  "baseUrl": "https://x402.ottoai.services",
  "permissions": {
    "network": [
      "fetch:https://x402.ottoai.services"
    ],
    "signing": "none",
    "custody": "non-custodial",
    "note": "Read-only. The skill itself signs nothing and holds no keys; the user approves each x402 payment in Coinbase Wallet via Wallet MCP. Reached only through Wallet MCP's x402 payment tools — no web_request allowlist entry required."
  },
  "payment": {
    "protocol": "x402",
    "version": 2,
    "asset": "USDC",
    "chain": "eip155:8453",
    "chainName": "Base",
    "baseMcpTools": [
      "initiate_x402_request",
      "complete_x402_request"
    ],
    "siwx": {
      "scope": "select-read-endpoints-only",
      "eligibilityField": "endpoints[].access",
      "eligibleValue": "siwx-eligible",
      "payPerCallOnlyValue": "pay-per-call-only",
      "note": "Only rows marked siwx-eligible may use wallet-signature re-access; pay-per-call-only rows require a new x402 payment on every call. The live 402 challenge remains authoritative."
    },
    "priceSource": "Prices in this catalog are INDICATIVE. The live 402 challenge (PAYMENT-REQUIRED header) is the single source of truth — always set maxPayment from it, never from this file."
  },
  "note": "Direct swap/bridge/perps execution endpoints are intentionally excluded — paying an x402 endpoint signs a payment, not the underlying financial action. Act on Otto's intelligence with Wallet MCP's native execution plugins (Uniswap/Aerodrome/Morpho/Moonwell/Avantis) or its wallet tools. For a live hands-off option, the x402 Open Router's Full Auto (POST /full-auto) pays the best-matched Otto service on your behalf at-cost + a $0.001 router fee (upto cap, no prepay). The owner-activation endpoints for the user-owned Safe rail are retired (useotto.xyz/api/eal/arm and /api/eal/prepare both return 404, verified 2026-09-01). On Otto's own /app the connected wallet is the Safe's sole owner and an installed trading permission gives the Otto trading operator general authority over the deposited balance until that permission's expiry or the owner's revocation, whichever comes first. EAL auto-pay remains disabled.",
  "endpoints": [
    {
      "path": "/crypto-news",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Importance-ranked crypto headlines with per-article source links and publish times, plus a sentiment-scored market brief, from Otto's own news engine. Regenerated hourly over a 6h look-back (widened to 12/24h on a quiet window — the report states the period it covers); `meta` carries the snapshot's build time, its age in seconds and a fresh/stale verdict against that cadence.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/twitter-summary",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Quick pulse check from crypto Twitter. Breaking news, trending narratives, and sentiment shifts at a glance.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/filtered-news",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "AI-filtered crypto news and Twitter search for non-token topics (airdrops, DeFi trends, etc). Max 2 words.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "topic": "string"
      }
    },
    {
      "path": "/token-details",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Token price, market cap, volume, supply, and basic metrics. Works for any listed token.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "symbol": "string"
      }
    },
    {
      "path": "/token-alpha",
      "method": "GET",
      "price": "0.005",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Premium token intelligence: price metrics, news, Twitter sentiment, and futures data. Find out why your token is moving.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "symbol": "string"
      }
    },
    {
      "path": "/kol-sentiment",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Sentiment and token mentions from an Otto-curated crypto-KOL feed. Real trading signals, trending token picks, and sentiment from influencers who move markets.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/trending-altcoins",
      "method": "GET",
      "price": "0.002",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Top 3 hottest altcoins traders may want to ape into, based on news and Twitter analysis. DYOR.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/mega-report",
      "method": "GET",
      "price": "0.05",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Alpha & Intel Report — daily crypto market intelligence: headlines, Twitter sentiment, KOL alpha, trending altcoins, and yield opportunities in one report.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/token-security",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Market & Token Intelligence",
      "description": "Token security scanner — is this token safe to buy? Honeypot, rug-pull, and scam detection for any token contract — flags can't-sell traps, hidden mints, malicious buy/sell taxes, and holder concentration. Powered by GoPlus across 8 chains.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "address": "string",
        "chain": "chainId"
      }
    },
    {
      "path": "/funding-rates",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "DeFi & Markets Data",
      "description": "Cross-venue funding-rate arbitrage + crowded-positioning radar: live perp funding rates, open interest, global & top-trader long/short ratios, whale positions, and liquidations across Binance, OKX, Bybit, Hyperliquid, and more. Omit symbol for the whole-market overview; pass one (e.g. BTC) for the per-exchange breakdown. (Hyperliquid-only perp data: use hyperliquid-market.)",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "symbol": "string (optional)"
      }
    },
    {
      "path": "/defi-analytics",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "DeFi & Markets Data",
      "description": "Where DeFi capital is flowing — TVL rankings, fastest-growing vs bleeding protocols, chain-by-chain breakdown, and per-protocol deep dives. Track capital rotation and protocol health. Powered by DefiLlama.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "protocol": "string (optional)"
      }
    },
    {
      "path": "/tradfi-data",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "DeFi & Markets Data",
      "description": "TradFi macro intelligence: indices, VIX, DXY, treasury yields, commodities, and individual stock quotes with moving average context.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "symbol": "string (optional)"
      }
    },
    {
      "path": "/yield-alpha",
      "method": "GET",
      "price": "0.002",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "DeFi & Markets Data",
      "description": "Best DeFi yield opportunities across stablecoins, ETH, and BTC with risk ratings and APY comparisons.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/yield-markets",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "DeFi & Markets Data",
      "description": "DeFi yield farming markets with live APYs across Aave V3 and Morpho on Base, Ethereum, and other major chains. Find the best stablecoin yield (USDC) and ETH yield for idle capital: returns supply APY, TVL, and vault/market addresses per token, filterable by protocol, chain, or token symbol. Compare DeFi yield rates across lending markets and vaults before depositing.",
      "networks": [
        "base"
      ]
    },
    {
      "path": "/yield-recommendations",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Best-available stablecoin deposit venues ranked by net supply APY — Otto's yield-copilot reads supported on-chain lending markets directly and returns the top deployable venue per stablecoin (protocol, chain, APY, deposit target). Best-available across the market, not wallet-personalized.",
      "networks": [
        "base"
      ],
      "params": {
        "userAddress": "address"
      }
    },
    {
      "path": "/llm-research",
      "method": "POST",
      "price": "0.10",
      "class": "compute",
      "access": "pay-per-call-only",
      "category": "AI Creative & Tools",
      "description": "Instant AI research on any topic powered by Gemini 3.5 Flash, using live Google Search grounding when available. Answers list the sources search returned; some, such as a no-search fallback, may have none. Ask about science, tech, crypto, history, or anything else. Can analyze images and summarize webpages from URLs. Max 180 character prompts. $0.10 per query.",
      "networks": [
        "base",
        "solana"
      ],
      "body": {
        "prompt": "string (<=180 chars)"
      }
    },
    {
      "path": "/tx-explainer",
      "method": "POST",
      "price": "0.01",
      "class": "compute",
      "access": "pay-per-call-only",
      "category": "AI Creative & Tools",
      "description": "Decode and explain any EVM blockchain transaction across 11 chains (Base, Ethereum, Arbitrum, Optimism, Avalanche, Polygon, Mantle, Monad, Plasma, BSC, Hyperliquid). Get a human-readable summary of swaps, transfers, approvals, DeFi interactions, and more.",
      "networks": [
        "base",
        "solana"
      ],
      "body": {
        "txHash": "0x...",
        "chain": "string"
      }
    },
    {
      "path": "/generate-meme",
      "method": "POST",
      "price": "0.15",
      "class": "compute",
      "access": "pay-per-call-only",
      "category": "AI Creative & Tools",
      "description": "AI image generation and editing via fal.ai, including memes. model: gpt-image-2 (default) | nano-banana-pro; anything else -> 400. Flat $0.15 per image. Supports image editing via public image URL.",
      "networks": [
        "base",
        "solana"
      ],
      "body": {
        "prompt": "string",
        "model": "gpt-image-2|nano-banana-pro",
        "aspect_ratio": "string"
      }
    },
    {
      "path": "/portfolio",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Multi-chain portfolio snapshot with token balances and yield positions for a user's Otto AI Safe accounts across Base, Ethereum, Arbitrum, Polygon, BSC, Avalanche, and Solana.",
      "networks": [
        "base"
      ],
      "params": {
        "userId": "address"
      }
    },
    {
      "path": "/transaction-history",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Trade and transaction history for a user's Otto AI Safe account — swaps, bridges, deposits, withdrawals with timestamps and explorer links.",
      "networks": [
        "base"
      ],
      "params": {
        "userId": "address"
      }
    },
    {
      "path": "/supported-tokens",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Search supported ERC-20 tokens by symbol or address across 6 chains (Base, Ethereum, Arbitrum, Polygon, BSC, Avalanche). 5000+ tokens from CoinGecko. Use before swap/bridge to disambiguate tokens.",
      "networks": [
        "base"
      ],
      "params": {
        "chainId": "id",
        "search": "symbol"
      }
    },
    {
      "path": "/hyperliquid-account",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Read-only legacy Hyperliquid recovery snapshot with existing positions, margin, collateral and active orders. Otto Hyperliquid trading is retired; this read does not enable new trades or deposits.",
      "networks": [
        "base"
      ],
      "params": {
        "address": "address"
      }
    },
    {
      "path": "/hyperliquid-market",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "DeFi & Markets Data",
      "description": "Hyperliquid perpetuals market data: live mark/oracle price, funding rate, open interest, max leverage, and size specs for any tradable asset.",
      "networks": [
        "base"
      ],
      "params": {
        "asset": "string"
      }
    },
    {
      "path": "/hl-transaction-history",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Hyperliquid perpetual trading history: fills, funding payments, and realized PnL per position.",
      "networks": [
        "base"
      ],
      "params": {
        "address": "address"
      }
    },
    {
      "path": "/yield-farming-active",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Active yield farming positions for a user across Aave V3 and Morpho on all supported chains, with live APY and accrued interest.",
      "networks": [
        "base"
      ],
      "params": {
        "userAddress": "address"
      }
    },
    {
      "path": "/yield-farming-historical",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "siwx-eligible",
      "category": "Portfolio & Accounts",
      "description": "Historical (closed) yield farming positions for a user across all protocols and chains, with realized yield and exit timestamps.",
      "networks": [
        "base"
      ],
      "params": {
        "userAddress": "address"
      }
    },
    {
      "path": "/stablecoin-watch",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Is USDC/USDT/DAI holding its $1 peg, and is stablecoin supply growing or shrinking (risk-on vs risk-off)? Live peg deviation (bps), circulating supply + 1d/7d/30d flow, market dominance and chain spread for the top 30 USD stablecoins, plus downside depeg alerts for any coin trading >0.5% below peg. Sourced from DefiLlama (public). Served from a cached snapshot while fresh (≤1h) and regenerated on demand when a read finds it stale.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/protocol-revenue-leaders",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Which protocols earn the most — and who is accelerating? Top 30 DeFi protocols by 24h fees, each with revenue, take-rate (the cut the protocol keeps vs fees users pay), 7d/30d trend and category, plus total DeFi fees & revenue. A fundamentals screen (fee/revenue economics), distinct from TVL. Sourced from DefiLlama (public). Served from a cached snapshot while fresh (DefiLlama fees are daily aggregates) and regenerated on demand when a read finds it stale.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/equity-intel",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "SEC filings and company fundamentals by US-listed ticker: revenue, net income, YoY growth, margin, EPS, assets, liabilities, leverage and cash, plus recent 10-K, 10-Q and 8-K filing links and an AI analysis. SEC EDGAR source; a ticker with no USD issuer fundamentals (funds, non-USD-only or stale filers) is refused with a 404, uncharged. Fundamentals and filing research, not a stock-price feed.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "ticker": "US stock ticker, e.g. NVDA, AAPL, JPM"
      }
    },
    {
      "path": "/base-season",
      "method": "GET",
      "price": "0.002",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Market & Token Intelligence",
      "description": "Base social intelligence: a current Base sentiment summary + the quality-screened Base tokens (CoinGecko-listed, market-cap/age/liquidity gated) that are catching attention on Base — each row labelled with the basis it stands on (`rankedBy`: measured trusted-KOL signal, or the on-chain screen plus open engagement), with per-token KOL mention counts and verbatim quotes where a KOL is actually behind it. Every tweet and quote served is inside a published recency window (`evidenceWindowDays`), and the board publishes its own coverage arithmetic. Includes the overall crypto-KOL market-sentiment backdrop, with an explicit reason when that leg is unavailable. The social-intelligence wedge for Base — who is saying it, not who pumped. Served from a cached snapshot while fresh (≤1h) and regenerated on demand when a read finds it stale.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/news-recaps",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Market & Token Intelligence",
      "description": "A tight 4-6 sentence crypto market recap an agent can ingest whole: overall direction and why, the 2-3 developments that matter, and anything notable on the top-10 board — distilled on demand (served while fresh, ≤1h) from the same live news engine behind Otto's top-ranked /crypto-news feed. The one-paragraph state-of-market; buy /crypto-news when you want the full report. Beside the prose, stories[] carries the ranked board as named typed fields — rank, title, whyItMatters, url, publishedAt, source (linked to the window's source articles by exact title; null when unmatched, never a guessed link) — with storiesStatus / articlesStatus and the analysis window, so an agent parses the same shape /crypto-news sells instead of regexing the board.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/base-ecosystem-news",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Market & Token Intelligence",
      "description": "Base-chain ecosystem news for Base-native agents, not the general crypto firehose. Up to 12 Base-scoped headlines from the last 48h, each with its own permalink and publication timestamp, screened against the general /crypto-news feed; `screen` states what was dropped. The AI topic read is optional and is withheld, never padded with macro, when there is no Base coverage. Refreshed hourly from cache; a read past the freshness window pulls inline.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/token-fundamentals",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Market & Token Intelligence",
      "description": "Structured token fundamentals by ticker symbol (resolves to the top-market-cap asset matching it): price, market cap, FDV, rank, 24h volume, full supply breakdown (circulating/total/max), ATH + drawdown from ATH, ATL + recovery, ROI windows (24h/7d/30d/60d/1y), categories, and project links — clean JSON an agent can consume field-by-field. Fundamentals snapshot, not a streaming price feed.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "symbol": "Token ticker symbol, e.g. BTC — resolves to the highest-market-cap exact match"
      }
    },
    {
      "path": "/pools-search",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Search DEX pools across Base, Ethereum, Solana, Polygon, BSC, Arbitrum, Optimism and Avalanche by token symbol, name, or contract address. Returns pool address, DEX, price USD, 24h volume, liquidity (TVL), FDV, 24h price change and 24h txns as flat JSON numbers — no nested joins. Pool search, pool finder, DEX pools, liquidity pools, onchain pool lookup. $0.001 per call.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "query": "Token symbol, name, or contract address to find pools for, e.g. WETH"
      }
    },
    {
      "path": "/token-price",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Market & Token Intelligence",
      "description": "Live DEX token price in USD by ticker symbol or contract address across Base, Ethereum, Solana, Polygon, BSC, Arbitrum, Optimism and Avalanche (bare 0x tries Base then all chains, else network:address). Symbols resolve to the canonical top-market-cap asset — squat-proof. Flat JSON: price, 24h change, volume, market cap, FDV, liquidity — echoes the matched deployment. Token price, crypto price, DEX price. $0.001 per call.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "token": "Ticker symbol (resolves to the canonical top-market-cap asset), 0x contract address (Base default), or network:address"
      }
    },
    {
      "path": "/pools-trending",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Trending DEX pools right now — Base, Ethereum, Solana, Polygon, BSC, Arbitrum, Optimism, Avalanche, or network=all for cross-chain across those same 8. Top 10 hottest pools ranked by GeckoTerminal 24h trending: pool address, DEX, price USD, 24h price change, 24h volume, liquidity (TVL), FDV, 24h txns as flat JSON numbers. Trending pools, hot pools, top movers, momentum screener, what is pumping. $0.001 per call.",
      "networks": [
        "base",
        "solana"
      ],
      "params": {
        "network": "Network slug (base, ethereum, solana, polygon, bsc, arbitrum, optimism, avalanche) or 'all' for cross-network"
      }
    },
    {
      "path": "/dns-lookup",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Resolve any domain in one call: A/AAAA, MX, NS, CNAME, SOA and TXT records, plus parsed email-auth posture — SPF policy, DMARC policy, and detected DKIM selectors. A drop-in nslookup/dig replacement for agents, resolved over DNS-over-HTTPS (DoH) with redundant resolvers and automatic failover. Keyless, pay-per-call, structured JSON.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/whois-lookup",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Registration data for any domain, straight from authoritative RDAP registries (the structured WHOIS successor): registrar, ICANN/EPP domain status codes, creation, last-updated and expiration dates, authoritative nameservers, and DNSSEC delegation. The fast, license-clean way for an agent to vet a domain, sender, or counterparty. Keyless, structured JSON, pay-per-call.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/domain-age",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Domain age and registration intel from authoritative RDAP/WHOIS records: exact creation date, age in days and years, expiration date and days-until-expiry. The fast trust and risk signal agents use to vet a counterparty, link, or sender and to flag newly-registered or soon-to-expire domains. Returns structured JSON, keyless, pay-per-call. ccTLDs without RDAP return an uncharged 503.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/domain-report",
      "method": "GET",
      "price": "0.02",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "One call returns the full domain profile for vetting, deliverability, or phishing/fraud checks: live DNS (A/MX/NS + record counts), RDAP/WHOIS registration (registrar, domain age, expiry, status, DNSSEC) and email authentication (SPF, DMARC policy, detected DKIM selectors) — plus a one-line summary. Bundles three lookups into one hourly-fresh read. Keyless, license-clean, pay-per-call.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/web-extract",
      "method": "GET",
      "price": "0.005",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Turn any URL into clean, LLM-ready markdown — the main article extracted, nav/ads/boilerplate stripped, plus title, description and publish date. Renders JavaScript pages, articles, docs and PDFs. A keyless, pay-per-call web reader for agents that read the web on demand: RAG ingestion, research and summarization. Structured JSON, cached by URL for fast repeat reads.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/web-links",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Extract all links (hrefs) from any web page as structured JSON — every internal, external and anchor link, deduplicated, returned with a total count. Renders the page in a real headless browser, so it captures links injected after JavaScript runs that fetch-only scrapers miss. For crawling, sitemap building, link audits and site-structure mapping. Keyless, pay-per-call.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/web-json-extract",
      "method": "GET",
      "price": "0.005",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Turn any URL into clean structured JSON for AI agents and RAG. An LLM reads the fully rendered page (JavaScript executed, SPAs included) and returns its title, a 1-2 sentence summary, key entities (people, orgs, products), and any prices, dates or notable numbers — even on pages with no schema.org or JSON-LD markup, no CSS selectors or schema to write. Just pass a URL. Keyless, pay-per-call.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/fx-rates",
      "method": "GET",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Real-World Data",
      "description": "Live + reference foreign-exchange (forex) rates, base USD. LIVE near-real-time mid quotes for the 12 most-traded currencies (EUR, GBP, JPY, CHF, CAD, AUD, NZD, CNY, HKD, SGD, SEK, KRW), refreshed every minute with an honest market-open/stale flag, PLUS the official ECB daily reference table for ~30 currencies. Derive any cross-rate or pair. For agents pricing cross-border ops, treasury, invoicing and FX conversion. Keyless, pay-per-call.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/weather",
      "method": "GET",
      "price": "0.002",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Real-World Data",
      "description": "Live weather for any city or lat/lon worldwide. Returns current conditions — temperature, feels-like, humidity, wind and sky — plus a 5-day forecast with daily highs/lows and precipitation probability. City names auto-geocode (no coordinates needed). Refreshed hourly with transparent freshness metadata. Keyless, pay-per-call, agent-ready JSON.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/market-risk",
      "method": "GET",
      "price": "0.002",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Composite crypto market-stress digest: a 0-100 score (low/moderate/elevated/high) blended from global USD-stablecoin depeg health (DefiLlama) and Base on-chain DEX exit-liquidity, with a per-leg breakdown and an AI risk line. Stablecoin systemic + Base liquidity microstructure only (not derivatives/sentiment). Both legs required for a score. Every read older than an hour regenerates the score inline (the buyer waits a few seconds) — never an older reading; public sources, pay-per-call.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/meta-intelligence",
      "method": "POST",
      "price": "0.001",
      "class": "compute",
      "access": "pay-per-call-only",
      "category": "x402 Open Router",
      "description": "Meta Intelligence (LIVE) — ranked x402 candidates with prices and pay_urls. provider_scope=otto_only (or unconditional Otto-only wording when the field is omitted) excludes third-party candidates. required_capabilities filters catalog-declared block_hashes, source_identity and observation_timestamps; unverified Bazaar descriptions cannot satisfy these filters. No permitted match returns an uncharged 503. Default discovery searches Otto and CDP Bazaar in separate pools. Non-custodial: pay each recommended provider directly; the $0.001 discovery fee adds no downstream markup. Capabilities describe contract support, not guaranteed non-null data or arbitrary requirements in free text.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/full-auto",
      "method": "POST",
      "price": "0.001",
      "class": "execution",
      "access": "pay-per-call-only",
      "category": "x402 Open Router",
      "description": "Full Auto (LIVE + ARMED) — the hands-off pillar. The Router picks the best-matched service for your ask and pays it on your behalf at-cost, then returns the data. Dynamic per-request price = the chosen service's at-cost price + a $0.001 router fee, charged via an `upto` cap — no prepay, no standing balance, per-call pass-through. Backed by the money-back guarantee (POST /feedback).",
      "networks": [
        "base"
      ]
    },
    {
      "path": "/feedback",
      "method": "POST",
      "price": "0.001",
      "class": "compute",
      "access": "pay-per-call-only",
      "category": "x402 Open Router",
      "description": "Feedback & Refunds (LIVE) — Otto's money-back guarantee. Paid a recommended Otto service (or a Full Auto charge) you didn't like? Send feedback with a >=50-word reason and Otto refunds the service fee + the Meta/router fee (or the whole Full Auto charge), capped $0.01 per transaction, up to 10x per wallet per day, only to the original payer, never more than you paid Otto. Covers Otto's OWN recommended services + Full Auto, not third-party CDP Bazaar picks (no receipt to verify). The $10/day figure is a global system budget, not your personal limit.",
      "networks": [
        "base"
      ]
    },
    {
      "path": "/web-search",
      "method": "GET",
      "price": "0.009",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Web search for AI agents, powered by Exa neural search: pass a query and receive relevant pages with title, URL, published date, author, relevance score and a text snippet as structured JSON. Pair with /web-extract for full-page content. For RAG retrieval, research, fact-finding and monitoring. Keyless, pay-per-call, cached by query. No matches returns an empty result set.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/web-answer",
      "method": "GET",
      "price": "0.01",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Web & Domain Intelligence",
      "description": "Quick web answer with citations (Exa upstream): ask one factual or current question and get a concise synthesized answer plus source URLs and publication dates. Optimized for fast lookups and agent loops; use /llm-research for a deeper multi-section research report, reasoning, image analysis, or webpage summarization. Keyless, pay-per-call, cached by query.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/earnings-calendar",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Earnings calendar and surprise history for a vendor-resolved equity: next report date/session with EPS and revenue estimates, latest reported EPS versus estimate, surprise percentage, and up to four quarters of history, which may be fewer. Monetary estimates retain Finnhub payload units because the captured feed does not identify a currency. Event-window price drift is explicitly unavailable rather than inferred.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/analyst-ratings",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Analyst consensus for a vendor-resolved equity: the latest buy/hold/sell distribution (strong buy · buy · hold · sell · strong sell counts, total, and a deterministic consensus label) plus up to six months of the same distribution so an agent can read the drift — is the street moving toward or away from the name. Vendor counts (Finnhub), label rule stated in the payload. No price targets and no per-analyst grade actions are served.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/equity-news",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Latest company news for a vendor-resolved equity: licensed Finnhub headlines from the trailing seven days with publication time, source, and summary. Only articles that name the company or print its ticker as a standalone uppercase symbol are served — labelled `primary` when the headline does, `mentioned` when only the summary does; a ticker that is also an English word (for example ON or IT) can match an unrelated all-caps phrase. A week with no such articles is refused as `no_recent_news` and nothing is charged. Redirect URLs withheld; no sentiment is fabricated.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/dividend-intel",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Cash-dividend intelligence for a vendor-resolved equity from licensed Tiingo end-of-day history: TTM dividend/share and yield against the latest close, latest dividend, split-adjusted complete-year growth, the last eight payments, split events, and a cut-detection checklist with explicit coverage. Payout ratio, forward ex-dates and declaration/record/payment dates are not served (not in the Tiingo feed). Cash values retain Tiingo payload units because the feed does not identify a currency.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/macro-regime",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Daily US macro-regime snapshot from licensed Alpha Vantage series: 10-year Treasury yield, effective federal funds rate, three-month rate changes, CPI index and YoY inflation, plus a mechanical rates-direction/inflation-direction label with disclosed thresholds. Three upstream calls per daily refresh; scanner context only.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/technical-signals",
      "method": "GET",
      "price": "0.003",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "description": "Daily technical snapshot for a vendor-resolved equity from licensed Tiingo adjusted closes: Wilder RSI-14, 20-session momentum, SMA-20/SMA-50, price distance from each average, above/below/mixed trend state, and the latest observed golden/death cross. Price and averages retain Tiingo payload units because the captured feed does not identify a currency.",
      "networks": [
        "base",
        "solana"
      ]
    },
    {
      "path": "/lp-pool-apr",
      "method": "POST",
      "price": "0.001",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "DeFi & Markets Data",
      "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.",
      "networks": [
        "base"
      ],
      "bodySchema": {
        "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}$"
                }
              }
            }
          }
        ]
      }
    },
    {
      "path": "/lp-intelligence",
      "method": "POST",
      "price": "0.02",
      "class": "read-only",
      "access": "pay-per-call-only",
      "category": "Portfolio & Accounts",
      "description": "Read an exact V3/V4 NFT position on Robinhood Chain (4663), its composition, range status, plain-language advice and independently cached pool APR. Choose a 1–30 day horizon and an objective. Quantitative range comparisons carry their model limits; unverified tokens or hooks cannot earn investment eligibility. No swap, liquidity change or transaction is prepared. $0.02 USDC on Base per call.",
      "networks": [
        "base"
      ],
      "bodySchema": {
        "type": "object",
        "properties": {
          "position": {
            "type": "object",
            "properties": {
              "chainId": {
                "type": "number",
                "const": 4663
              },
              "positionManager": {
                "type": "string",
                "pattern": "^0x[0-9a-fA-F]{40}$"
              },
              "tokenId": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]{0,77})$"
              },
              "expectedOwner": {
                "type": "string",
                "pattern": "^0x[0-9a-fA-F]{40}$"
              }
            },
            "required": [
              "chainId",
              "positionManager",
              "tokenId"
            ],
            "additionalProperties": false
          },
          "evidenceSetId": {
            "type": "string",
            "pattern": "^[a-zA-Z0-9_-]{1,80}$"
          },
          "scenarios": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "label": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 60
                },
                "token0ChangePct": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 100
                },
                "token1ChangePct": {
                  "type": "number",
                  "minimum": -90,
                  "maximum": 100
                }
              },
              "required": [
                "label",
                "token0ChangePct",
                "token1ChangePct"
              ],
              "additionalProperties": false
            },
            "minItems": 1,
            "maxItems": 8
          },
          "advisory": {
            "type": "object",
            "additionalProperties": false,
            "properties": {
              "horizonDays": {
                "type": "integer",
                "minimum": 1,
                "maximum": 30,
                "default": 7
              },
              "objective": {
                "type": "string",
                "enum": [
                  "understand",
                  "maintain-fee-uptime",
                  "reduce-concentration"
                ],
                "default": "understand"
              }
            },
            "description": "User objective and comparison horizon only. Data providers, volatility, costs and forecasts cannot be supplied by callers."
          }
        },
        "required": [
          "position"
        ],
        "additionalProperties": false
      }
    }
  ],
  "autonomy": {
    "fullAuto": {
      "summary": "Live hands-off path: the x402 Open Router's Full Auto (POST /full-auto) pays the best-matched Otto service on your behalf at-cost + a $0.001 router fee (upto cap, no prepay, no standing balance), then returns the data — no scoped Safe required, paid from the same Coinbase Wallet used here.",
      "status": "live",
      "guarantee": "Backed by the money-back guarantee (POST /feedback): refund capped $0.01 per transaction, up to 10x per wallet per day, >=50-word reason, only to the original payer; covers Otto's own recommended services + Full Auto, not third-party CDP Bazaar picks."
    },
    "sessionKeySafe": {
      "summary": "The owner-activation endpoints for this rail are retired (/api/eal/arm and /api/eal/prepare return 404). On Otto's live /app rail the connected wallet is the Safe's sole owner, and an installed TRADING permission gives the Otto trading operator general authority over the deposited balance until that permission's expiry or the owner's revocation, whichever comes first.",
      "status": "gated_early_access",
      "note": "Owner activation is rolling out; EAL auto-pay remains disabled pending its funded proof and review. The trading permission has no cap, target list, action list, or expiry; the billing permission is USDC-only to a pinned address with per-charge and cumulative caps, a use limit, and an expiry."
    }
  }
}
