# x402 web tools > Pay-per-call web and on-chain data tools for AI agents. Settled in USDC on Base (network eip155:8453) via the x402 protocol — no account, no signup, no API key. Every paid endpoint is machine-to-machine. Send the request with no payment and you get an HTTP 402 with a price quote; retry with a signed `X-PAYMENT` header and the facilitator settles the USDC micropayment and returns the result (200). The facilitator sponsors gas, so a buyer needs only USDC on Base. ## How to pay (x402 flow) 1. Call the endpoint with its declared method and no payment → `402 Payment Required` with a quote. Most routes are `GET` (read; input in query params); a few that take a large or arbitrary body are `POST` (input in a JSON body). Each route's method is listed below. Calling the wrong method returns `405 Method Not Allowed`. 2. Sign the quote (EIP-3009 USDC authorization) and resend with the `X-PAYMENT` header. 3. The facilitator settles on Base and the endpoint returns `200` with the result. Receiver wallet (payTo): `0xF22e558a00D91Ee12A1F50C52186FecB8dDFf493` — network `eip155:8453`. ## Endpoints ### `GET /extract` — $0.002 Extract the readable main content of any public web page as clean markdown or plain text plus metadata (title). Robots.txt-respecting, public content only. - Query params: `{"url": "https://en.wikipedia.org/wiki/Bitcoin", "render": false}` - Example response: `{"title": "...", "content": "# Clean markdown...", "format": "markdown"}` - Tags: web, scraping, markdown, extract ### `GET /search` — $0.001 Free-text web search returning a ranked list of title/url/snippet results. The default backend is a multi-engine auto-fusion across Brave, DuckDuckGo, Google, Wikipedia, Yandex and more (deduped by URL + ranked) — not a single engine. Optional filters: a `timelimit` freshness/time filter (past day/week/month/year, for fresh results), a `region` locale, a `safesearch` level, and an explicit `backend` engine pin (or CSV) to override the multi-engine default. - Query params: `{"query": "x402 protocol", "max_results": 5}` - Example response: `{"count": 5, "results": [{"title": "...", "url": "..."}]}` - Tags: web, search, data ### `GET /search/news` — $0.003 General-purpose keyword news search: dated headlines from across web news engines (Bing, DuckDuckGo, Yahoo via ddgs), each item with title, url, snippet, publication date, source name and a thumbnail image. Covers news/latest/headlines/breaking/current-events queries on ANY topic (not only crypto), a distinct discovery surface from keyword web search. Optional freshness (`timelimit` day/week/month/year), `region` locale, `safesearch` level, and explicit news-`backend` pin. An empty or upstream-blocked result returns a valid 200 with count:0 (never a 500). - Query params: `{"query": "ethereum etf", "max_results": 5, "timelimit": "w"}` - Example response: `{"query": "...", "count": 5, "results": [{"title": "...", "url": "https://...", "snippet": "...", "date": "2026-07-16T...", "source": "CryptoSlate", "image": "https://..."}]}` - Tags: web, news, search, headlines, latest, current-events, press, fresh, syndication ### `GET /price` — $0.01 USD spot price of an asset computed by us from Base mainnet state: a Chainlink USD price feed when available, otherwise the most-liquid Base DEX pool. Covers 50+ assets — crypto majors (ETH, BTC, SOL, BNB, AVAX, XRP, DOGE, and more), BTC and ETH variants (CBBTC, WBTC, LBTC, TBTC, CBETH), stablecoins for peg-watch (USDT, USDC, USDe, USDS, GHO, RLUSD, EURC), Base-native tokens (AERO, DEGEN, PEPE, VIRTUAL, TRUMP), forex currencies (EUR, GBP, CHF, CAD, AUD, and more) and precious metals (XAU gold, XAG silver). New assets are added as data rows, never new code. - Query params: `{"token": "ETH"}` - Example response: `{"token": "ETH", "price_usd": 1706.69, "source": "chainlink", "block": 47547637, "chain": "eip155:8453"}` - Tags: crypto, price, onchain, chainlink, dex, base, market-data, forex, fx, stablecoin, metals, spot ### `GET /gas` — $0.005 Current Base L2 gas price in gwei and wei, read live from chain state. - Query params: `{}` - Example response: `{"gas_price_gwei": 0.006, "gas_price_wei": 6000000, "block": 47547636, "chain": "eip155:8453"}` - Tags: crypto, gas, onchain, base, market-data ### `GET /market/report` — $0.05 Cross-source market report for a token: Chainlink reference price plus DEX pools, TVL-weighted VWAP, total pool TVL, cross-source spread, recent change and volatility — fully computed by us from public Base on-chain state, no third-party API. - Query params: `{"token": "ETH"}` - Example response: `{"token": "ETH", "reference_price_usd": 1706.69, "aggregate": {"dex_vwap_usd": 1706.11, "total_dex_tvl_usd": 17002165.56, "num_sources": 3}, "recent": {"change_pct": 0.08, "volatility_pct": 0.21}, "chain": "eip155:8453"}` - Tags: crypto, market-data, onchain, vwap, tvl, volatility, base, forex, stablecoin, metals ### `GET /token/meta` — $0.005 Resolve an ERC-20 contract on Base to its name, symbol, decimals and totalSupply (both raw integer and human-scaled), read directly from on-chain state. Handles bytes32-style name/symbol tokens. EOA/non-contract -> 404; non-ERC-20 -> 400. - Query params: `{"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "network": "base"}` - Example response: `{"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "name": "USD Coin", "symbol": "USDC", "decimals": 6, "total_supply_raw": "...", "total_supply": 1234567.89, "chain": "eip155:8453"}` - Tags: crypto, onchain, base, ethereum, multichain, erc20, token, metadata ### `GET /wallet/balances` — $0.005 Portfolio snapshot of an address on any supported EVM network: native-coin balance plus ERC-20 balances, each as raw integer and human-scaled value. On Base you may use token symbols and a default set, with optional best-effort USD valuation via our on-chain price feed; on Ethereum/Arbitrum/Optimism/Polygon/BNB pass explicit 0x token addresses (symbol map and USD valuation are Base-only). - Query params: `{"address": "0x2d3af92Df6129878509F152E531E1beC2b34C423", "tokens": ["USDC", "WETH"], "usd": false, "network": "base"}` - Example response: `{"address": "0x2d3af92Df6129878509F152E531E1beC2b34C423", "native": {"symbol": "ETH", "balance_raw": "...", "balance": 0.12}, "tokens": [{"token": "USDC", "balance_raw": "...", "balance": 42.5}], "network": "base", "chain": "eip155:8453"}` - Tags: crypto, onchain, base, ethereum, multichain, wallet, balances, erc20, portfolio ### `GET /code` — $0.003 Classify a Base address as a smart contract or an externally-owned account, with the deployed bytecode size and its keccak256 hash — read from eth_getCode. - Query params: `{"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "network": "base"}` - Example response: `{"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "is_contract": true, "code_size": 1234, "code_hash": "0x...", "chain": "eip155:8453"}` - Tags: crypto, onchain, base, ethereum, multichain, contract, bytecode, eoa ### `GET /tx` — $0.01 Fetch a Base transaction and its receipt by hash: sender, recipient, value (wei + ETH), nonce, gas/fees, block number & hash, input size, plus receipt status (1/0 or 'pending'), gas used, effective gas price, created contract and log count. Not-found -> 404. - Query params: `{"hash": "0x71e66a800397c84fa43a8b5e977162b47435cfd7e17e157fe53f363c308f97d2", "network": "base"}` - Example response: `{"hash": "0x...", "from": "0x...", "to": "0x...", "value_wei": "0", "value_eth": 0.0, "block_number": 47547637, "status": 1, "gas_used": 21000, "logs_count": 0, "chain": "eip155:8453"}` - Tags: crypto, onchain, base, ethereum, multichain, transaction, receipt, explorer ### `GET /tx/explain` — $0.012 Turn any mined EVM transaction into a human-readable narrative from public on-chain state (no account or API key). Decodes every transfer log into NET movements per participant across ERC-20, ERC-721, ERC-1155, native coin and WETH wrap/unwrap; classifies the operation (swap, transfer, receive, approve, mint, burn, deploy, wrap, unwrap, NFT buy/sell, contract call); labels known routers and pools; reconstructs internal native transfers via the public Blockscout explorer where available (keyless RPC exposes no trace, so coverage is stated honestly); prices gas in native and USD; and returns a one-line summary. Deterministic — no LLM. Works on Base, Ethereum, Arbitrum, Optimism, Polygon, BNB, Avalanche, Gnosis, Linea, Scroll, Celo and Mantle. - Query params: `{"hash": "0x71e66a800397c84fa43a8b5e977162b47435cfd7e17e157fe53f363c308f97d2", "network": "base"}` - Example response: `{"tx_hash": "0x71e6…97d2", "network": "base", "chain": "eip155:8453", "status": "success", "operation": "swap", "summary": "Swapped 100 USDC for 0.0312 WETH via Uniswap V3; gas 0.00002 ETH (~$0.05).", "actor": "0x2d3a…C423", "counterparty": "0x2626…e481", "movements": [{"address": "0x2d3a…C423", "is_actor": true, "assets": [{"asset": "0x8335…2913", "symbol": "USDC", "amount": -100.0, "amount_raw": "-100000000"}, {"asset": "0x4200…0006", "symbol": "WETH", "amount": 0.0312, "amount_raw": "31200000000000000"}]}], "protocols": [{"address": "0x2626…e481", "name": "Uniswap V3 SwapRouter02"}], "gas": {"gas_used": 142000, "fee_native": 2.13e-05, "native_symbol": "ETH", "fee_usd": 0.05}, "coverage": {"method": "log-decode", "internal_tx": "included", "trace": "unavailable-on-keyless-rpc"}}` - Tags: crypto, onchain, transaction, decode, explain, evm, multi-chain, swap, erc20, nft ### `GET /resolve` — $0.005 Resolve Base names (Basenames, the *.base.eth ENS fork) on-chain: forward lookup (name -> address) via the L2Resolver, or reverse lookup (address -> primary name), which is best-effort and forward-verified (the returned name must resolve back to the queried address). Input is expected normalized/lowercase (no ENSIP-15 in MVP). - Query params: `{"name": "jesse.base.eth"}` - Example response: `{"query": "jesse.base.eth", "direction": "forward", "name": "jesse.base.eth", "address": "0x...", "chain": "eip155:8453"}` - Tags: crypto, onchain, base, identity, basename, ens, resolve ### `POST /crypto/verify` — $0.003 Recover the Ethereum address that produced a signature and (optionally) check it matches an expected signer. Supports EIP-191 personal_sign (plain text or 0x-hex message) and EIP-712 typed structured data (pass the full typed-data object). This is verification/recovery only: it never holds or uses a private key and never signs. - Request body: `{"scheme": "eip191", "message": "Hello, Ethereum!", "signature": "0xb44193cab85bbebd5fd04528a1b54c684418e8c025602174fede446dec814eac0f05db58a6b7b953c1806cecba389686cdebefdfa701c29014b0c486fc5550301c", "expected_signer": "0x19E7E376E7C213B7E7e7e46cc70A5dD086DAff2A"}` - Example response: `{"scheme": "eip191", "signer": "0x52908400098527886E0F7030069857D2E4169EE7", "matches": true}` - Tags: crypto, signature, eip712, eip191, verify, ecrecover, onchain ### `POST /crypto/abi` — $0.003 ABI helper. op=encode_call builds calldata for a function: keccak selector + abi-encoded args from a signature like transfer(address,uint256). op=encode abi-encodes a list of types+args to 0x bytes. op=decode parses 0x bytes back into values (bytes returned as 0x-hex, big ints as strings). Tuple/nested types are not supported yet (returns 400). Pure local computation. - Request body: `{"op": "encode_call", "signature": "transfer(address,uint256)", "args": ["0x52908400098527886E0F7030069857D2E4169EE7", "1000000"]}` - Example response: `{"selector": "0xa9059cbb", "calldata": "0xa9059cbb00000000000000000000000052908400098527886e0f7030069857d2e4169ee700000000000000000000000000000000000000000000000000000000000f4240"}` - Tags: crypto, abi, encode, decode, calldata, ethereum ### `GET /crypto/hash` — $0.001 Hashing utility with a data-driven algorithm registry: keccak256 and sha256 (over a utf8 or hex input), `selector` (4-byte function selector from a signature), `event_topic` (full 32-byte topic0 from an event signature), and ENS `namehash` / `labelhash`. namehash("") is 0x00*32. Pure local computation, no network. - Query params: `{"algo": "selector", "input": "transfer(address,uint256)"}` - Example response: `{"algo": "selector", "hash": "0xa9059cbb"}` - Tags: crypto, keccak256, sha256, selector, namehash, ens, hash ### `GET /crypto/convert` — $0.001 Conversion utility, all exact integer/Decimal math (no float precision loss). op=units converts an amount between wei/gwei/ether or any integer `decimals` (arbitrary token). op=checksum returns the EIP-55 checksummed form of an address plus a validity flag. op=hex converts between hex and int. Pure local computation. - Query params: `{"op": "units", "value": "1.5", "from": "ether", "to": "gwei"}` - Example response: `{"value": "1500000000", "from": "ether", "to": "gwei"}` - Tags: crypto, units, wei, gwei, ether, decimals, eip55, checksum, convert ### `POST /convert` — $0.001 Convert structured/text data between formats by pure local computation (zero network, no keys). Supported pairs: json->csv (Array of objects -> CSV (nested keys dotted, lists as JSON)); csv->json (CSV rows -> array of objects (optional `delimiter`)); json->yaml (JSON -> YAML (safe_dump, unicode preserved)); yaml->json (YAML -> JSON (safe_load only)); json->json (Normalize JSON: pretty / `minify` / `sort_keys` / `indent`); markdown->html (Markdown -> sanitized HTML (scripts/handlers stripped)); html->markdown (HTML -> Markdown); html->text (HTML -> plain text); text->base64 (UTF-8 text -> base64); base64->text (base64 -> UTF-8 text); text->hex (UTF-8 text -> hex); hex->text (hex -> UTF-8 text); toml->json (TOML -> JSON). The request carries the document as the `data` string plus `from`/`to`; optional `options` (e.g. minify/sort_keys/indent for JSON, delimiter for CSV). YAML uses safe_load only and Markdown->HTML output is sanitized (scripts/event handlers/javascript: URIs removed). Malformed input returns 4xx, never 5xx; input is size-capped. - Request body: `{"data": "{\"a\":1,\"b\":2}", "from": "json", "to": "yaml"}` - Example response: `{"from": "json", "to": "yaml", "result": "a: 1\nb: 2\n", "bytes": 9}` - Tags: convert, transform, json, csv, yaml, markdown, html, base64, data, compute ### `GET /structured` — $0.003 Parse any public web page into structured fields in one call: the readable main text (trafilatura), an ordered heading outline (level+text), de-duplicated absolute links, HTML tables as cell matrices, and a metadata block — meta description, canonical URL, html lang, all Open Graph (og:*) and Twitter-card (twitter:*) tags, and every JSON-LD block parsed to objects. Pass `include` to fetch only some sections. Browserless (no JS render), robots.txt-respecting, public content only. - Query params: `{"url": "https://www.python.org/", "include": ["text", "headings", "links", "tables", "metadata"]}` - Example response: `{"title": "...", "text": "main article text...", "headings": [{"level": 1, "text": "..."}], "links": [{"text": "...", "url": "https://..."}], "tables": [[["h1", "h2"], ["a", "b"]]], "metadata": {"description": "...", "canonical": "https://...", "lang": "en", "open_graph": {"og:title": "..."}, "twitter": {"twitter:card": "summary"}, "json_ld": []}}` - Tags: web, scraping, structured, metadata, opengraph, json-ld, headings, tables, links, html ### `GET /feed` — $0.002 Normalize a syndication feed into clean JSON: RSS 2.0, Atom 1.0 (via feedparser) and JSON Feed (jsonfeed.org) are all supported and returned in one schema — a feed block (title/link/description/updated) and a list of items (title/link/published/summary/id/author), with the detected `format`. Capped at 100 items. A feed that cannot be parsed returns 422. - Query params: `{"url": "https://feeds.bbci.co.uk/news/rss.xml", "max_items": 20}` - Example response: `{"feed": {"title": "...", "link": "https://...", "description": "...", "updated": "..."}, "items": [{"title": "...", "link": "https://...", "published": "...", "summary": "...", "id": "...", "author": "..."}], "count": 20, "format": "rss20"}` - Tags: web, feed, rss, atom, json-feed, syndication, news ### `GET /links` — $0.002 List all outbound links of a public page for crawler/agent navigation: each as an absolute, de-duplicated URL with its anchor text, split into internal vs external counts (relative to the page host), plus any declared RSS/Atom/JSON feeds () and a sitemap hint read from robots.txt. `same_host_only` restricts to the page's own host. Capped at 1000 links (`truncated` flags overflow). - Query params: `{"url": "https://example.com", "same_host_only": false}` - Example response: `{"links": [{"url": "https://example.com/a", "text": "A"}], "internal_count": 1, "external_count": 0, "feeds": ["https://example.com/rss.xml"], "sitemap_hint": "https://example.com/sitemap.xml", "truncated": false}` - Tags: web, links, crawl, scraping, sitemap, feed, discovery ### `GET /sitemap` — $0.003 Find and parse a website's XML sitemap. Given a site root, the sitemap is located via the robots.txt `Sitemap:` directive, falling back to /sitemap.xml; a direct .xml URL is parsed as-is. Returns each URL with optional lastmod and priority, the `source` it was read from, and a `count`. A is followed one level (<=5 child sitemaps, <=5000 URLs total; `truncated` flags caps). Nothing found -> 404. - Query params: `{"url": "https://www.cloudflare.com"}` - Example response: `{"urls": [{"loc": "https://example.com/", "lastmod": "2026-06-01", "priority": "1.0"}], "count": 1, "source": "https://example.com/sitemap.xml", "truncated": false}` - Tags: web, sitemap, crawl, discovery, seo, urls ### `GET /dex/swaps` — $0.01 Swap-level flow analytics for a Base token or DEX pool, computed by us from public on-chain Swap event logs (no third-party API). Give a token symbol (aggregates all its tracked pools) or an explicit `pool` address, plus an optional look-back `window` (30m/1h/6h, capped ~6h). Returns each swap normalized to trader, side (buy/sell), base/quote amounts (human + raw), execution price and USD volume, plus a summary over the whole window: total/buy/sell volume, net flow (buy-sell USD), counts and the largest swaps. Supports Aerodrome (Velo-V2) and Uniswap-V3 pools. Timestamps are exact when the RPC returns them, otherwise estimated from block height (`ts_estimated`). Invalid token/pool -> 400, never 500. - Query params: `{"token": "WETH", "window": "1h", "limit": 100}` - Example response: `{"pools": [{"pool": "0xd0b5...", "dex": "univ3", "pair": "WETH/USDC", "base": "ETH", "quote": "USDC"}], "summary": {"count": 42, "total_volume_usd": 125000.0, "buy_count": 20, "sell_count": 22, "buy_volume_usd": 60000.0, "sell_volume_usd": 65000.0, "net_flow_usd": -5000.0, "window_blocks": 1800, "largest_swaps": []}, "swaps": [{"block": 47623000, "tx_hash": "0x...", "trader": "0x...", "side": "sell", "amount_base": 1.26, "amount_quote": 2169.14, "price": 1721.54, "volume_usd": 2169.14, "ts": 1781200000, "ts_estimated": false}], "truncated": false, "block": 47623156, "chain": "eip155:8453"}` - Tags: defi, dex, swaps, flow, onchain, base, aerodrome, uniswap, volume, trading ### `GET /dex/trending` — $0.05 Momentum view of tracked Base DEX pools: over a short look-back `window` (15m/30m/1h, capped ~1h) we fetch each pool's Swap logs and rank pools by total USD volume, also reporting swap count, buy/sell split and net flow (buy-sell USD). Coverage grows by data (more pools in the registry). Computed entirely from public on-chain event logs (Aerodrome + Uniswap-V3), no third-party API resold. Heaviest call — long TTL-cached. - Query params: `{"window": "30m", "limit": 5}` - Example response: `{"window_blocks": 900, "pools_scanned": 3, "trending": [{"pool": "0xd0b5...", "dex": "univ3", "pair": "WETH/USDC", "base": "ETH", "quote": "USDC", "swap_count": 320, "buy_count": 150, "sell_count": 170, "volume_usd": 540000.0, "buy_volume_usd": 250000.0, "sell_volume_usd": 290000.0, "net_flow_usd": -40000.0}], "block": 47623156, "chain": "eip155:8453"}` - Tags: defi, trending, dex, volume, momentum, onchain, base, movers ### `GET /enrich/domain` — $0.015 One-call enrichment of a domain, company or email-domain aggregated by us from several PUBLIC sources and returned in a single normalized object (1 request instead of 6 different lookups): `registration` from RDAP (domain age, registrar org, expiry, statuses, nameservers — personal registrant data is dropped by an allow-list), `dns` via DNS-over-HTTPS (A/AAAA/MX with mail-provider classification, NS, SPF & DMARC policy), `tls` from a live certificate handshake (subject CN, issuer org, not_before/not_after, days_to_expiry, SAN count, validity), `web` from the homepage (final URL, HTTP status, server, title, description, Open Graph, JSON-LD Organization name/logo/social links, and role-only contact emails of the same domain), and `tech` (a lightweight tech-stack detection from headers + markup). Pass `include` to fetch only some blocks. Each block fails independently to null (a `summary.partial` flag + per-source `errors`); the call never returns 500. NOT a resale of a paid enrichment API — only public data (RDAP, public DoH resolvers, TLS, robots-respecting homepage). Privacy: business/domain metadata only, never personal data of natural persons. - Query params: `{"domain": "stripe.com", "include": ["registration", "dns", "tls", "web", "tech"]}` - Example response: `{"domain": "stripe.com", "queried": ["registration", "dns", "tls", "web", "tech"], "registration": {"created": "2009-...", "age_days": 6200, "expires": "2027-...", "registrar": "MarkMonitor Inc.", "statuses": ["client transfer prohibited"], "nameservers": ["ns-1.example.net"], "registered": true}, "dns": {"resolves": true, "a": ["1.2.3.4"], "mx": [{"preference": 10, "exchange": "..."}], "has_mail": true, "mail_provider": "Google Workspace", "spf": {"present": true, "policy": "-all"}, "dmarc": {"present": true, "policy": "reject"}}, "tls": {"subject_cn": "stripe.com", "issuer": "...", "days_to_expiry": 70, "san_count": 3, "valid": true, "expired": false}, "web": {"final_url": "https://stripe.com/", "http_status": 200, "server": "nginx", "title": "Stripe", "description": "...", "open_graph": {"og:title": "Stripe"}, "organization": {"name": "Stripe", "logo": "https://...", "social": ["https://..."]}, "contacts": ["support@stripe.com"]}, "tech": {"technologies": ["Nginx", "React"], "count": 2}, "summary": {"sources_ok": 5, "sources_requested": 5, "partial": false, "errors": {}}}` - Tags: enrichment, domain, company, whois, rdap, dns, ssl, tls, tech-stack, metadata, data, company-data, lead-enrichment ### `GET /enrich/email` — $0.005 Domain-level email intelligence computed from public DNS only: MX records (with the mail provider classified from MX hostnames — Google Workspace, Microsoft 365, etc.), SPF and DMARC presence + policy, and boolean flags for disposable-domain, free-webmail-provider and role-account (info@/support@/sales@…). A `deliverability_signal` (strong/moderate/weak/undeliverable) is derived from has-MX + SPF + DMARC. We do NOT perform SMTP RCPT probing of specific mailboxes — that targets individuals, is unreliable and often violates ToS; the email's local-part is only matched against role/free lists and is never stored or returned. Public data only, no third-party API resold. - Query params: `{"email": "support@stripe.com"}` - Example response: `{"domain": "stripe.com", "has_mx": true, "mx": [{"preference": 10, "exchange": "aspmx.l.google.com"}], "providers": ["aspmx.l.google.com"], "mail_provider": "Google Workspace", "spf": {"present": true, "policy": "-all"}, "dmarc": {"present": true, "policy": "reject"}, "is_disposable": false, "is_free_provider": false, "is_role_account": true, "deliverability_signal": "strong"}` - Tags: enrichment, email, validation, mx, spf, dmarc, deliverability, disposable, data, email-verification ### `GET /dev/github` — $0.005 One-call health summary of a public GitHub repository for agents doing competitive analysis or dependency due-diligence. Returns the core stats (stargazers, forks, open issues, watchers/subscribers, repo size, primary language, topics, SPDX license, homepage, default branch, created/updated/pushed timestamps, archived/disabled/fork flags) PLUS signals we compute: days since last push, repo age in days, a rough issues-per-star and forks-per-star ratio, and an `is_active` flag (pushed < 90d and not archived/disabled). Computed from the official GitHub REST API (no scraping); an optional server-side token raises the rate limit. Invalid 'owner/name' -> 400, missing repo -> 404, never 500. - Query params: `{"repo": "coinbase/x402"}` - Example response: `{"full_name": "coinbase/x402", "stars": 1234, "forks": 210, "open_issues": 18, "language": "TypeScript", "license": "Apache-2.0", "archived": false, "signals": {"days_since_push": 2, "age_days": 400, "issues_per_star": 0.0146, "is_active": true}}` - Tags: dev, github, oss, repository, stars, due-diligence, competitive-analysis, open-source, health ### `GET /dev/package` — $0.005 Cross-ecosystem package health & popularity in one call, for dependency selection and supply-chain due-diligence. Supports npm, PyPI and crates.io (aliases pip/python, cargo/rust, node). Aggregates THREE public keyless sources into one normalized object: the official registry (latest version, license, deprecation/yank), the download-stats API (last day/week/month for npm/PyPI, recent + total for crates) and deps.dev (uniform version history → release count, median release cadence in days, package age). Adds computed signals: a download `trend` (rising/falling/stable from weekly vs monthly rate) and an `is_maintained` flag (recent cadence and not deprecated). Coverage grows by data (a new ecosystem is one registry row). Unknown ecosystem -> 400, missing package -> 404, never 500. - Query params: `{"ecosystem": "npm", "name": "react"}` - Example response: `{"ecosystem": "npm", "name": "react", "latest_version": "18.3.1", "license": "MIT", "age_days": 4200, "releases_count": 150, "release_cadence_days": 21.0, "deprecated": false, "yanked": false, "downloads": {"last_day": 4200000, "last_week": 28000000, "last_month": 120000000}, "signals": {"download_trend": "stable", "is_maintained": true}}` - Tags: dev, package, npm, pypi, crates, downloads, dependencies, due-diligence, supply-chain, maintenance, oss ### `GET /dev/hn` — $0.003 Hacker News engagement as a developer-sentiment proxy for a project, library or topic. Searches HN stories (Algolia API, keyless) within a look-back window and returns the number of matching stories, the total HN match count, total and average points and comments, and the top stories (title, url, points, comment count, date, item id). Useful for gauging buzz/interest in competitive analysis. Engagement is a proxy for attention, not a verified opinion score. Empty query -> 400, never 500. - Query params: `{"query": "x402 protocol", "days": 365}` - Example response: `{"query": "x402 protocol", "window_days": 365, "count_stories": 7, "total_points": 540, "total_comments": 210, "avg_points": 77.14, "top": [{"title": "...", "url": "https://...", "points": 240, "num_comments": 90, "date": "2026-01-10T00:00:00.000Z"}]}` - Tags: dev, hackernews, hn, sentiment, engagement, buzz, competitive-analysis, social, news ### `GET /dev/trending` — $0.005 Discover the top GitHub repositories for a language and/or topic via the official GitHub Search API. At least one of `language`/`topic` is required; add `created_after` (YYYY-MM-DD) to find recently-created projects, choose `sort` (stars/forks/updated) and a `limit` (<=20). Each result has name, full_name, owner, stars, forks, open issues, language, description, topics, html_url and created/pushed timestamps. Good for competitive landscape scans and finding rising projects. NB: GitHub's unauth Search budget is 10 req/min (a server-side token lifts it) so results are TTL-cached. Invalid input -> 400, never 500. - Query params: `{"language": "rust", "topic": "wasm", "sort": "stars", "limit": 10}` - Example response: `{"query": "language:rust topic:wasm", "sort": "stars", "total_count": 320, "count": 10, "repos": [{"full_name": "owner/repo", "stars": 9000, "language": "Rust", "description": "...", "html_url": "https://github.com/owner/repo", "pushed_at": "2026-06-20T00:00:00Z"}]}` - Tags: dev, github, trending, oss, discovery, competitive-analysis, open-source, topic, language, search ### `GET /geocode` — $0.002 Forward-geocode a street address or place name into latitude/longitude plus parsed address components (house number, road, city, county, state, postcode, country) using OpenStreetMap Nominatim — no API key, GLOBAL coverage. An unmatched query returns 404, bad input 400, never 500. - Query params: `{"address": "1600 Pennsylvania Ave NW, Washington, DC"}` - Example response: `{"matched_address": "White House, 1600, Pennsylvania Avenue NW, Washington, District of Columbia, 20500, USA", "lat": 38.8977, "lon": -77.0365, "components": {"house_number": "1600", "road": "Pennsylvania Avenue NW", "city": "Washington", "state": "District of Columbia", "postcode": "20500", "country": "United States", "country_code": "us"}, "country": "United States", "country_code": "us", "source": "osm_nominatim"}` - Tags: geo, geocode, address, location, osm, global ### `GET /geocode/reverse` — $0.002 Reverse-geocode coordinates into a street address plus parsed components (road, city, county, state, postcode, country) via OpenStreetMap Nominatim — no API key, GLOBAL coverage. For US coordinates the result is enriched with the nearest city/state from the NWS (skipped gracefully outside the US). Coordinates with no map coverage return 404, bad input 400. - Query params: `{"lat": 38.9, "lon": -77.04}` - Example response: `{"lat": 38.9, "lon": -77.04, "matched_address": "Washington, District of Columbia, USA", "components": {"city": "Washington", "county": "District of Columbia", "state": "District of Columbia", "postcode": "20500", "country": "United States", "country_code": "us"}, "country": "United States", "country_code": "us", "nearest_city": "Washington", "nearest_state": "DC", "source": "osm_nominatim"}` - Tags: geo, geocode, reverse, location, osm, global ### `GET /weather` — $0.003 Current weather conditions for a US location from the National Weather Service (public-domain, no key, commercial OK). Accepts EITHER {lat, lon} OR a US {address} (auto-geocoded via the Census Geocoder in the same call — geocode + weather bundled). Returns temperature in both Celsius and Fahrenheit, humidity, wind speed (km/h + mph) and direction, pressure, text description, and the reporting station. The {address} must be a US STREET address (number + street); a bare city name does not geocode — use {lat, lon} for city-level points. US coverage only; outside the US returns 404, bad input 400, never 500. - Query params: `{"address": "233 S Wacker Dr, Chicago, IL"}` - Example response: `{"location": {"lat": 41.88, "lon": -87.63, "city": "Chicago", "state": "IL"}, "current": {"description": "Partly Cloudy", "temperature_c": 23.0, "temperature_f": 73.4, "humidity_pct": 64.7, "wind_speed_kmh": 11.0, "wind_speed_mph": 6.8, "station": {"id": "KORD", "name": "Chicago O'Hare"}}, "coverage": "US"}` - Tags: weather, geo, us, conditions, nws ### `GET /forecast` — $0.003 Weather forecast for a US location from the National Weather Service (public-domain, no key, commercial OK). Accepts EITHER {lat, lon} OR a US {address} (auto-geocoded). Returns normalized forecast periods with temperature in Celsius and Fahrenheit, precipitation probability, wind, and short/detailed text. Set `hourly: true` for hourly periods and `days: N` (1-7) to limit the horizon. The {address} must be a US STREET address (number + street); a bare city name does not geocode — use {lat, lon} for city-level points. US coverage only; outside the US returns 404, bad input 400, never 500. - Query params: `{"lat": 39.74, "lon": -104.98, "hourly": false, "days": 3}` - Example response: `{"location": {"lat": 39.74, "lon": -104.98, "city": "Denver", "state": "CO"}, "type": "daily", "count": 6, "periods": [{"name": "Today", "is_daytime": true, "temperature_f": 88.0, "temperature_c": 31.1, "precip_probability_pct": 20, "short_forecast": "Mostly Sunny", "wind_speed": "7 to 13 mph", "wind_direction": "NW"}], "coverage": "US"}` - Tags: weather, forecast, us, nws, noaa, temperature, precipitation, rain, wind, hourly, daily, meteorology, national-weather-service ### `GET /crypto/news` — $0.005 One-call crypto news radar with built-in sentiment for trading and research agents. We fetch a curated set of major crypto RSS feeds (CoinDesk, Cointelegraph, Decrypt, Bitcoin Magazine, The Block, CryptoSlate), merge and deduplicate near-identical headlines, optionally filter by `coin` (ticker or name) and/or a free-text `query`, and score each item bullish/bearish/neutral with a crypto-tuned lexicon (VADER plus crypto/market valences such as rally, surge, crash, hack, rug). Each item returns only syndicated metadata (title, link-back to the publisher, source, published time, a short feed-summary) plus its sentiment; full articles stay at the publisher's link. The summary block reports how many sources succeeded, how many items were merged, an aggregate sentiment with a bullish/bearish/neutral breakdown, and any feed errors. A failed feed is skipped (never a 500); a total upstream failure is a 502; an empty filter result is a 422; bad input is a 400. Source hosts are fixed server-side (you pass only coin/query), so there is no SSRF surface. - Query params: `{"coin": "BTC", "limit": 15}` - Example response: `{"coin": "BTC", "query": null, "count": 2, "items": [{"title": "Bitcoin rallies past resistance", "link": "https://www.coindesk.com/...", "source": "CoinDesk", "published": "Tue, 30 Jun 2026 14:32:33 +0000", "summary": "BTC climbed as inflows...", "sentiment": {"label": "bullish", "score": 0.66}}], "summary": {"sources_ok": 6, "sources_failed": 0, "total_fetched": 120, "after_dedup": 98, "sentiment": {"label": "bullish", "score": 0.31, "items_scored": 2, "breakdown": {"bullish": 1, "bearish": 0, "neutral": 1}}, "errors": []}, "attribution": "Headlines syndicated from their publishers ..."}` - Tags: crypto, news, sentiment, bitcoin, ethereum, headlines, aggregator, rss, trading, research, market ### `GET /crypto/sentiment` — $0.003 A single composite read on crypto market mood for trading/risk agents. We combine the canonical Crypto Fear & Greed index from alternative.me (current value 0-100, its classification, and a rising/falling/flat trend over a recent history window) with the aggregated sentiment of current headlines across major crypto outlets (scored by a crypto-tuned lexicon), and blend them into one composite bullish/bearish/neutral label and score in [-1, 1]. Pass `coin` (ticker or name) or a free-text `query` to focus the news component on a topic; the Fear & Greed component is market-wide. Each source is best-effort: if one is down it is reported under sources.errors and the composite uses what is available; only a total failure of every source is a 502. The Fear & Greed data is attributed to alternative.me per its terms. Bad input is a 400. - Query params: `{"coin": "ETH"}` - Example response: `{"coin": "ETH", "query": null, "composite": {"label": "bearish", "score": -0.38}, "fear_greed": {"value": 15, "classification": "Extreme Fear", "trend": "falling", "window_points": 14, "history": []}, "news_sentiment": {"label": "bearish", "score": -0.21, "items_scored": 7, "breakdown": {"bullish": 2, "bearish": 4, "neutral": 1}}, "sources": {"fear_greed": true, "news_feeds_ok": 6, "errors": []}, "attribution": "Data by alternative.me"}` - Tags: crypto, sentiment, fear-greed, market, bitcoin, ethereum, trading, signal, index, mood ### `GET /token/risk` — $0.02 One-call rug-check / token-safety score for pre-trade agents. Given an ERC-20 address and an EVM network (base, ethereum, arbitrum, optimism, polygon; default base), we bundle many on-chain reads into one deterministic 0-100 score and a low / medium / high / critical category across six dimensions: contract integrity (source verified, upgradeable proxy, dangerous functions like mint/pause/blacklist via ABI or bytecode selectors), ownership (renounced / paused / proxy admin), holder concentration, liquidity, honeypot (absence of successful sells), and contract age. Each dimension is best-effort and degrades to an unavailable flag rather than failing; a coverage block reports how many were evaluated, and the weighted signals are returned so an agent can re-rank with its own policy. Contract/holder/age data via the public-good Blockscout explorer. Automated risk indicators, not financial advice. Invalid address/network -> 400; not-a-contract -> 404. - Query params: `{"token": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed", "network": "base"}` - Example response: `{"token": "0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed", "network": "base", "chain": "eip155:8453", "risk_score": 58, "risk_category": "high", "reasons": ["Active owner can mint (infinite-supply risk).", "Source not verified on the explorer."], "dimensions": {"contract_integrity": {"verified": false, "dangerous_functions": ["has_mint"]}, "ownership": {"ownership_renounced": false}, "holder_concentration": {"top10_concentration_pct": 34.1}}, "coverage": {"dimensions_total": 6, "dimensions_evaluated": 4, "confidence": 0.67}, "disclaimer": "Automated on-chain risk indicators, not financial advice."}` - Tags: crypto, token, risk, rug-check, honeypot, security, erc20, onchain ### `GET /screen/address` — $0.003 Screen a single crypto address against the consolidated official PUBLIC sanctions lists (US OFAC SDN, UK FCDO, EU consolidated, UN Security Council) that this service refreshes in-process. Returns listed true or false plus, when listed, every matched record: the source list, sanctions program, designated entity name, source reference id, the published address and its currency symbol. EVM addresses match case-insensitively. Pass chain to restrict to one currency symbol. This returns only the fact of a match against a public list, not legal advice. See /screen/sources for list freshness. - Query params: `{"address": "0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9", "chain": "ETH"}` - Example response: `{"listed": true, "query": "0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9", "chain": "ETH", "match_count": 1, "matches": [{"list": "UK", "ref": "RUS0123", "name": "GARANTEX EUROPE OU", "type": "entity", "programs": ["Russia regulations"], "country": null, "matched_address": "0x7FF9cFad3877F21d41Da833E2F775dB0569eE3D9", "currency": "ETH", "match_type": "exact"}], "disclaimer": "Informational match against public sanctions lists; not legal advice. Verify against official sources."}` - Tags: sanctions, compliance, screening, crypto, address, ofac, aml, risk ### `GET /screen/entity` — $0.005 Fuzzy-match a person or organization name (and all published aliases) across the consolidated official PUBLIC sanctions lists (US OFAC SDN, UK FCDO, EU consolidated, UN Security Council). Returns scored matches sorted high to low, each with a match_type of exact, alias or fuzzy, plus the source list, sanctions program, country, designation type (individual, entity or vessel), date of birth for individuals, and the source reference id. Tune min_score (default 85) for recall versus precision and limit the result count. Optionally filter by type. This returns only matches against public lists, not legal advice. - Query params: `{"name": "Saddam Hussein", "type": "individual", "min_score": 85}` - Example response: `{"query": "Saddam Hussein", "min_score": 85, "match_count": 1, "matches": [{"list": "EU", "ref": "EU.27.28", "name": "Saddam Hussein Al-Tikriti", "type": "individual", "programs": ["IRQ"], "country": "IRAQ", "dob": "1937-04-28", "score": 90.0, "match_type": "fuzzy", "matched_name": "Saddam Hussein Al-Tikriti"}], "disclaimer": "Informational match against public sanctions lists; not legal advice. Verify against official sources."}` - Tags: sanctions, compliance, screening, entity, name, aml, kyc, ofac, risk ### `GET /preflight` — $0.005 One-call preflight trust check for a buyer agent about to pay an unfamiliar x402 endpoint. Input: the resource URL (+ optional network hint). Output: a deterministic composite trust score 0-100, a category (trusted / caution / untrusted / unknown), per-dimension flags, reasons and raw weighted signals so the agent can re-rank. Seven dimensions: Bazaar listing (exact URL / origin / payTo), 30-day traction (payers + calls), freshness, suspected wash usage (calls-to-payers ratio + on-chain USDC sender diversity), price vs category median, metadata quality, and payment consistency — a live 402 probe checks the served payTo/network match the listing (catches hijack, spoof or typo-squat). Best-effort per dimension (degrades to unavailable); a coverage block reports how many were evaluated. Data: CDP x402 Bazaar + our on-chain reads and live probe. Automated trust indicators, not a guarantee. Bad url returns 400; a warming catalog returns 503 (no charge). - Query params: `{"url": "https://api.example.com/some-paid-route", "network": "base"}` - Example response: `{"url": "https://api.example.com/some-paid-route", "trust_score": 82, "trust_category": "trusted", "reasons": ["Exact URL listed in the CDP x402 Bazaar catalog.", "Live 402 probe payTo/network match the listing."], "coverage": {"dimensions_total": 7, "dimensions_evaluated": 6, "confidence": 0.86}, "disclaimer": "Automated trust indicators, not a guarantee or financial advice."}` - Tags: x402, trust, preflight, reputation, discovery, bazaar, payments, anti-scam ### `POST /mcp/scan` — $0.01 One-call defensive scanner an agent runs on a tool/MCP manifest BEFORE it grants the tool any capability. Input is the caller's own manifest (a 'tools' list, or a single tool object) or a 'tools' array; nothing is crawled or fetched, so there is no network side effect. Deterministic static analysis across eight dimensions: hidden unicode (zero-width, bidi override, ASCII-smuggling tag chars), prompt injection (override / do-not-tell-user / role-hijack / pseudo-tags), data exfiltration (sensitive credential paths, send-to-URL directives, embedded URLs), dangerous capability (code execution, path traversal, unrestricted file, arbitrary fetch), tool shadowing / cross-origin, rug-pull drift (compare each tool to a caller-pinned hash), obfuscation (encoded blobs, whitespace runs, non-ASCII), and metadata hygiene. Output: a 0-100 risk score, a category (clean / low / suspicious / malicious), per-tool findings with safe truncated evidence, and a manifest_hash plus a tool_hash per tool so the caller can pin a trusted definition and pass it back later as known_hashes to catch a post-approval change. Security indicators, not a guarantee; a clean score is not an endorsement. - Request body: `{"manifest": {"tools": [{"name": "get_weather", "description": "Get the weather for a city.", "inputSchema": {"type": "object", "properties": {"city": {"type": "string"}}}}]}}` - Example response: `{"object": "manifest", "tool_count": 1, "risk_score": 0, "risk_category": "clean", "reasons": [], "findings": [], "per_tool": {"get_weather": {"score": 0, "category": "clean", "tool_hash": "sha256:…", "findings": []}}, "manifest_hash": "sha256:…", "coverage": {"dimensions_total": 8, "dimensions_flagged": [], "tools_scanned": 1}, "disclaimer": "Automated security indicators, not a guarantee."}` - Tags: mcp, security, tool-poisoning, prompt-injection, scanner, agent, safety ### `POST /mcp/inspect` — $0.003 The single-blob form of the MCP security scan: pass one description, prompt or arbitrary text and get the same deterministic static analysis (hidden unicode, prompt injection, exfiltration directives, dangerous-capability and tool-shadowing language, encoded/obfuscated content) as a 0-100 risk score, a category and a list of findings with safe, invisible-escaped evidence. Pure local computation, no network. Security indicators, not a guarantee. - Request body: `{"text": "Get the weather for a city and return a short summary.", "kind": "description"}` - Example response: `{"object": "text", "kind": "description", "risk_score": 0, "risk_category": "clean", "reasons": [], "findings": [], "text_hash": "sha256:…", "coverage": {"dimensions_total": 8, "dimensions_flagged": []}, "disclaimer": "Automated security indicators, not a guarantee."}` - Tags: mcp, security, prompt-injection, text, scanner, agent, safety ### `GET /entity/resolve` — $0.02 One-call cross-registry entity resolution for KYB, compliance, due-diligence and corporate-graph work. Supply exactly ONE primary identifier (name, ticker, cik, lei, qid or isin); the route reconciles the entity across SEC EDGAR, the GLEIF LEI Golden Copy and Wikidata and returns every id it can bridge to (CIK, LEI, QID, ISIN, ticker, EIN) with per-id provenance, the legal name, jurisdiction and status (GLEIF is authoritative here), plus a match block (deterministic or fuzzy, a score, and an ambiguous flag when two registries disagree on a hard id). Add include=hierarchy (or resolve by lei) to also get the GLEIF direct parent, ultimate parent and direct children. The value is the FUSION, not a raw resell: it handles the CIK zero-padding mismatch between SEC and Wikidata and the GLEIF relationship endpoints for you. Partial answers are returned when a source is down (never a 500); one id required otherwise 400; nothing found returns resolved=false. Business-entity metadata only, never data about private individuals. Sources are US-public-domain and CC0. - Query params: `{"ticker": "AAPL", "include": ["hierarchy"]}` - Example response: `{"resolved": true, "query": {"type": "ticker", "value": "AAPL"}, "ids": {"cik": "0000320193", "lei": "HWUPKR0MPOU8FGXBT394", "qid": "Q312", "isin": "US0378331005", "ticker": "AAPL", "ein": "94-2404110"}, "entity": {"legal_name": "Apple Inc.", "jurisdiction": "US-CA", "status": "ACTIVE", "country": "US"}, "sources": {"provenance": {"cik": "sec", "lei": "wikidata", "qid": "sec"}, "errors": {}, "partial": false}, "match": {"method": "deterministic", "score": 100.0, "ambiguous": false}, "attribution": ["SEC EDGAR (public domain)", "GLEIF LEI (CC0)", "Wikidata (CC0)"]}` - Tags: entity, resolution, company, cik, lei, qid, isin, sec, gleif, wikidata, kyb, compliance, identifiers, reconciliation, reference-data ### `GET /entity/search` — $0.008 Fuzzy company-name disambiguation as the light first step of a two-step flow (search then resolve, mirroring the sanctions screen-then-detail pattern). Searches the SEC ticker map, the GLEIF fulltext legal-name index and Wikidata entity search, merges the hits, and ranks them by name similarity. Each candidate carries whatever ids that source knows (QID, LEI, CIK, ticker), a country and a score, so a caller can pick the right entity and then call entity/resolve with a precise id. Optional country filter narrows the set. Returns a partial result when a source is down (never a 500); an empty name is 400. Business-entity metadata only. Sources are US-public-domain and CC0. - Query params: `{"name": "Apple", "limit": 5}` - Example response: `{"query": "Apple", "count": 2, "candidates": [{"name": "Apple Inc.", "qid": "Q312", "lei": "HWUPKR0MPOU8FGXBT394", "cik": "0000320193", "ticker": "AAPL", "country": "US", "score": 100.0, "source": "sec"}, {"name": "Apple Leisure Group", "qid": null, "lei": "254900KZR24L5GN8TE52", "cik": null, "ticker": null, "country": "US", "score": 74.0, "source": "gleif"}], "attribution": ["SEC EDGAR (public domain)", "GLEIF LEI (CC0)", "Wikidata (CC0)"]}` - Tags: entity, search, company, name, disambiguation, lei, cik, qid, sec, gleif, wikidata, kyb, reference-data ### `GET /edgar/financials` — $0.03 One-call normalized fundamentals for financial due-diligence, screening and agent tie-outs. Supply a ticker or CIK; the route pulls the issuer's SEC EDGAR companyfacts and maps the inconsistently-tagged XBRL onto a single canonical schema for the income statement, balance sheet and cash-flow statement. The value is the normalization plus token economy: a raw 10-K companyfacts is megabytes of XBRL, while this returns a compact JSON where every figure carries its real source tag, unit, period (start, end, fiscal year, fiscal period) and the filing it came from (accession, form, filed date and EDGAR index URL) so an agent can trace any number back to the source. Pick annual or quarterly, cap the number of periods, and optionally filter which statements you want. Restated figures (the same period reported with different values across filings) are flagged. Data is about the issuing company, never private individuals; the SEC source is US public domain. - Query params: `{"ticker": "AAPL", "freq": "annual", "periods": 5}` - Example response: `{"found": true, "entity": {"name": "Apple Inc.", "cik": "0000320193", "ticker": "AAPL"}, "freq": "annual", "statements": {"income": [{"line": "revenue", "sourceTag": "RevenueFromContractWithCustomerExcludingAssessedTax", "label": "Revenue", "unit": "USD", "periods": [{"value": 391035000000, "unit": "USD", "period": {"start": "2023-10-01", "end": "2024-09-28", "fy": 2024, "fp": "FY", "frame": "CY2024"}, "filing": {"accn": "0000320193-24-000123", "form": "10-K", "filed": "2024-11-01", "url": "https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/0000320193-24-000123-index.htm"}, "restated": false}]}]}, "restatements": [], "attribution": "SEC EDGAR (public domain); data.sec.gov XBRL frames API"}` - Tags: financials, xbrl, sec, edgar, fundamentals, 10-k, 10-q, income-statement, balance-sheet, cash-flow, due-diligence, cik, ticker ### `GET /edgar/concept` — $0.01 A focused, cheap pull of one financial line-item's history for an issuer. Supply a ticker or CIK and a concept, which can be a canonical name (revenue, grossProfit, netIncome, operatingCashFlow, totalAssets, equity and more) or a raw us-gaap tag if you already know it. The route uses the small SEC companyconcept endpoint (not the full multi-megabyte bundle), so it is the efficient choice when you only need one metric over time. For a canonical name it tries the ordered candidate tags and reports the one actually used, so you get the right series even though issuers tag the same fact differently. Values come as a normalized series, each with its unit, period and the filing it came from. Annual or quarterly; number of periods is capped. Company data only; SEC source is US public domain. - Query params: `{"ticker": "AAPL", "concept": "revenue", "freq": "annual"}` - Example response: `{"found": true, "entity": {"cik": "0000320193", "ticker": "AAPL", "name": "Apple Inc."}, "concept": {"requested": "revenue", "canonical": "revenue", "sourceTag": "RevenueFromContractWithCustomerExcludingAssessedTax", "label": "Revenue", "taxonomy": "us-gaap"}, "freq": "annual", "series": [{"value": 391035000000, "unit": "USD", "period": {"start": "2023-10-01", "end": "2024-09-28", "fy": 2024, "fp": "FY", "frame": "CY2024"}, "filing": {"accn": "0000320193-24-000123", "form": "10-K", "filed": "2024-11-01", "url": "https://www.sec.gov/..."}, "restated": false}], "attribution": "SEC EDGAR (public domain); data.sec.gov XBRL frames API"}` - Tags: financials, xbrl, sec, edgar, concept, time-series, fundamentals, cik, ticker ### `GET /edgar/ratios` — $0.02 Ready-to-use financial ratios derived from an issuer's SEC EDGAR fundamentals, so an agent does not have to pull raw lines and do the arithmetic. Supply a ticker or CIK; the route computes profitability margins (gross, operating, net), returns on assets and equity, liquidity (current ratio), leverage (debt to equity and debt to assets), free cash flow, and period-over-period growth in revenue, net income and operating cash flow. Every computed number carries a derived_from list naming the exact source lines, tags and accession numbers it was built from, so the math is auditable. The result also surfaces restatements (a period reported with different values across filings) and simple red-flag anomalies such as negative equity, a net loss or a current ratio below one. Annual or quarterly; number of periods is capped. These are indicators, not investment advice; company data only; SEC source is US public domain. - Query params: `{"ticker": "AAPL", "freq": "annual", "periods": 5}` - Example response: `{"found": true, "entity": {"name": "Apple Inc.", "cik": "0000320193", "ticker": "AAPL"}, "freq": "annual", "ratios": [{"name": "grossMargin", "kind": "ratio", "latest": 0.462, "change_vs_prev": 0.018, "series": [{"period": {"end": "2024-09-28", "fy": 2024, "fp": "FY"}, "value": 0.462, "derived_from": [{"line": "grossProfit", "sourceTag": "GrossProfit", "accn": "0000320193-24-000123"}, {"line": "revenue", "sourceTag": "RevenueFromContractWithCustomerExcludingAssessedTax", "accn": "0000320193-24-000123"}]}]}], "restatements": [], "anomalies": [], "attribution": "SEC EDGAR (public domain); data.sec.gov XBRL frames API"}` - Tags: ratios, margins, liquidity, leverage, growth, restatement, fundamentals, sec, edgar, xbrl, due-diligence ### `GET /kyb/screen` — $0.008 The light first step of a two-step KYB flow (screen then verify, mirroring the sanctions screen-then-detail pattern). Give a company name and get back ranked GLEIF candidates, each carrying the LEI, legal name, jurisdiction, the registration status (ISSUED, LAPSED, RETIRED, ANNULLED, MERGED and the like) and the GLEIF corroboration level, so an agent can disambiguate the right entity and then call kyb/verify with a precise LEI for the full legitimacy verdict. An optional country filter narrows the set. Returns a partial result when the source is down rather than failing; an empty name is a 400. Business-entity metadata only, never data about individuals. Source is the GLEIF LEI Golden Copy (CC0). - Query params: `{"name": "Apple", "limit": 5}` - Example response: `{"query": "Apple", "count": 2, "candidates": [{"lei": "HWUPKR0MPOU8FGXBT394", "legal_name": "Apple Inc.", "jurisdiction": "US-CA", "country": "US", "registration_status": "ISSUED", "entity_status": "ACTIVE", "corroboration_level": "FULLY_CORROBORATED", "score": 71.4}, {"lei": "254900KZR24L5GN8TE52", "legal_name": "Apple Leisure Group", "jurisdiction": "US-DE", "country": "US", "registration_status": "LAPSED", "entity_status": "ACTIVE", "corroboration_level": "PARTIALLY_CORROBORATED", "score": 55.0}], "attribution": ["GLEIF LEI Golden Copy (CC0)"]}` - Tags: kyb, business, verification, company, screening, lei, gleif, due-diligence, compliance, onboarding, legitimacy ### `GET /kyb/verify` — $0.02 One-call business-legitimacy verification for KYB, counterparty onboarding, vendor due-diligence and anti-fraud. Supply exactly one identifier (name, lei, cik, ticker, isin or qid); the route resolves the entity across the GLEIF LEI Golden Copy, SEC EDGAR and Wikidata, pulls the rich GLEIF record, and returns a legitimacy verdict (real, likely_real, inactive, dissolved or not_found) with a 0-100 risk score and a low, medium, high or critical category. The score is a deterministic weighted sum across dimensions: registry existence and corroboration level, registration status (lapsed, retired, annulled, merged, duplicate), entity active status, renewal and freshness, entity age, shell and registered-agent address heuristics, and lifecycle (successor and expiration). Each fired signal returns its weight and a human-readable reason, so an agent can re-rank with its own policy. The response also names the official registration authority and the registration number, and reports which registries corroborated the entity. Partial answers are returned when a source is down rather than failing; nothing found returns verdict not_found. Business-entity metadata only, never data about individuals. Sources are CC0 and US public domain. Legitimacy indicators, not legal or credit advice. - Query params: `{"lei": "HWUPKR0MPOU8FGXBT394"}` - Example response: `{"verdict": "real", "risk_score": 6, "category": "low", "query": {"type": "lei", "value": "HWUPKR0MPOU8FGXBT394"}, "resolved_ids": {"lei": "HWUPKR0MPOU8FGXBT394", "cik": "0000320193", "qid": "Q312", "isin": "US0378331005", "ticker": "AAPL"}, "entity": {"legal_name": "Apple Inc.", "jurisdiction": "US-CA", "entity_status": "ACTIVE", "registration_status": "ISSUED", "legal_form": "H1UM", "age_days": 5140}, "official_registry": {"code": "RA000598", "organization": "Secretary of State", "country": "US", "jurisdiction": "California", "registered_as": "806592", "website": "https://businesssearch.sos.ca.gov/"}, "signals": [{"signal": "registered_agent_address", "dimension": "address", "severity": "low", "weight": 6, "reason": "The legal address is a known registered-agent address."}], "corroboration": {"gleif": true, "sec": true, "wikidata": true, "authoritative": true}, "attribution": ["GLEIF LEI Golden Copy (CC0)", "SEC EDGAR (public domain)"], "disclaimer": "Automated legitimacy indicators, not legal or credit advice."}` - Tags: kyb, business, verification, legitimacy, risk, due-diligence, compliance, onboarding, anti-fraud, shell-company, lei, gleif, sec, company ### `GET /legal/litigation` — $0.03 Litigation and case-law lookup for due-diligence, KYB and legal-risk workflows. Supply a business entity or party name (optionally with a cik or qid id hint) and get back the US court record: matching cases, judicial opinions and dockets from CourtListener (the Free Law Project), each normalized to case name, court, filing date, reporter citation, docket number, nature of suit and a link to the record, plus the total upstream match count. Choose the record type with type=o for opinions (public-domain case law, the default), type=d for dockets or type=r for RECAP federal dockets. The value is the normalization into a compact cited shape, not a raw resale: we query live within the source API limits and never redistribute bulk dumps. Aggressively cached to respect CourtListener throttling; on a rate limit the response is marked rate_limited and partial rather than failing. Public records about business entities only; natural persons appear solely as publicly-named parties. Not legal advice and not a consumer report; not for FCRA-regulated eligibility decisions. - Query params: `{"name": "Apple Inc", "limit": 10}` - Example response: `{"query": {"name": "Apple Inc", "type": "o"}, "count": 342, "recent": [{"caseName": "Apple Inc. v. Example Corp", "court": "Fed. Cir.", "date": "2024-03-11", "citation": "123 F.3d 456", "docketNumber": "22-1234", "natureOfSuit": "Patent"}], "sources": {"partial": false, "rate_limited": false}}` - Tags: legal, litigation, court, lawsuit, opinion, docket, due-diligence, compliance, courtlistener, public-records ### `GET /legal/patents` — $0.02 US patent-portfolio lookup for due-diligence, competitive-intelligence and IP workflows. Supply an organization name (matched as the patent assignee) or an inventor last name, optionally with a cik or qid id hint, and get back granted patents from the USPTO PatentsView PatentSearch API: patent id, title, grant date, patent type and assignee organizations, newest first, with the total portfolio count. The value is the normalization into a compact cited shape over public-domain USPTO data, not a raw resale. This provider needs a free PatentsView API key injected at runtime; when the key is absent the route still returns cleanly with the provider marked not_configured (partial) rather than failing, and the other legal routes remain live. Patents are an innovation signal and are reported informationally; they do not raise the legal-risk score in /legal/profile. Public records only. Not legal advice and not a consumer report; not for FCRA-regulated eligibility decisions. - Query params: `{"name": "Apple Inc", "limit": 10}` - Example response: `{"query": {"name": "Apple Inc"}, "total": 12000, "recent": [{"patent_id": "11111111", "title": "Example device", "date": "2024-05-07", "type": "utility", "assignees": ["Apple Inc."]}], "sources": {"partial": false, "rate_limited": false}}` - Tags: legal, patents, ip, uspto, assignee, inventor, due-diligence, innovation, patentsview, public-records ### `GET /legal/regulatory` — $0.02 Federal regulatory and enforcement footprint for due-diligence and compliance workflows. Supply a business entity name (optionally with a cik or qid id hint) and get back the documents that name it in the US Federal Register: rules, proposed rules, notices and presidential documents, each normalized to title, document type, issuing agency, publication date, abstract and a link, newest first, with the total match count. Narrow to one agency with the agency slug filter. The value is the normalization over public-domain government data, not a raw resale. Keyless and cached; on an upstream problem the response is marked partial rather than failing. Public records about business entities only. Not legal advice and not a consumer report; not for FCRA-regulated eligibility decisions. - Query params: `{"name": "Apple Inc", "limit": 10}` - Example response: `{"query": {"name": "Apple Inc"}, "count": 57, "recent": [{"title": "Notice of Proposed Rulemaking", "type": "Proposed Rule", "agency": "Federal Trade Commission", "date": "2024-02-20", "html_url": "https://www.federalregister.gov/documents/1", "document_number": "2024-01234"}], "sources": {"partial": false, "rate_limited": false}}` - Tags: legal, regulatory, enforcement, federal-register, compliance, due-diligence, rulemaking, agency, public-records, government ### `GET /legal/profile` — $0.06 One-call composite legal due-diligence dossier for a business entity, and the moat of this service: it does the cross-source normalization and fusion for you rather than reselling three raw feeds. Supply an entity name (optionally an assignee or inventor for patents, an agency filter for regulatory, and a cik or qid id hint) and get back all three dimensions at once — court litigation from CourtListener, the US patent portfolio from USPTO PatentsView, and federal regulatory documents from the Federal Register — each as compact cited records with counts, plus a deterministic legal-risk signal: a 0 to 100 score, a low, medium or high band, per-dimension flags and human-readable reasons, computed from litigation and regulatory record counts weighted by recency. Patents contribute as an innovation signal only and never raise the risk score. The scoring is fully deterministic and data-driven (weights and thresholds live in a registry), so identical inputs give identical outputs. Partial answers are returned when a source is down, rate-limited or unconfigured (never a 500). Public records about business entities only. Not legal advice and not a consumer report; not for FCRA-regulated eligibility decisions. - Query params: `{"name": "Apple Inc", "limit": 5}` - Example response: `{"query": {"name": "Apple Inc"}, "litigation": {"count": 342, "recent": []}, "patents": {"total": 12000, "recent": []}, "regulatory": {"count": 57, "recent": []}, "legal_risk": {"score": 21, "band": "low", "flags": {"has_litigation": true}, "reasons": ["2 litigation records within 3y"]}, "sources": {"partial": false, "rate_limited": false}}` - Tags: legal, due-diligence, profile, legal-risk, litigation, patents, regulatory, compliance, kyb, public-records ### `GET /legislative/bill` — $0.02 Federal bill lookup for legislative-tracking, policy-intelligence and compliance workflows. Supply a bill id like hr3076-118 (or congress + billType + billNumber) and get back the normalized bill from the Congress.gov API (Library of Congress): title, sponsor and cosponsor count, committees, policy area, origin chamber, whether it became law, its full action history, and — the differentiator — a computed, stateless LIFECYCLE: the ordered stages the bill has reached (introduced, referred to committee, reported, passed House, passed Senate, resolving differences, to president, became law or vetoed or failed), each with the date and the source action text. When a free api.data.gov key is configured, GovInfo text and PDF links are attached as a supplement. The value is the fusion and lifecycle classification into a compact cited shape over public-domain US-government data, not a raw resale; we query live within the source API limits and never redistribute bulk dumps. Without the key the route returns cleanly marked not_configured rather than failing. Informational aggregation of public records; not legal advice. - Query params: `{"bill_id": "hr3076-118"}` - Example response: `{"query": {"bill_id": "hr3076-118"}, "found": true, "bill": {"congress": 118, "type": "HR", "number": "3076", "title": "Example Act", "introducedDate": "2023-05-01", "becameLaw": true}, "lifecycle": [{"stage": "introduced", "date": "2023-05-01"}, {"stage": "became_law", "date": "2023-12-20"}], "sources": {"partial": false, "rate_limited": false}}` - Tags: legislative, congress, bill, legislation, sponsor, vote, lifecycle, govtrack, congress-gov, public-records ### `GET /legislative/search` — $0.01 Federal-bill discovery for legislative-tracking and policy-monitoring workflows. Supply a keyword or phrase (optionally scoped to a single Congress, and optionally narrowed by a policy-area keyword) and get back a ranked list of matching bills from the Congress.gov API (Library of Congress): each with its bill id, type, number, title and latest action, newest activity first, plus the total upstream match count. Use the returned bill_id with /legislative/bill for the full record and lifecycle, or with /legislative/timeline for a date-windowed event diff. The value is the normalization into a compact cited shape over public-domain US-government data, not a raw resale; queried live within the source API limits. Needs a free api.data.gov key at runtime; absent, the route returns cleanly marked not_configured rather than failing. Informational aggregation of public records; not legal advice. - Query params: `{"q": "artificial intelligence", "congress": 118, "limit": 10}` - Example response: `{"query": {"keyword": "artificial intelligence", "congress": 118}, "count": 42, "returned": 1, "results": [{"bill_id": "hr4568-118", "type": "HR", "number": "4568", "title": "Example AI Act"}], "sources": {"partial": false, "rate_limited": false}}` - Tags: legislative, congress, bill, search, legislation, policy, keyword, congress-gov, public-records, government ### `GET /legislative/rulemaking` — $0.02 US proposed-rulemaking and public-comment intelligence for regulatory-affairs and compliance workflows. Supply a Regulations.gov docket id, or search by keyword and agency, and get back proposed-rule documents from the Regulations.gov API (eRulemaking Program): document id and type, docket id, comment start and end dates, whether the docket is open for comment, the Federal Register document number and posted date — plus, for a specific docket, the COUNT of public comments (a count and summary, never a raw dump of comment bodies). Every result is cross-linked to Federal Register proposed-rule metadata (keyless linkback). With a free api.data.gov key you get the regulations.gov docket and comment counts; WITHOUT the key the route degrades gracefully to Federal-Register-only proposed-rule metadata (keyless, marked keyless_degraded) rather than failing. The value is the fusion and normalization over public-domain US-government data, not a raw resale. Informational aggregation of public records; not legal advice. - Query params: `{"keyword": "clean water", "agency": "EPA", "limit": 10}` - Example response: `{"query": {"keyword": "clean water", "agency": "EPA"}, "count": 3, "documents": [{"documentId": "EPA-HQ-OAR-2021-0317-0001", "documentType": "Proposed Rule", "docketId": "EPA-HQ-OAR-2021-0317", "openForComment": false}], "commentCount": 1200, "keyless_degraded": false, "sources": {"partial": false, "rate_limited": false}}` - Tags: regulatory, rulemaking, regulations, proposed-rule, docket, public-comment, federal-register, compliance, agency, public-records ### `GET /legislative/timeline` — $0.015 What changed on a US federal bill over a period — a stateless event diff for legislative-tracking, alerting and policy-intelligence workflows. Supply a bill id (or congress + billType + billNumber) and optionally a since date or a window_days, and get back the bill's lifecycle events within that window: the ordered stages it reached (introduced, referred to committee, reported, passed House, passed Senate, resolving differences, to president, became law or vetoed or failed), each with its date and the source action text, plus the bill's current stage. The classification is STATELESS — it is derived entirely from the bill's own upstream action history from the Congress.gov API (Library of Congress), not from any stored snapshot, so the same inputs always give the same diff and there is no memory-store dependency. Use it to answer did this bill move since date X. Needs a free api.data.gov key at runtime; absent, the route returns cleanly marked not_configured rather than failing. Informational aggregation of public records; not legal advice. - Query params: `{"bill_id": "hr3076-118", "window_days": 90}` - Example response: `{"query": {"bill_id": "hr3076-118", "window_days": 90}, "found": true, "current_stage": "became_law", "events": [{"stage": "passed_senate", "date": "2023-11-15"}, {"stage": "became_law", "date": "2023-12-20"}], "sources": {"partial": false, "rate_limited": false}}` - Tags: legislative, congress, bill, timeline, lifecycle, event-diff, legislation, tracking, congress-gov, public-records ### `GET /nutrition/search` — $0.002 Search the USDA FoodData Central database (350K+ foods, U.S. government public domain) by product or ingredient name. Returns ranked matches, each with its FoodData Central id (fdc_id — pass it to /nutrition/food for the full profile), description, USDA data type (Foundation / SR Legacy / Branded / Survey / Experimental), brand, GTIN/UPC, serving size and the key macronutrients (calories, protein, fat, carbohydrates) per 100g. Optional `limit` (1-25) and `dataType` filter. Empty query returns 400; if the server has no USDA key configured the route returns 503 (the barcode route needs no key). Never 500. - Query params: `{"q": "cheddar cheese", "limit": 5}` - Example response: `{"query": "cheddar cheese", "total_hits": 4231, "count": 1, "matches": [{"fdc_id": 2057648, "description": "CHEDDAR CHEESE", "data_type": "Branded", "brand": "GRAFTON VILLAGE", "macros_per_100g": {"calories_kcal": 393.0, "protein_g": 21.4, "fat_g": 28.6, "carbohydrates_g": 3.6}}], "attribution": "Data from USDA FoodData Central (public domain, U.S. Department of Agriculture)"}` - Tags: nutrition, food, usda, search, calories, macros, diet ### `GET /nutrition/food` — $0.003 Full normalized nutrition profile for one USDA FoodData Central food, keyed by its fdc_id (obtain it from /nutrition/search). Returns a single unified schema: calories plus macronutrients (protein, total fat, saturated fat, trans fat, carbohydrates, sugars, fiber, sodium, salt, cholesterol) both per 100g AND per serving, the serving size (amount, unit, household measure), brand, food category, ingredient list, and any additional micronutrients (vitamins and minerals) the record carries. This is the same normalized schema returned by /nutrition/barcode, so USDA and Open Food Facts results are directly comparable. Unknown fdc_id returns 404; missing server USDA key returns 503. Never 500. - Query params: `{"fdc_id": 2057648}` - Example response: `{"source": "usda_fdc", "id": 2057648, "description": "CHEDDAR CHEESE", "data_type": "Branded", "brand": "GRAFTON VILLAGE", "serving_size": {"amount": 28.0, "unit": "g", "household": "1 ONZ"}, "nutrients": {"per_100g": {"calories_kcal": 393.0, "protein_g": 21.4, "fat_g": 28.6, "saturated_fat_g": 21.4, "carbohydrates_g": 3.6, "sodium_mg": 679.0}, "per_serving": {"calories_kcal": 110.0, "protein_g": 6.0}}, "attribution": "Data from USDA FoodData Central (public domain, U.S. Department of Agriculture)"}` - Tags: nutrition, food, usda, macros, micronutrients, calories, profile ### `GET /nutrition/barcode` — $0.003 Look up a packaged food product worldwide by its GTIN/barcode (EAN-8, UPC-A, EAN-13 or GTIN-14) through Open Food Facts (3M+ products, ODbL open data). Returns the SAME normalized nutrition schema as /nutrition/food — calories and macros per 100g and per serving — PLUS packaged-product extras Open Food Facts provides: allergens, dietary flags (vegan, vegetarian, palm-oil-free as true/false/null when unknown), the Nutri-Score grade (a-e), the NOVA processing group (1-4), product labels, brand, quantity and ingredient text. This barcode path is the global-brand coverage USDA-only sources lack. The barcode must be 8-14 digits (else 400); an unknown product returns 404. Every response carries ODbL attribution. Needs no API key. Never 500. - Query params: `{"barcode": "3017620422003"}` - Example response: `{"source": "openfoodfacts", "barcode": "3017620422003", "description": "Nutella", "brand": "Nutella", "nutrients": {"per_100g": {"calories_kcal": 539.0, "sugars_g": 56.3, "fat_g": 30.9, "saturated_fat_g": 10.6}}, "allergens": ["milk", "nuts", "soybeans"], "diet_flags": {"vegan": false, "vegetarian": null, "palm_oil_free": false}, "nutriscore_grade": "e", "nova_group": 4, "attribution": "Data © Open Food Facts contributors, ODbL"}` - Tags: nutrition, food, barcode, gtin, openfoodfacts, allergens, vegan ### `GET /hazard/risk` — $0.02 One-call due-diligence hazard profile for a US location, built entirely from public-domain US-government data. Accepts a US {address} (auto-geocoded), {lat, lon}, or a {fips} (5-digit county or 11-digit census tract). Returns the FEMA National Risk Index composite — overall Risk Index score + rating + national percentile, Expected Annual Loss in USD, social-vulnerability and community-resilience ratings — plus a per-hazard breakdown across all 18 NRI hazards (earthquake, wildfire, hurricane, tornado, riverine and coastal flooding, hail, heat/cold wave, drought, landslide, and more) with each hazard's risk score, rating, annual frequency, and expected annual loss. A nested FEMA flood-zone lookup adds the Special Flood Hazard Area flag, flood zone, and base flood elevation for the point. Tract-level where available, county fallback otherwise. Every value cites its FEMA source and NRI version. Risk indicators for informational due-diligence, not insurance/engineering/legal advice. US coverage only; outside the US returns 404, bad input 400, never 500. - Query params: `{"address": "1 World Way, Los Angeles, CA"}` - Example response: `{"location": {"county": "Los Angeles", "county_fips": "06037", "tract_fips": "06037206202", "level": "tract"}, "composite": {"risk_score": 96.3, "risk_rating": "Relatively High", "national_percentile": 96.3, "expected_annual_loss_usd": 3265266, "social_vulnerability": "Very High", "community_resilience": "Very Low"}, "hazards": [{"code": "ERQK", "label": "Earthquake", "risk_score": 99.3, "rating": "Very High", "eal_usd": 1200000}], "flood": {"in_sfha": false, "flood_zone": "X (unmapped / minimal risk)"}, "source": "FEMA National Risk Index (public domain), via FEMA ArcGIS Online"}` - Tags: hazard, risk, property, real-estate, insurance, flood, fema, nri, due-diligence, us ### `GET /hazard/flood` — $0.008 Point lookup against the FEMA National Flood Hazard Layer (public domain) for a US location. Accepts a US {address} (auto-geocoded) or {lat, lon}. Returns whether the point falls inside a Special Flood Hazard Area (the 1%-annual-chance / 100-year floodplain), the FEMA flood zone designation (for example AE, VE, X), any zone subtype, the static base flood elevation in feet where published, and a human-readable hazard description. A point outside any mapped flood polygon is a valid result (mapped=false, zone X / minimal risk), not an error. Flood indicators for informational due-diligence, not an official FEMA determination or insurance advice. US coverage; bad input returns 400, never 500. - Query params: `{"lat": 25.77, "lon": -80.19}` - Example response: `{"lat": 25.77, "lon": -80.19, "in_sfha": true, "flood_zone": "AE", "zone_subtype": null, "static_bfe_ft": 9, "mapped": true, "description": "1% Annual Chance Flood Hazard", "source": "FEMA National Flood Hazard Layer (public domain), via ArcGIS Living Atlas"}` - Tags: flood, flood-zone, sfha, fema, nfhl, property, insurance, us ### `GET /hazard/seismic` — $0.005 Seismic design parameters for a US location from the USGS ASCE 7 building-codes web service (public domain, no key). Accepts a US {address} (auto-geocoded) or {lat, lon}. Returns the mapped spectral accelerations Ss and S1, site-adjusted SMS/SM1, design values SDS and SD1, the Seismic Design Category, peak ground acceleration, and long-period transition. Optional {ref_doc} selects the ASCE 7 edition (asce7-22 default, asce7-16, asce7-10); {risk_category} sets occupancy category I to IV (default II); {site_class} sets the soil class A to E (default D, the code default when a geotechnical study is unavailable). Design indicators for informational due-diligence, not a substitute for a licensed engineer. US coverage; outside the US returns 404, bad input 400, never 500. - Query params: `{"lat": 34.05, "lon": -118.24}` - Example response: `{"lat": 34.05, "lon": -118.24, "ss": 2.24, "s1": 0.72, "sds": 1.51, "sd1": 1.1, "seismic_design_category": "D", "pga": 0.87, "reference_document": "ASCE7-22", "risk_category": "II", "site_class": "D", "source": "USGS Seismic Design (ASCE 7) building-codes web service (public domain)"}` - Tags: seismic, earthquake, asce7, usgs, building-code, property, us ### `GET /govcon/awards` — $0.01 One call to search the authoritative record of awarded US federal spending (contracts, IDVs, grants, loans, direct payments) from USASpending.gov, the US Treasury's official open API under the DATA Act. Supply any combination of award_type (a friendly group such as contracts or grants), recipient/contractor name, awarding agency, NAICS industry code, a description keyword and a federal fiscal year; the route builds the upstream filter for you, returns a normalized list of awards (award id, recipient, amount, awarding and sub agency, start and end dates, description, and a generated_internal_id you can pass to /govcon/award for full drill-down), and adds a computed summary over the returned page (total dollars, top recipients and top agencies). The value is the normalization plus the computed signals, not a raw resell. Sort by amount or date. Partial answers are returned if the upstream is briefly unavailable (never a 500); bad input is an honest 400. This is the awarded-spending layer for sales-intelligence, competitive-intelligence and vendor due-diligence agents; forward-looking solicitations (SAM.gov) are a planned separate route. Data is US public domain (CC0), attributed to USAspending.gov on every response. - Query params: `{"award_type": "contracts", "recipient": "Lockheed Martin", "year": 2024, "limit": 10}` - Example response: `{"count": 1, "has_next": true, "awards": [{"award_id": "Z61H", "recipient": "LOCKHEED MARTIN CORPORATION", "amount": 16416.33, "awarding_agency": "Department of Defense", "generated_internal_id": "CONT_AWD_Z61H_9700_FA822408G0001_9700"}], "summary": {"count": 1, "total_amount": 16416.33}, "attribution": ["Data from USAspending.gov (U.S. Treasury, CC0 public domain)"]}` - Tags: govcon, government, federal, contracts, grants, procurement, usaspending, awards, naics ### `GET /govcon/recipient` — $0.01 A one-call federal footprint for a single contractor, fusing what would otherwise be three or more separate USASpending.gov queries into one object. Give a recipient name (or a UEI) and get the total federal dollars over the window, the matched recipient entities with their UEIs (a company name can span several recipient records, which this reconciles), the top awarding agencies buying from them, the top NAICS industries they win under, a per-fiscal-year spend trend, and their most recent awards each with a generated_internal_id for drill-down via /govcon/award. Pin a specific fiscal year to scope the aggregates, or take the default multi-year lookback. The value is the fusion and the computed trend, not a raw resell. Cross-link the returned name or UEI to /entity/resolve to bridge to CIK, LEI and QID for full KYB. Partial answers are returned if a source block is briefly unavailable (never a 500); a missing recipient is a 400. Data is US public domain (CC0), attributed to USAspending.gov on every response. - Query params: `{"recipient": "Lockheed Martin"}` - Example response: `{"recipient": {"name": "Lockheed Martin", "uei": "G4KDGE4JFFK7"}, "total_federal_amount": 21614748273.82, "top_agencies": [{"name": "Department of Defense", "amount": 50837516929.93}], "trend_by_fiscal_year": [{"fiscal_year": 2024, "total": 21614748273.82}], "attribution": ["Data from USAspending.gov (U.S. Treasury, CC0 public domain)"]}` - Tags: govcon, government, federal, contractor, recipient, vendor, procurement, usaspending, spending, uei, due-diligence, sales-intelligence, public-data ### `GET /govcon/agency` — $0.008 A one-call procurement profile for a US federal agency, fusing the USASpending.gov toptier-agency reference table with category aggregations. Give an agency name (matched case-insensitively, with abbreviation and toptier-code fallbacks) or an exact toptier code and get the agency's reported obligations, outlays and budget authority for its active fiscal year, plus the top vendors it buys from, the top NAICS industries and the top product and service codes (PSC) it spends under. Scope the vendor and industry rankings by award-type group and fiscal year. The value is the fusion of the authoritative agency totals with the ranked breakdowns, not a raw resell. Useful for competitive-intelligence and market-sizing agents mapping who sells what to which agency. Partial answers are returned if a block is briefly unavailable (never a 500); a missing agency is a 400. Data is US public domain (CC0), attributed to USAspending.gov on every response. - Query params: `{"agency": "National Aeronautics and Space Administration"}` - Example response: `{"agency": {"name": "NASA", "toptier_code": "080", "obligated_amount": 764117585.8}, "top_vendors": [{"name": "CALIFORNIA INSTITUTE OF TECHNOLOGY", "amount": 2175598667.68}], "top_naics": [{"name": "Aircraft Manufacturing", "code": "336411"}], "attribution": ["Data from USAspending.gov (U.S. Treasury, CC0 public domain)"]}` - Tags: govcon, government, federal, agency, procurement, obligations, outlays, vendors, naics, psc, usaspending, public-data, competitive-intelligence ### `GET /govcon/award` — $0.005 The drill-down companion to /govcon/awards: pass a generated_internal_id from a search result and get the full normalized detail of that single federal award. Returns the award id (PIID or FAIN), award type and description, total obligation and base-and-all-options value, the date signed and full period of performance, the awarding agency hierarchy (toptier, subtier and contracting office) and the recipient with its UEI and parent entity. The value is the clean normalization of a verbose upstream record into a compact object. A missing id returns found=false (not an error); a malformed id is a 400. Data is US public domain (CC0), attributed to USAspending.gov on every response. - Query params: `{"generated_internal_id": "CONT_AWD_Z61H_9700_FA822408G0001_9700"}` - Example response: `{"found": true, "award": {"award_id": "Z61H", "type": "C", "type_description": "DELIVERY ORDER", "total_obligation": 16416.33, "date_signed": "2012-11-08", "awarding_agency": {"toptier": "Department of Defense", "subtier": "Defense Logistics Agency"}, "recipient": {"name": "LOCKHEED MARTIN CORPORATION", "uei": "G4KDGE4JFFK7"}}, "attribution": ["Data from USAspending.gov (U.S. Treasury, CC0 public domain)"]}` - Tags: govcon, government, federal, award, contract, grant, detail, drill-down, usaspending, procurement, public-data ### `GET /freight/carrier` — $0.02 One-call carrier vetting for freight brokers, 3PLs, load boards and logistics agents about to tender a load. Supply exactly one identifier (dot, mc or name) and, optionally, the haul_type you need (general, hazmat, household_goods, passengers or oil). The route resolves the carrier in the FMCSA Company Census and returns a fit-to-haul verdict (fit, caution, unfit or not_found) with a 0-100 fit score and an excellent, good, fair or poor category. The score is a deterministic weighted model across dimensions: operating authority and carrier status (active, inactive or pending, and whether an MC/MX/FF for-hire docket is active), operation fit (interstate versus intrastate), hazmat fit (does the carrier carry a hazmat flag when a hazmat haul is requested), FMCSA safety rating (satisfactory, conditional or unsatisfactory), history (prior authority revocation, a reincarnated-carrier signal), registration freshness (new entrant and overdue MCS-150 biennial update), address heuristics (PO-box or care-of physical address, physical and mailing state mismatch) and fleet anomalies (zero power units or drivers while active). Each fired signal returns its weight and a human-readable reason so an agent can re-rank with its own policy, and a coverage block reports which dimensions were evaluated. Insurance-on-file adequacy and CSA/SMS safety percentiles are an optional enrichment tier that lights up when an FMCSA webKey is configured; otherwise coverage marks them unavailable and the verdict is built from the keyless census dimensions. Partial answers are returned when the source is down rather than failing; nothing found returns verdict not_found. Business and carrier metadata only, never personal data about drivers or officers. Source is the FMCSA Company Census via the US DOT public-domain Socrata API. Carrier vetting indicators, not legal, safety or compliance advice; verify authority and insurance directly with FMCSA before dispatch. - Query params: `{"dot": "284477", "haul_type": "hazmat"}` - Example response: `{"verdict": "fit", "fit_score": 100, "category": "excellent", "haul_type": "hazmat", "carrier": {"dot_number": "284477", "mc_number": "MC-193481", "legal_name": "WACCAMAW TRANSPORT INC", "carrier_status": "active", "authority_status": "active", "operation": "interstate", "hazmat": true, "safety_rating": "satisfactory", "fleet": {"power_units": 96, "drivers": 95}, "location": {"state": "NC"}}, "signals": [], "reasons": ["No adverse vetting indicators detected."], "coverage": {"insurance_tier": "unavailable (no FMCSA webKey)"}, "disclaimer": "Carrier vetting indicators, not legal or compliance advice."}` - Tags: freight, logistics, carrier, trucking, fmcsa, dot, mc-number, vetting, due-diligence, broker, supply-chain, compliance ### `GET /freight/lookup` — $0.008 The light first step of a two-step carrier-vetting flow (lookup then carrier, mirroring the sanctions and KYB screen-then-verify pattern). Give a carrier name and get back ranked FMCSA Company Census candidates, each carrying its USDOT number, its MC/MX/FF docket, the legal name, the physical state, the decoded carrier status (active, inactive or pending), the operating-authority status and the operation class (interstate or intrastate), so an agent can disambiguate the right carrier and then call freight/carrier with a precise DOT number for the full fit-to-haul verdict. An optional state filter narrows the set; ranking is exact then prefix then substring, active carriers first. Returns an empty list when nothing matches and a partial result when the source is down rather than failing; an empty name is a 400. Carrier and business metadata only, never data about individuals. Source is the FMCSA Company Census via the US DOT public-domain Socrata API. - Query params: `{"name": "Waccamaw Transport", "state": "NC"}` - Example response: `{"query": "WACCAMAW TRANSPORT", "count": 1, "candidates": [{"dot_number": "284477", "mc_number": "MC-193481", "legal_name": "WACCAMAW TRANSPORT INC", "state": "NC", "carrier_status": "active", "authority_status": "active", "operation": "interstate"}], "attribution": ["FMCSA Company Census via the US DOT Socrata SoDA API"]}` - Tags: freight, logistics, carrier, trucking, fmcsa, dot, mc-number, search, lookup, broker, supply-chain ### `GET /safety/vehicle` — $0.03 One-call vehicle due-diligence for a buying agent, a used-car shopper or an insurance/fleet workflow. Supply the make, model and year, or just a 17-character VIN (we decode it to make/model/year via the NHTSA vPIC decoder), and get back a fused, normalized and cited safety picture drawn entirely from public-domain US government data: every open NHTSA safety recall (campaign number, component, summary, consequence, remedy, and the severe Do-Not-Drive park-it and Park-Outside fire-risk flags); an aggregated complaint summary from the NHTSA complaints database (total and recent counts of crashes, fires, injuries and deaths plus the top components, never the raw personal complaint bodies); and the 5-star NCAP safety rating walk (overall, front, side and rollover). On top of the raw registries the route computes a deterministic 0 to 100 risk score with a low, medium, high or critical band, per-dimension flags and human-readable reasons, all from data-driven weights so identical inputs give identical outputs. The moat is the fusion of three separate government registries under one query plus the risk score, not a resale. Partial answers are returned if one registry is briefly down (never a 500). Public government data only. These are automated risk indicators, not safety advice and not a guarantee; verify current recall status with the manufacturer before acting. - Query params: `{"make": "Honda", "model": "Accord", "year": 2015}` - Example response: `{"vehicle_identity": {"make": "HONDA", "model": "ACCORD", "year": "2015"}, "recalls_count": 5, "complaints_summary": {"count": 592, "recent": {"crash": 3, "fire": 0, "injuries": 1, "deaths": 0}}, "safety_rating": {"overall": "5", "rollover": "5"}, "risk_score": {"score": 36, "band": "medium", "flags": {"has_open_recall": true, "do_not_drive": false}}, "sources": {"partial": false}}` - Tags: safety, vehicle, car, recall, nhtsa, vin, complaints, safety-rating, due-diligence, risk-score ### `GET /safety/product` — $0.02 One-call product safety due-diligence for a shopping agent or a compliance workflow. Supply a brand or product name and, optionally, a domain to target (all, consumer, food, drug or device), and get back matched recalls fused from two public-domain US government registries: the Consumer Product Safety Commission SaferProducts recalls (consumer goods) and the openFDA enforcement reports for food, drug and medical-device recalls. Each match is normalized to one cited shape (source, recall id, date, hazard, FDA hazard classification, remedy, active or terminated status, distribution and a link where available), fuzzy-matched to the query and de-duplicated across sources, with a match_score so the caller can re-rank. On top of the raw registries the route computes a deterministic 0 to 100 risk score with a low, medium, high or critical band, per-dimension flags and human-readable reasons, driven by the highest FDA hazard class present (Class I is the most serious), whether any recall is still active, the recall count and an injury or death hazard lexicon. The scoring is fully data-driven so identical inputs give identical outputs. The moat is the cross-registry fusion plus the risk score, not a resale; a new registry is one row in the source registry. Partial answers are returned if one source is briefly down (never a 500). openFDA data is used under its terms and does not imply FDA endorsement. These are automated risk indicators, not safety advice and not a guarantee. - Query params: `{"query": "Fisher-Price stroller", "domain": "all"}` - Example response: `{"query": {"query": "peanut butter", "domain": "all"}, "matched_count": 3, "matched_recalls": [{"source": "openfda_food", "classification": "Class I", "status": "terminated", "date": "2022-05-20", "hazard": "Salmonella contamination", "match_score": 100}], "risk_score": {"score": 57, "band": "high", "flags": {"max_fda_classification": "Class I"}}, "sources": {"partial": false}}` - Tags: safety, product, recall, cpsc, openfda, food, drug, device, consumer-safety, risk-score ### `GET /energy/petroleum` — $0.01 One call for authoritative US petroleum market data from the U.S. Energy Information Administration (EIA), normalized with computed signals. Metrics: gas_prices and diesel_prices (weekly retail average, selectable by PADD region — us, east_coast, midwest, gulf_coast, rocky_mountain, west_coast), crude_wti and crude_brent (daily spot in dollars per barrel), and weekly inventories crude_stocks, gasoline_stocks and distillate_stocks (thousand barrels). Every response carries the latest value with its EIA period and units, the change and percent change versus the previous period, a short history array (set history=N, up to 120 points), and — for regional retail prices — a regional_spread block giving the difference against the national average. Data is US-government public domain; the required attribution string is included. Unknown metric or region returns 400, an empty result 404, an upstream failure 502, and a missing key 503. - Query params: `{"metric": "gas_prices", "region": "west_coast", "history": 8}` - Example response: `{"metric": "gas_prices", "region": "west_coast", "unit": "$/gal", "as_of": "2026-06-29", "latest": {"period": "2026-06-29", "value": 4.42, "units": "$/GAL"}, "change": {"change": -0.08, "change_pct": -1.78}, "regional_spread": {"vs": "us", "spread": 0.59}}` - Tags: energy, petroleum, oil, gasoline, diesel, crude, wti, brent, eia, prices, inventory ### `GET /energy/natural-gas` — $0.01 Authoritative US natural gas data from the U.S. Energy Information Administration (EIA). Metric henry_hub returns the daily Henry Hub natural gas spot price (dollars per million Btu) with the latest value, change and percent change versus the prior trading day, and a short history array. Metric storage returns weekly working natural gas in underground storage (billion cubic feet) for the Lower 48 or one of the EIA storage regions (east, midwest, south_central, mountain, pacific), with the latest level and the week-over-week change and percent change (the number markets watch on the Thursday EIA storage report). Set history=N (up to 120) for a longer series. Data is US-government public domain; the required attribution is included. Unknown metric/region returns 400, empty 404, upstream failure 502, missing key 503. - Query params: `{"metric": "storage", "region": "east", "history": 6}` - Example response: `{"metric": "storage", "region": "east", "unit": "Bcf", "frequency": "weekly", "as_of": "2026-06-26", "latest": {"period": "2026-06-26", "value": 620.0, "units": "BCF"}, "wow_change": {"previous_value": 598.0, "change": 22.0, "change_pct": 3.68}, "attribution": "Source: U.S. Energy Information Administration"}` - Tags: energy, natural-gas, henry-hub, storage, eia, prices, inventory ### `GET /energy/electricity` — $0.008 Authoritative US electricity data from the U.S. Energy Information Administration (EIA). Metric generation_mix returns the latest hourly electricity generation by fuel type for a grid region (us or a regional aggregate such as texas, california, new_england) with each fuel's megawatthours and percentage of the generation total, the renewable share, and a separate storage block (battery/pumped storage are excluded from the generation percentages because they can be negative when charging). Metric demand returns the latest hourly electricity demand for a grid region with the change versus the prior hour. Metric retail_price returns the average monthly retail electricity price in cents per kilowatt-hour by state (a two-letter state code or US for the national total) for all sectors, with the month-over-month change and a short history. Data is US-government public domain; the required attribution is included. Unknown metric/region/state returns 400, empty 404, upstream failure 502, missing key 503. - Query params: `{"metric": "generation_mix", "region": "texas"}` - Example response: `{"metric": "generation_mix", "region": "texas", "unit": "MWh", "as_of": "2026-07-03T03", "total_generation_mwh": 640000.0, "renewable_share_pct": 32.4, "mix": [{"fueltype": "NG", "value_mwh": 286795.0, "pct": 44.8}]}` - Tags: energy, electricity, power, grid, generation, demand, retail-price, eia, fuel-mix ### `GET /energy/renewables` — $0.008 The renewable share of US electricity generation, computed from the U.S. Energy Information Administration (EIA) hourly grid monitor. For a grid region (us or a regional aggregate such as california, texas, new_england) it returns the renewable share as a percentage of the latest hour's total generation, the renewable megawatthours, the total megawatthours, and the list of contributing renewable fuels (solar, wind, hydro, geothermal, and solar/wind paired with battery storage). Biomass is not separable at grid-monitor granularity (it is folded into other). A clean single number for ESG, carbon-intensity and clean-energy agents. Data is US-government public domain; the required attribution is included. Unknown metric/region returns 400, empty 404, upstream failure 502, missing key 503. - Query params: `{"metric": "share", "region": "california"}` - Example response: `{"metric": "share", "region": "california", "frequency": "hourly", "as_of": "2026-07-03T03", "renewable_share_pct": 41.7, "renewable_generation_mwh": 12500.0, "total_generation_mwh": 30000.0, "attribution": "Source: U.S. Energy Information Administration"}` - Tags: energy, renewables, solar, wind, hydro, geothermal, clean-energy, grid, eia, esg ### `GET /quant/options` — $0.003 European Black-Scholes helper with continuous dividend yield q. op=price returns the fair value. op=greeks returns the price together with delta, gamma, vega (per 1% vol), theta (per calendar day) and rho (per 1% rate). op=iv recovers the implied volatility from a supplied market_price using a Newton solver with a bisection fallback that is guaranteed to converge. The normal CDF uses math.erf. Reference vector S=K=100, T=1, r=0.05, sigma=0.2 gives call 10.4506 and put 5.5735. Pure local computation, no market data fetched. - Query params: `{"op": "greeks", "S": 100, "K": 100, "T": 1, "r": 0.05, "sigma": 0.2, "type": "call"}` - Example response: `{"op": "greeks", "type": "call", "price": 10.4506, "delta": 0.6368, "gamma": 0.0188, "vega": 0.3752, "theta": -0.0176, "rho": 0.5323, "disclaimer": "computation only, not financial advice"}` - Tags: quant, options, black-scholes, greeks, implied-volatility, derivatives ### `POST /quant/risk` — $0.003 Compute risk and performance metrics over a returns array. Available metrics are a data-driven registry: mean, std, volatility (annualized), var_historical, var_parametric (Gaussian), cvar (expected shortfall), downside_deviation, sharpe, sortino, max_drawdown, calmar. Sharpe and Sortino are annualized by periods_per_year; VaR and CVaR use the confidence level. Losses are reported as positive numbers. The array is capped at 10000 entries. Pure local computation. - Request body: `{"returns": [0.01, -0.02, 0.03, -0.01, 0.02], "metrics": ["sharpe", "var_historical", "max_drawdown"], "confidence": 0.95, "periods_per_year": 252}` - Example response: `{"count": 5, "confidence": 0.95, "periods_per_year": 252, "metrics": {"sharpe": 4.59, "var_historical": 0.018, "max_drawdown": 0.02}, "disclaimer": "computation only, not financial advice"}` - Tags: quant, risk, var, cvar, sharpe, sortino, drawdown, portfolio ### `GET /quant/kelly` — $0.001 Kelly-criterion sizing. Supply win_prob and win_loss_ratio for the classic form f = (p*b - (1-p)) / b, or supply edge and odds for f = edge/odds. The reference vector p=0.6, b=1 gives f=0.2. An optional fraction multiplier applies fractional Kelly, and an optional bankroll turns the fraction into a position size. By default the fraction is clamped to [0, 1]. Pure local computation. - Query params: `{"win_prob": 0.6, "win_loss_ratio": 1, "fraction": 0.5, "bankroll": 10000}` - Example response: `{"kelly_fraction": 0.2, "clamped": true, "applied_fraction": 0.1, "win_prob": 0.6, "win_loss_ratio": 1, "position_size": 1000.0, "disclaimer": "computation only, not financial advice"}` - Tags: quant, kelly, position-sizing, bankroll, betting ### `GET /quant/montecarlo` — $0.005 Monte-Carlo GBM simulation. Returns the mean, standard deviation and percentiles of the terminal price, and when a strike K is supplied also the discounted European option price with its standard error and the probability of finishing in the money. The compute is hard-capped at paths times steps of 200000 to bound CPU on the host. With a seed the run is reproducible, and the discounted price converges to the Black-Scholes value. Pure local computation using the standard library RNG. - Query params: `{"S": 100, "K": 100, "T": 1, "r": 0.05, "sigma": 0.2, "type": "call", "paths": 20000, "steps": 1, "seed": 42}` - Example response: `{"paths": 20000, "steps": 1, "terminal": {"mean": 105.1, "std": 21.2, "p05": 74.9, "p50": 103.0, "p95": 143.8, "min": 40.1, "max": 250.0}, "option": {"type": "call", "strike": 100, "price": 10.46, "standard_error": 0.1, "prob_itm": 0.54}, "disclaimer": "computation only, not financial advice"}` - Tags: quant, monte-carlo, gbm, simulation, options, pricing ### `GET /quant/defi` — $0.002 DeFi math dispatcher with a data-driven op registry. apr_to_apy and apy_to_apr convert rates for a compounding frequency n. funding_annualized scales a per-period funding rate. impermanent_loss uses IL = 2*sqrt(k)/(1+k) - 1 for a price ratio k, so k=2 gives -5.7191%. liquidation_price computes the long or short liquidation level from leverage and maintenance margin. leverage returns the leverage and margin from notional and equity. lp_value compares an LP position to holding. apr_to_apy with apr=0.10 and n=12 gives 0.104713. Pure local computation. - Query params: `{"op": "apr_to_apy", "apr": 0.1, "n": 12}` - Example response: `{"op": "apr_to_apy", "apr": 0.1, "n": 12, "apy": 0.104713, "disclaimer": "computation only, not financial advice"}` - Tags: quant, defi, apy, impermanent-loss, liquidation, funding, leverage ### `GET /phone/intel` — $0.005 One-call phone-number intelligence for fraud, KYC and contact-verification loops, computed ENTIRELY OFFLINE from Google libphonenumber (Apache-2.0) — no third-party telecom API is resold. Given a number in E.164, or a national number plus a 'country' (ISO-3166 alpha-2), it returns: validity (is_valid / is_possible), the E.164, international and national formats, the numeric country calling code and ISO region, the line type (mobile, fixed_line, fixed_line_or_mobile, voip, toll_free, premium_rate, shared_cost, personal_number, pager, uan, voicemail or unknown), a geography hint, a carrier hint (sparse for North American numbers due to number portability), and the IANA timezones. On top of that it fuses a DETERMINISTIC risk_score (0-100) with a low/medium/high band and human-readable reasons, derived from the line type, the validity state and a data-driven registry of known VOIP / virtual-number / disposable carriers and number prefixes — the differentiator over a bare format-validator. The fired signals and weights are returned so a caller can re-rank with its own policy. IMPORTANT: these are risk INDICATORS from offline numbering-plan metadata, NOT a definitive fraud verdict and NOT legal/KYC advice; they do NOT reflect live line status, portability, reassignment or the identity of any subscriber, and the input number is never stored or logged. Uparseable input returns a 4xx, never a 500. - Query params: `{"number": "+14155552671"}` - Example response: `{"valid": true, "possible": true, "e164": "+14155552671", "international": "+1 415-555-2671", "national": "(415) 555-2671", "country_code": 1, "region_code": "US", "location": "San Francisco, CA", "number_type": "fixed_line_or_mobile", "carrier": null, "timezones": ["America/Los_Angeles"], "risk_score": 0, "risk_band": "low", "reasons": [], "signals": [], "flagged_carrier": null, "flagged_prefix": null, "disclaimer": "Automated offline number-plan risk indicators, not advice."}` - Tags: phone, phone-number, validation, verify, line-type, carrier, e164, timezone, fraud, kyc, risk, telecom ### `GET /trade/tariff` — $0.03 A computed duty-exposure estimate for one product entering the United States, built entirely from public-domain government data. Give an HTS or HS code and an ISO country of origin and the route resolves the base tariff rate from the USITC Harmonized Tariff Schedule — the MFN general rate, or the preferential FTA special rate when the origin qualifies for a program such as USMCA, KORUS or the Australia FTA, or the statutory column-2 rate for a non-NTR origin — then layers on the additional trade-war duties that apply: Section 301 (China lists), Section 232 (steel, aluminum, autos) and IEEPA actions, each drawn from a data registry that cites the Chapter 99 provision carrying it, its legal basis, ad-valorem rate, effective date and a source link. The route sums these into an effective ad-valorem rate and, if you pass a customs value, estimates the ad-valorem duty and landed cost. The value is the COMPUTATION and fusion, not a raw resell: it reconciles the HTS rate columns, the origin-to-FTA-symbol mapping and the additional-duty programs for you and links every layer back to a verifiable Chapter 99 provision. Per-unit and compound specific duties are flagged, not silently computed. This is an estimate of duty exposure, not customs or legal advice and not shipment-level; verify the cited provisions and consult a licensed broker. Rates in the additional-duty registry are refreshed periodically because the 2025-26 tariff landscape changes frequently. - Query params: `{"hts": "8471.30", "origin": "CN", "customs_value": 10000}` - Example response: `{"query": {"hts": "8471.30", "origin": "CN"}, "base_rate": {"column": "general_mfn", "raw": "Free", "ad_valorem_percent": 0.0}, "additional_duties": [{"program": "Section 301 China List 4A", "legal_basis": "Section 301", "ad_valorem_percent": 7.5, "chapter99_provision": "9903.88.15"}], "effective_rate": {"effective_ad_valorem_percent": 7.5}, "landed_cost": {"estimated_ad_valorem_duty": 750.0, "estimated_landed_cost": 10750.0}, "attribution": ["Tariff rates from the USITC Harmonized Tariff Schedule (public domain)"]}` - Tags: trade, tariff, customs, duty, hts, import, section-301, section-232, ieepa, landed-cost, supply-chain, trade-compliance ### `GET /trade/hts` — $0.005 Look up US tariff classification lines straight from the authoritative, public-domain USITC Harmonized Tariff Schedule. Search by a product-description keyword to find candidate HTS numbers, or pass an HTS or HS code (4 to 10 digits) to expand it into its subheading and statistical lines. Each returned line carries its description, units of quantity, all three duty-rate columns (the general MFN rate, the special preferential rate with its program symbols, and the column-2 rate) and any Chapter 99 footnotes that flag additional Section 301 or 232 duties. The value is the normalized, rate-bearing view of the schedule, which feeds the trade/tariff compute. Partial answers are returned when the upstream is briefly unavailable rather than an error. Data is US public domain; this is reference information, not customs or legal advice. - Query params: `{"keyword": "laptop", "limit": 10}` - Example response: `{"query": {"keyword": "laptop"}, "count": 1, "results": [{"hts": "8471.30.01.00", "description": "Portable data processing machines", "units": ["No."], "general": "Free", "special": "", "other": "35%"}], "attribution": ["Tariff rates from the USITC Harmonized Tariff Schedule (public domain)"]}` - Tags: trade, hts, classification, customs, tariff, harmonized, import, duty-rate, commodity-code ### `GET /trade/flow` — $0.015 Monthly US international-trade flow for one commodity, computed from the US Census Bureau International Trade API. Give an HS or HTS code and a direction (imports or exports), optionally a partner country and calendar year, and the route returns the monthly customs values, a first-to-last trend, the top trading partners and a Herfindahl-Hirschman supplier-concentration index that scores how dependent that flow is on a few sources — a supply-chain-risk signal an agent can act on. The value is the computed trend and concentration, not a raw resell, and every response is attributed to the U.S. Census Bureau. This route needs a free Census API key; when the key is not configured or the upstream is unreachable it returns a clean available:false with the reason rather than failing, and the trade/tariff and trade/hts routes keep working without it. Public-domain data; not investment or trade advice. - Query params: `{"hs6": "847130", "direction": "imports", "year": 2025}` - Example response: `{"query": {"hs6": "847130", "direction": "imports", "year": 2025}, "available": true, "count": 24, "signals": {"latest_month": "2025-06", "latest_value": 1234567.0, "trend_pct_first_to_last": 12.5, "supplier_concentration_hhi": 3200.0, "top_partners": [{"cty_code": "5700", "name": "China", "value": 9000000.0}]}, "attribution": ["Source: U.S. Census Bureau"]}` - Tags: trade, trade-flow, imports, exports, census, hs-code, supply-chain, concentration, hhi, sourcing, macro ### `GET /provider/screen` — $0.02 Screen a US healthcare provider against the HHS OIG List of Excluded Individuals and Entities (LEIE), the federal exclusion list that makes it unlawful to bill Medicare or Medicaid for items or services furnished by the excluded party. Provide a 10-digit NPI for an authoritative exact match, or a last name (optionally first name, date of birth and state) or an organization name for a fuzzy match. An exact NPI hit is authoritative and sets excluded true with the exclusion type, statutory basis and date. A name hit is returned as a potential match with a similarity score and never sets excluded true, because many LEIE rows carry no NPI on file — confirm identity by date of birth and state before acting. This screens the in-memory LEIE index this service refreshes; see /provider/sources for freshness. Informational only, not legal advice. - Query params: `{"npi": "1003000126"}` - Example response: `{"excluded": true, "query": {"npi": "1122334455", "name": null, "is_organization": false, "dob": null}, "exclusion_records": [{"name": "DOE JOHN", "npi": "1122334455", "exclusion_type": "1128a1", "exclusion_basis": "Conviction of a program-related crime (mandatory)", "exclusion_date": "20180312", "state": "NY", "specialty": "NURSING", "match_type": "exact_npi"}], "potential_matches": [], "match_count": 1, "source": {"list": "LEIE", "published": "Tue, 30 Jun 2026 16:34:35 GMT", "records": 80231, "last_refresh": "2026-07-03T00:00:00Z"}, "disclaimer": "Informational compliance screening against public OIG/CMS data; not legal advice. Verify against official sources before any payment or credentialing decision."}` - Tags: healthcare, compliance, exclusion, oig, leie, screening, npi, provider, medicare, medicaid ### `GET /provider/verify` — $0.10 Reconcile a US healthcare provider across three authoritative public sources in one call and return a deterministic compliance verdict. Fetches live NPPES NPI Registry data (enumeration type, active or deactivated status, primary taxonomy and licensure), live CMS Medicare Fee-for-Service PECOS enrollment, and the OIG LEIE exclusion screen. Provide a 10-digit NPI, or a name or organization (a name resolves to an NPI via NPPES first). The verdict is one of clear, review, excluded or not_found, computed deterministically from risk flags such as excluded, npi_deactivated, npi_not_found, not_enrolled_medicare, potential_name_exclusion, no_active_license and name_mismatch. An exact LEIE NPI match forces the excluded verdict and names the exclusion source; a fuzzy name hit only raises a review flag, never an exclusion. Each upstream is collected independently, so a single source outage returns a partial answer with the error noted, never a failure. Informational compliance screening, not legal advice — verify against official sources before any billing, payment or credentialing decision. - Query params: `{"npi": "1003000126"}` - Example response: `{"verdict": "clear", "excluded": false, "exclusion_source": null, "query": {"npi": "1003000126", "name": null, "is_organization": false, "dob": null, "state": null}, "npi": {"found": true, "record": {"npi": "1003000126", "type": "individual", "status": "active", "name": "ARDALAN ENKESHAFI", "credential": "M.D.", "primary_taxonomy": {"code": "207R00000X", "desc": "Internal Medicine", "primary": true, "license": "D0000290", "state": "MD"}, "licenses": [{"number": "D0000290", "state": "MD", "taxonomy": "Internal Medicine"}]}}, "medicare_enrollment": {"enrolled": true, "enrollment_count": 2, "provider_types": ["PRACTITIONER - INTERNAL MEDICINE"], "states": ["MD"]}, "exclusion": {"excluded": false, "records": [], "potential_matches": []}, "risk_flags": [], "name_agreement": null, "sources": {"errors": {}, "partial": false, "checked": ["NPPES", "PECOS", "LEIE"]}, "verdict_values": ["clear", "review", "excluded", "not_found"], "disclaimer": "Informational compliance screening against public OIG/CMS data; not legal advice. Verify against official sources before any payment or credentialing decision."}` - Tags: healthcare, compliance, provider, verification, npi, nppes, pecos, leie, exclusion, credentialing, medicare ### `GET /fraud/ip` — $0.005 Classify a single public IPv4 address for anti-abuse and KYC decisions, over free public bulk datasets this service refreshes in-process: the iptoasn ASN table (Public Domain), the Tor Project exit-relay list, and the Spamhaus DROP and ASN-DROP lists. Returns the announcing ASN, its organization name, the country, our own datacenter/hosting classification (heuristic over the AS-org name and a curated hosting-ASN set), whether the address is a Tor exit, whether it sits on a Spamhaus DROP netblock or DROP autonomous system, and an optional geo-mismatch flag when a claimed country is supplied. A deterministic weighted risk score from 0 to 100 with a category and per-signal reasons lets an agent re-rank. IPv6 is accepted but returns a partial result (the index is IPv4-only). These are reputation indicators, not a guarantee, and contain no personal data. - Query params: `{"ip": "185.220.101.1", "country": "US"}` - Example response: `{"ip": "185.220.101.1", "ip_version": 4, "supported": true, "asn": 60729, "as_org": "TORSERVERS-NET", "country": "DE", "is_datacenter": true, "is_tor": true, "on_drop": false, "risk_score": 48, "risk_category": "medium", "reasons": [{"signal": "is_tor", "weight": 30, "dimension": "anonymity", "severity": "high", "reason": "IP is a known Tor exit relay."}], "disclaimer": "These are automated reputation indicators, NOT a guarantee and NOT a statement about any individual. A high score is not proof of fraud; a low score is not an endorsement. Contains no personal data. Verify before acting."}` - Tags: fraud, anti-abuse, ip, reputation, risk, tor, datacenter, asn, kyc ### `GET /fraud/score` — $0.01 Compute one fusion anti-abuse risk score for a signup or transaction, from an email address and/or a public IPv4 address. The email side reuses this service's existing domain-level email intelligence (MX records, SPF and DMARC posture, and disposable, free and role-account classification) and NEVER performs SMTP mailbox probing, by design. The IP side reuses the IP-reputation classification (ASN, hosting/datacenter, Tor, Spamhaus DROP, geo-mismatch). The two are merged into a single deterministic weighted score from 0 to 100 with a category, a per-dimension breakdown, and per-signal reasons. Supply either input alone or both; if one source is unavailable the score is computed over the other and marked partial. These are reputation indicators, not a guarantee, and contain no personal data. - Query params: `{"email": "user@example.com", "ip": "185.220.101.1", "country": "US"}` - Example response: `{"query": {"email_domain": "example.com", "ip": "185.220.101.1", "claimed_country": "US"}, "risk_score": 63, "risk_category": "high", "inputs_scored": ["email", "ip"], "partial": false, "dimensions": {"email": {"score": 15, "signals": ["email_weak_auth"]}, "anonymity": {"score": 30, "signals": ["is_tor"]}}, "reasons": [{"signal": "is_tor", "weight": 30, "dimension": "anonymity", "severity": "high", "reason": "IP is a known Tor exit relay."}], "disclaimer": "These are automated reputation indicators, NOT a guarantee and NOT a statement about any individual. A high score is not proof of fraud; a low score is not an endorsement. Contains no personal data. Verify before acting."}` - Tags: fraud, anti-abuse, email, ip, risk, kyc, fusion, disposable, reputation ### `GET /notarize` — $0.008 A notarize-on-demand oracle for AI agents that need to CRYPTOGRAPHICALLY PIN an external web fact for a later computation, settlement or dispute (a price, a status, an availability, a policy/terms string, an on-page number). You pass a public URL; we fetch it ourselves (SSRF-guarded, robots.txt respected, public content only — no login/paywall bypass), then return a server-observed snapshot: final_url after redirects, http_status, content_type, content_length, sha256(body), a server-side fetched_at (ISO-8601 UTC), and the upstream host. The snapshot is signed TWO ways so any counterparty can verify with tooling it already has: (1) a plain EIP-712 typed-data signature under our own domain (recover with eth_account/ethers/viem, or this same service's POST /crypto/verify), and (2) an EAS off-chain attestation (Version2) that is byte-compatible with the Ethereum Attestation Service SDK and easscan.org's off-chain verifier — same domain, type layout and UID derivation as the EAS SDK. mode=hash returns metadata + hash only (cheaper, and it never re-exposes the body); mode=full additionally returns the fetched body as base64 within a size cap. We attest ONLY what WE fetched — an arbitrary caller-supplied 'observed payload' is never signed as if we saw it. HONEST framing: this proves integrity + timestamp + non-repudiation of our observation (root of trust = our attestor key + reputation); it is NOT a trustless proof of the origin server, which would require zkTLS/web-proof (a deferred extension). The attestor address, schema and verification instructions are public at the free GET /attest/info. Bad/again-private URL => 400; robots-blocked => 403; upstream failure => 502; if the attestor key is unconfigured => a clean 503. - Query params: `{"url": "https://example.com", "mode": "hash"}` - Example response: `{"mode": "hash", "snapshot": {"final_url": "https://example.com/", "http_status": 200, "content_type": "text/html", "content_length": 1256, "sha256": "0xb1946ac9...", "fetched_at": "2026-07-03T00:00:00Z", "upstream_host": "example.com"}, "attestor": "0x48Cb...8960", "attestations": {"eip712": {"signer": "0x48Cb...8960", "signature": "0x..."}, "eas_offchain": {"uid": "0x...", "signer": "0x48Cb...8960"}}}` - Tags: attestation, notarize, provenance, eip712, eas, signature, sha256, timestamp, verifiable, integrity, web-proof, oracle ### `POST /attest/verify` — $0.001 The counterpart verifier for /notarize attestations, offered as a convenience so a buyer agent can check an attestation in one call without wiring an EIP-712 / EAS library itself — though it never has to trust us to do so (the whole point is that anyone can verify independently; see GET /attest/info). PURE COMPUTE: no network, no RPC, no private key (canon #10) — it only recovers signatures and recomputes hashes over the inputs you provide. Accepts either attestation form emitted by /notarize: the plain EIP-712 object, or the EAS off-chain (Version2) object. It returns: `valid` (the signature recovered to an address), `signer` (that address), `matches_attestor` (whether it equals THIS service's published attestor address), `uid_ok` (for EAS: whether the off-chain UID recomputes byte-identically from the message fields), and `hash_ok` (if you pass payload_base64, whether sha256(payload) equals the attested content hash — this is how you prove a body you hold is the one we notarized). Malformed input => 400, never a 500. - Request body: `{"attestation": {"standard": "eip712", "domain": {"name": "AgentsTools Attestation", "version": "1", "chainId": 8453}, "primaryType": "Snapshot", "types": {"Snapshot": [{"name": "finalURL", "type": "string"}, {"name": "contentHash", "type": "bytes32"}, {"name": "httpStatus", "type": "uint256"}, {"name": "contentType", "type": "string"}, {"name": "upstreamHost", "type": "string"}, {"name": "fetchedAt", "type": "uint256"}]}, "message": {"finalURL": "https://example.com/", "contentHash": "0xb1946ac92492d2347c6235b4d2611184b1946ac92492d2347c6235b4d2611184", "httpStatus": 200, "contentType": "text/html", "upstreamHost": "example.com", "fetchedAt": 1783000000}, "signature": "0x2dfdc459248c95cb62cbe4c458e91806a1a89fde7af05ab0a68d60f7f7215abc36b573d18dcc4e61ef6a8392b020e4f7561b778bcee04d15193c36782fb97e6d1b", "signer": "0x48Cbbbf38Bae6394B0D921Fa8c00d4A90e088960"}}` - Example response: `{"standard": "eas-offchain", "valid": true, "signer": "0x48Cb...8960", "matches_attestor": true, "uid_ok": true, "hash_ok": null}` - Tags: attestation, verify, eip712, eas, signature, recover, provenance, integrity, pure-compute ### `GET /agri/production` — $0.02 One call for authoritative US crop statistics from USDA National Agricultural Statistics Service (NASS) QuickStats, normalized with a computed year-over-year signal. Metrics: production (annual, in the commodity's physical unit), yield (per harvested acre), acreage (acres harvested), and grain stocks (quarterly, the total on-farm plus off-farm figure). Commodities include corn, soybeans, wheat and cotton; a new commodity or metric is one row in the registry. Pass an optional 2-letter state code for a state-level series (default is the national total) and an optional year as the as-of point. Each response carries the latest value with its NASS period and unit, the year-over-year change and percent change (same-quarter for stocks), a short history array, and the exact NASS short_desc used as provenance. The canonical survey series is isolated from the dollar-valued, forecast, census-breakdown and on-farm and off-farm variant rows. Data is US-government public domain and the required attribution to USDA NASS QuickStats is included. Unknown commodity, metric, state or year returns 400, an empty result 404, an upstream failure 502, and a missing API key 503. - Query params: `{"commodity": "corn", "state": "IA", "metric": "yield"}` - Example response: `{"commodity": "corn", "metric": "production", "region": "US", "unit": "bushels", "as_of": "2025", "latest": {"period": "2025", "value": 17020549000.0, "unit": "BU"}, "yoy_change": {"previous_period": "2024", "change_pct": 14.29}}` - Tags: agriculture, commodity, production, yield, acreage, stocks, usda, nass, quickstats, corn, soybeans, wheat, cotton ### `GET /agri/signal` — $0.03 A computed agricultural signal over the USDA NASS QuickStats production and grain-stocks series for one commodity: the latest production with its year-over-year change, the latest grain stocks with a same-quarter year-over-year context where available, and history percentiles. When a USDA AMS Market News API key is configured the route additionally folds in the Market News spot or auction price and its change versus the prior report; without a key it returns the NASS production side and records the gap in a summary block (partial-on-failure, never a wholesale failure). This is a derived analytic over the physical supply side, not a resale of either source. Data is US-government public domain; USDA NASS QuickStats, and USDA AMS Market News when used, are attributed in every response. Informational only, not trading or hedging advice. Unknown commodity returns 400; if the NASS source is unconfigured or unavailable the response returns 503. - Query params: `{"commodity": "corn"}` - Example response: `{"commodity": "corn", "signals": {"spot_price": {"price": 4.18, "unit": "$/bushel", "price_percentile": 34.0}, "production": {"yoy_change": {"change_pct": 14.29}}}, "summary": {"partial": false}}` - Tags: agriculture, commodity, signal, production, stocks, usda, nass, analytics ### `GET /realestate/market` — $0.03 One geography in, a full normalized market profile out. The service resolves the geo token (a state as a two-letter code or name, a metropolitan CBSA code, a county FIPS code, a ZIP, or a street address) and fuses several free government sources: the FHFA House Price Index for price level and momentum (year over year, quarter over quarter, and a five year growth rate), Census American Community Survey five year estimates for median home value, median gross rent, median household income, population, owner and renter tenure and vacancy, an optional national housing context from the Federal Reserve, and optional HUD Fair Market Rents by bedroom count. On top it computes derivatives an agent cannot reliably derive from the raw feeds: a gross rental yield proxy, a price to income ratio, a rent to income share, a homeownership rate and a vacancy rate. Every value carries its own provenance with the source, source code, geography, period and unit, and the response lists the attribution for every source used. In auto mode a five digit number is read as a ZIP; pass type cbsa or county to read it as a metro or a county. This is an aggregate market tier profile, not an appraisal and not a per address valuation, and coverage is United States only. A blank or unknown geo returns 400 and a geography with no data returns 404. - Query params: `{"geo": "New York"}` - Example response: `{"geo": {"input": "31080", "kind": "cbsa", "geography": "Metro CBSA 31080"}, "prices": {"level": "msa", "momentum": {"yoy_pct": 4.2, "trend": "rising"}}, "derivatives": {"gross_rental_yield_pct": 2.9, "price_to_income": 8.6}, "attribution": ["Source: U.S. Federal Housing Finance Agency, House Price Index (public domain)"]}` - Tags: real-estate, housing, property, market, home-prices, rent, affordability, fhfa, census, acs, hud, us, investment ### `GET /realestate/prices` — $0.015 A focused read of the FHFA House Price Index for a geography. The service returns the latest index value, the change year over year and quarter over quarter, a five year compound growth rate, a simple rising, flat or falling trend flag, and a short history of the most recent observations. The index is the purchase only series and is computed from the seasonally adjusted values where available. State and metropolitan CBSA levels are served directly from the FHFA bulk index; a county FIPS or ZIP resolves to its state level index because county and ZIP House Price Index files are developmental and not yet included, and the response notes this. Give the geo as a state code or name, a metro CBSA code, a county FIPS, a ZIP or an address. The data is public domain and the attribution is included. A blank or unknown geo returns 400 and a geography with no index returns 404. - Query params: `{"geo": "CA", "range": 12}` - Example response: `{"geo": {"input": "CA", "kind": "state", "geography": "State: California"}, "hpi": {"level": "state", "place_id": "CA", "frequency": "monthly", "momentum": {"latest_index": 812.4, "yoy_pct": 3.1, "qoq_pct": 0.8, "cagr_5yr_pct": 7.2, "trend": "rising"}}, "attribution": ["Source: U.S. Federal Housing Finance Agency, House Price Index (public domain)"]}` - Tags: real-estate, home-prices, house-price-index, fhfa, momentum, appreciation, housing, us ### `GET /realestate/rents` — $0.015 Rental indicators for a geography. When a HUD USER token is configured the service returns HUD Fair Market Rents for the area by bedroom count, from an efficiency through a four bedroom unit, including Small Area Fair Market Rents keyed by ZIP where available. The Census American Community Survey median gross rent is always included as context, and when HUD is not configured the response is ACS only with a note. Each value carries its source, source code, geography, period and unit, and the attribution for every source used is listed. Give the geo as a state, a metro CBSA code, a county FIPS, a ZIP or an address. This is an aggregate market tier read and coverage is United States only. A blank or unknown geo returns 400 and a geography with no rent data returns 404. - Query params: `{"geo": "90001", "type": "zip"}` - Example response: `{"geo": {"input": "90001", "kind": "zip", "geography": "ZIP/ZCTA 90001"}, "rents": {"median_gross_rent": {"value": 1471.0, "source": "acs", "unit": "USD/month"}}, "attribution": ["Source: U.S. Census Bureau, American Community Survey 5-Year"]}` - Tags: real-estate, rent, fair-market-rent, hud, acs, housing, rental, us ### `GET /realestate/compare` — $0.02 Rank several geographies against each other on a single real estate metric in one call. The metric is one of the House Price Index year over year change, the gross rental yield proxy, the price to income ratio, the median home value, the median gross rent or the median household income. Give two or more geographies as states, metro CBSA codes, county FIPS codes or ZIPs, comma separated. For each geography the service resolves the metric from the underlying sources and returns a ranking from best to worst along with signals: each geography rank, the highest and lowest values, the spread between them and the mean across the set. For the price to income ratio a lower value ranks higher because it is more affordable; for the other metrics a higher value ranks higher. Every response lists the attribution for the sources used. Fewer than two geographies returns 400, an unknown metric returns 400 and no data returns 404. - Query params: `{"geo": "CA,TX,FL", "metric": "price_momentum_yoy"}` - Example response: `{"metric": "price_momentum_yoy", "ranking": [{"geo": "FL", "value": 5.1, "rank": 1}, {"geo": "CA", "value": 3.1, "rank": 2}], "signals": {"count": 3, "max": {"geo": "FL", "value": 5.1}, "spread": 3.0}, "attribution": ["Source: U.S. Federal Housing Finance Agency, House Price Index (public domain)"]}` - Tags: real-estate, compare, ranking, housing, yield, affordability, momentum, metro, us ### `POST /breach/password` — $0.003 A privacy-preserving password-exposure check an agent runs before accepting or reusing a credential. The input password is hashed locally with SHA-1 and only the first five hex characters of the hash are sent to the Pwned Passwords range API, which returns a bucket of hash suffixes plus counts; the suffix is matched locally, so the plaintext password is revealed to no one and is never logged or stored — the response carries only the k-anonymous 5-character prefix. You may instead send a ready SHA-1 or NTLM hash so the plaintext never leaves your side at all (NTLM uses MD4 which is not computable in this runtime, so send the hash for that corpus). Output: whether the password is compromised, how many times it appears in breach corpora, the hash prefix and mode. A non-zero count means the password is unsafe to use. Credential-exposure indicators, not a guarantee. Source: Have I Been Pwned (CC BY 4.0). - Request body: `{"password": "correct horse battery staple"}` - Example response: `{"compromised": true, "breach_count": 52372427, "hash_prefix": "5BAA6", "hash_mode": "sha1", "k_anonymity": true, "source": "pwnedpasswords", "attribution": "Data from Have I Been Pwned (https://haveibeenpwned.com) ...", "disclaimer": "Automated credential-exposure indicators, not a guarantee."}` - Tags: breach, password, credential, pwned, k-anonymity, account-takeover, security, privacy, haveibeenpwned ### `GET /breach/domain` — $0.01 A due-diligence lookup of the known public data breaches associated with a domain, normalized from the free Have I Been Pwned breach catalogue. Input: a domain, URL or hostname. Output: a list of breaches, each with its name and title, breach and added dates, the number of affected accounts, the exposed data classes with a computed max-sensitivity tier (financial or government identifiers rank high), and the verified, fabricated, sensitive, stealer-log, spam-list and malware flags — plus a summary with the total breach and account counts, the most recent breach date, and whether any breach exposed passwords, was a stealer-log dump or exposed highly sensitive data. This answers which known breaches have touched the domain, which is different from whether one specific account on it is compromised (that is the keyed account route). Breach indicators, not a guarantee. Source: Have I Been Pwned (CC BY 4.0). - Query params: `{"domain": "adobe.com"}` - Example response: `{"domain": "adobe.com", "breaches": [{"name": "Adobe", "title": "Adobe", "breach_date": "2013-10-04", "pwn_count": 152445165, "data_classes": ["Email addresses", "Password hints", "Passwords", "Usernames"], "has_passwords": true, "max_sensitivity": "high", "is_verified": true, "is_stealer_log": false}], "summary": {"total_breaches": 1, "total_accounts": 152445165, "most_recent_breach": "2013-10-04", "has_password_breach": true, "has_stealer_log": false, "has_sensitive_data": true}, "disclaimer": "Automated breach indicators, not a guarantee."}` - Tags: breach, domain, data-breach, exposure, due-diligence, security, stealer-log, haveibeenpwned, risk ### `POST /breach/assess` — $0.01 A one-call account-takeover triage that fuses two credential-exposure signals into a single deterministic risk score. The password (or a ready SHA-1 or NTLM hash) is checked against the Pwned Passwords corpus with k-anonymity — hashed locally, only the 5-character prefix sent upstream, plaintext never transmitted or logged — and its raw prevalence drives a weighted signal (a password seen millions of times is trivially credential-stuffed). If an optional domain is supplied, its known breach history from Have I Been Pwned adds further signals: stealer-log dumps (active malware-harvested credentials), password-exposing breaches, breaches of highly sensitive data, recency within the last year, and repeated exposure across many breaches. Output: a 0-100 account-takeover risk score, a category from minimal to critical, human-readable reasons and the raw weighted signals so the agent can re-rank, plus per-dimension coverage. Best-effort — an unavailable upstream is flagged, never an error. Risk indicators, not a guarantee. Source: Have I Been Pwned (CC BY 4.0). - Request body: `{"password": "Summer2024!", "domain": "example.com"}` - Example response: `{"ato_risk_score": 55, "risk_category": "high", "password_compromised": true, "password_breach_count": 12345, "hash_prefix": "9F9D5", "reasons": ["This password appears many thousands of times in breach corpora ...", "At least one known breach affecting this domain exposed passwords."], "coverage": {"password_evaluated": true, "domain_evaluated": true}, "disclaimer": "Automated risk indicators, not a guarantee."}` - Tags: breach, account-takeover, ato, risk-score, credential, fusion, security, k-anonymity, haveibeenpwned ### `GET /breach/account` — $0.01 An email-to-breach lookup that returns only the metadata of the known breaches an address appears in — the breach names, dates and exposed data classes — never any password or leaked personal data, exactly what Have I Been Pwned exposes publicly. It uses the keyed HIBP breached-account API; because that requires a paid HIBP subscription key, the route is optional: when no key is configured it returns available false with reason not_configured and stays alive, while the keyless password and domain routes remain fully functional. When a key is present it returns whether the email is breached, the normalized breach list with sensitivity tiers, and a summary. Breach indicators, not a guarantee. Source: Have I Been Pwned (CC BY 4.0). - Query params: `{"email": "test@example.com"}` - Example response: `{"available": true, "email": "test@example.com", "breached": true, "breaches": [{"name": "Adobe", "breach_date": "2013-10-04", "data_classes": ["Email addresses", "Passwords", "Usernames"], "max_sensitivity": "high"}], "summary": {"total_breaches": 1, "has_password_breach": true}, "disclaimer": "Automated breach indicators, not a guarantee."}` - Tags: breach, account, email, exposure, credential, security, haveibeenpwned, risk, due-diligence ### `GET /cve/lookup` — $0.01 One-call vulnerability due-diligence for a security, dev or SBOM agent. Supply a CVE identifier and get back a fused, normalized and cited risk picture drawn entirely from free authoritative public vulnerability registries: the NVD (NIST) CVSS v3.1 or v4.0 base score, severity and vector string, the CWE weakness class, and vendor patch and advisory links; the CISA Known Exploited Vulnerabilities catalog flag (whether the CVE is exploited in the wild, its remediation due date and any known ransomware-campaign use); the FIRST.org EPSS probability and percentile that the CVE will be exploited in the next 30 days; and OSV.dev affected packages with the exact fixed versions plus the linked GitHub Security Advisory. On top of the raw registries the route computes a deterministic 0 to 100 patch-priority score with a low, medium, high or critical band, per-dimension flags and human-readable reasons, from data-driven weights so identical inputs give identical outputs (known-exploited and ransomware use dominate, then EPSS, CVSS and fix availability). If NVD carries no CVSS metric the score falls back to the OSV or GHSA qualitative severity. The moat is the fusion of four registries under one query plus the priority score, not a resale. Partial answers are returned if one registry is briefly down (never a 500); an unknown CVE returns a clean 404. This product uses the NVD API but is not endorsed or certified by the NVD. These are automated risk indicators, not security advice and not a guarantee; verify against the authoritative source and vendor advisories before acting. - Query params: `{"cve_id": "CVE-2021-44228"}` - Example response: `{"cve_id": "CVE-2021-44228", "cvss": {"version": "3.1", "base_score": 10.0, "severity": "CRITICAL", "source": "nvd"}, "cwe": ["CWE-502"], "epss": {"probability": 0.99999, "percentile": 1.0}, "kev": {"listed": true, "known_ransomware_use": "Known"}, "ghsa": "GHSA-jfh8-c2jp-5v3q", "affected": [{"ecosystem": "Maven", "package": "org.apache.logging.log4j:log4j-core", "fixed_versions": ["2.15.0"]}], "priority": {"score": 100, "band": "critical", "flags": {"kev_listed": true, "fix_available": true}}, "sources": {"partial": false}}` - Tags: cve, vulnerability, security, cvss, epss, cisa-kev, nvd, osv, patch, advisory, risk-score, vuln-intelligence ### `GET /cve/scan` — $0.02 One-call dependency vulnerability check for an SBOM, code-review or supply-chain agent. Supply a package ecosystem, name and version (npm, PyPI, Maven, crates.io, Go, Packagist, RubyGems or NuGet) or a single package-URL such as pkg:pypi/jinja2@2.4.1, and get back every known advisory for that package fused from free authoritative public registries: OSV.dev supplies the advisory records, aliases, the linked GitHub Security Advisory and the exact fixed versions; the CVE ids are then enriched with the NVD CVSS base score and vector and CWE class, the CISA Known Exploited Vulnerabilities flag, and the FIRST.org EPSS exploitation probability. Each advisory is normalized to one cited shape and gets a deterministic 0 to 100 patch-priority score and band, and the whole list is sorted so the most urgent patch comes first, with a consolidated recommended fix-version list. NVD enrichment is capped to the top advisories by severity to respect the NVD rate limit (the response marks whether it was truncated); the remaining advisories fall back to the OSV or GHSA severity for scoring. The moat is the cross-registry fusion plus the priority ranking, not a resale; a new ecosystem or registry is one row in the data registry. Partial answers are returned if one source is briefly down (never a 500); a package with no known vulnerabilities returns a clean 404. This product uses the NVD API but is not endorsed or certified by the NVD. These are automated risk indicators, not security advice and not a guarantee. - Query params: `{"ecosystem": "PyPI", "name": "jinja2", "version": "2.4.1"}` - Example response: `{"query": {"ecosystem": "PyPI", "name": "jinja2", "version": "2.4.1"}, "advisory_count": 1, "advisories": [{"ghsa": "GHSA-462w-v97r-4m45", "cve_ids": ["CVE-2019-10906"], "severity_label": "HIGH", "fixed_versions": ["2.10.1"], "epss": {"probability": 0.02, "percentile": 0.85}, "kev": {"listed": false}, "priority": {"score": 41, "band": "medium"}}], "recommended_fix_versions": ["2.10.1"], "truncated": false, "sources": {"partial": false}}` - Tags: cve, vulnerability, sbom, package, dependency, purl, osv, npm, pypi, maven, patch, supply-chain, risk-score ### `GET /domain/trust` — $0.02 One-call phishing/trust triage of a website domain for an agent about to pay or share data with an unfamiliar merchant. Input: a domain, URL or hostname. Output: a deterministic composite trust score 0-100, a category (trusted / caution / untrusted / unknown), per-dimension flags, human-readable reasons and the raw signed-weighted signals so the agent can re-rank. Six dimensions, each best-effort (a failed network source degrades to unavailable, never a 500): age from RDAP registration (very-new domains are a phishing hallmark), DNS and mail posture (SPF, DMARC enforcement, DNSSEC authenticated answers), a live TLS certificate check, Certificate Transparency history (earliest certificate corroborates real age plus subdomain sprawl), a pure typosquat and homoglyph analysis (edit-distance to a curated brand list, look-alike character normalization, brand-in-subdomain lures, abused free-hosting suffixes and throwaway TLDs), and an OPTIONAL env-gated blocklist lookup that is off by default. All upstreams are free and public (RDAP, DoH, TLS, CT) computed by us, not a resale of a paid API. When the domain does not resolve or too few dimensions are available the category is unknown. Automated trust indicators, not a guarantee and not legal or financial advice. - Query params: `{"domain": "paypa1-secure-login.gq"}` - Example response: `{"domain": "paypa1-secure-login.gq", "registrable_domain": "paypa1-secure-login.gq", "trust_score": 8, "trust_category": "untrusted", "is_typosquat": true, "on_blocklist": false, "age_days": 3, "registered": true, "reasons": ["The registrable domain is within a small edit-distance of a well-known brand it does not belong to — a classic typosquat pattern.", "Domain was registered very recently — freshly-registered domains are the norm for phishing/scam sites with no track record."], "coverage": {"dimensions_total": 6, "dimensions_evaluated": 5, "confidence": 0.83}, "disclaimer": "Automated trust/phishing indicators, not a guarantee."}` - Tags: domain, trust, phishing, typosquat, anti-scam, fraud, risk, dns, certificate-transparency, due-diligence, reputation ### `GET /domain/typosquat` — $0.005 A pure-compute lexical safety check on a hostname — no network calls, so it is instant and cheap, useful as a pre-filter before a fuller /domain/trust lookup. Splits the host into subdomain, registrable label and public suffix (via the Public Suffix List) and runs: Damerau-Levenshtein edit-distance to a curated list of popular brands (a small distance to a brand the domain does not belong to is a typosquat), homoglyph or confusable-character normalization (look-alike digits and Cyrillic or Greek letters that spell a brand), brand-name-as-substring inside a subdomain while the real registrable domain is unrelated, punycode or non-ASCII internationalized names, TLDs disproportionately abused for throwaway phishing registrations, free app-hosting and site-builder suffixes frequently abused to stand up phishing pages, and shape heuristics (excessive hyphens, digit-heavy labels, deep subdomain nesting, over-long labels). Returns is_typosquat, the nearest brand and distance, and per-signal reasons. Indicators, not a guarantee. - Query params: `{"domain": "g00gle-login.tk"}` - Example response: `{"domain": "g00gle-login.tk", "registrable_domain": "g00gle-login.tk", "is_typosquat": true, "nearest_brand": null, "brand_edit_distance": null, "homoglyph_brand": null, "brand_in_subdomain": null, "punycode_or_idn": false, "suspicious_tld": "tk", "abuse_hosting_suffix": null, "lexical_trust_delta": -12, "reasons": ["Domain uses a TLD heavily abused for free/cheap throwaway registrations in phishing campaigns."], "disclaimer": "Automated trust/phishing indicators, not a guarantee."}` - Tags: domain, typosquat, homoglyph, phishing, anti-scam, lexical, brand-protection, idn, punycode ### `GET /drug/profile` — $0.04 One-call clinical due-diligence for a pharmacy, prescribing-support or research agent. Supply a drug name (brand, generic or active ingredient) or a product NDC and get back a fused, normalized and cited safety picture drawn entirely from public-domain openFDA data: drug identity and marketing status from the NDC directory, FDA approval history from Drugs@FDA (application number, sponsor, approved products and submission history), the key structured-product-label sections (boxed warning, indications, dosing, contraindications, warnings, drug interactions and pregnancy, each truncated with a flag if very long), and an adverse-event summary from the FAERS database (total reports, the serious and death-flagged fractions, the top reported reactions and a demographic breakdown, all as aggregate counts, never raw case bodies). On top of the raw domains the route computes a deterministic 0 to 100 severity indicator with a low, medium, high or critical band, per-dimension flags and human-readable reasons, driven by the presence of a boxed warning, the serious and death fractions of adverse-event reports and the contraindication and interaction sections, all from data-driven weights so identical inputs give identical outputs. The moat is the cross-domain fusion plus the severity indicator, not a resale; a new openFDA domain or label section is one row in the registry. Partial answers are returned if one domain is briefly down (never a 500). These are informational indicators aggregated from public FDA data, NOT medical advice, NOT a diagnosis and NOT a guarantee; consult a licensed professional and the FDA label before acting. openFDA data does not imply FDA endorsement. - Query params: `{"drug": "warfarin"}` - Example response: `{"query": {"drug": "warfarin", "ndc": null}, "identity": {"label_openfda": {"generic_name": ["WARFARIN SODIUM"]}}, "label_sections": {"boxed_warning": {"truncated": true, "source_tag": "boxed_warning"}}, "adverse_events": {"total_reports": 133626, "death_fraction": 0.13}, "severity": {"score": 62, "band": "high", "flags": {"has_boxed_warning": true}}, "sources": {"partial": false}}` - Tags: drug, medication, pharma, openfda, adverse-events, label, severity, clinical, due-diligence, safety ### `GET /drug/adverse-events` — $0.02 A focused pharmacovigilance summary for a drug drawn from the public-domain FDA Adverse Event Reporting System (FAERS) via openFDA. Supply a drug name and get back aggregate counts only (never raw case bodies): the total number of reports, how many are flagged serious and how many involved a death, the serious and death fractions, the top reported adverse reactions with counts, and a breakdown by patient sex and age group. Counts are computed with openFDA count aggregations so the response stays compact and token-efficient. The moat is the normalized, cited summary rather than a raw dump. Partial or empty answers are returned cleanly if the domain is briefly down or the drug has no reports (never a 500). These are informational indicators aggregated from public FDA data, NOT medical advice, NOT a diagnosis and NOT a guarantee; consult a licensed professional and the FDA label before acting. openFDA data does not imply FDA endorsement. - Query params: `{"drug": "ibuprofen"}` - Example response: `{"query": {"drug": "ibuprofen"}, "found": true, "adverse_events": {"total_reports": 90000, "serious_fraction": 0.6, "death_fraction": 0.04, "top_reactions": [{"reaction": "NAUSEA", "count": 4200}]}, "sources": {"partial": false}}` - Tags: drug, medication, adverse-events, faers, pharmacovigilance, openfda, safety ### `GET /drug/label` — $0.015 Extracts the clinically important sections of a drug's FDA structured product label (SPL) via openFDA and returns them as compact cited text. Supply a drug name and get back the boxed (black-box) warning, indications and usage, dosage and administration, contraindications, warnings and cautions, drug interactions and pregnancy or specific-population sections. Because manufacturers tag the same clinical section under different SPL field names, each canonical section resolves through an ordered list of candidate openFDA tags and takes the first present on the drug's label; the source tag is reported. Very long sections are truncated to a size cap and flagged so the response stays token-efficient. The moat is the canonical section normalization, not a raw label dump; a new section is one row in the registry. Partial or empty answers are returned cleanly (never a 500). These are informational indicators aggregated from public FDA data, NOT medical advice, NOT a diagnosis and NOT a guarantee; consult a licensed professional and the FDA label before acting. openFDA data does not imply FDA endorsement. - Query params: `{"drug": "ibuprofen"}` - Example response: `{"query": {"drug": "ibuprofen"}, "found": true, "available_sections": ["boxed_warning", "indications", "contraindications"], "label_sections": {"contraindications": {"truncated": false, "source_tag": "contraindications"}}, "sources": {"partial": false}}` - Tags: drug, medication, label, spl, boxed-warning, contraindications, openfda, safety ### `GET /drug/interactions` — $0.02 Returns the drug-interactions section of a drug's FDA structured product label via openFDA, plus an optional two-drug mention check. Supply a primary drug name to get the normalized, cited interactions text (truncated with a flag if very long). Optionally supply a second drug via interacts_with and the route reports whether the first drug's label interactions text mentions the second drug's name. That mention check is a transparent label-text heuristic that adds value over a bare relay, but it is explicitly NOT a clinical interaction determination and absence of a mention is not proof of safety. Partial or empty answers are returned cleanly (never a 500). These are informational indicators aggregated from public FDA data, NOT medical advice, NOT a diagnosis and NOT a guarantee; consult a licensed professional and the FDA label before acting. openFDA data does not imply FDA endorsement. - Query params: `{"drug": "warfarin", "interacts_with": "aspirin"}` - Example response: `{"query": {"drug": "warfarin", "interacts_with": "aspirin"}, "found": true, "interactions": {"truncated": true, "source_tag": "drug_interactions"}, "interaction_check": {"interacts_with": "aspirin", "mentioned_in_label": true}, "sources": {"partial": false}}` - Tags: drug, medication, interactions, label, openfda, safety ### `GET /device/adverse-events` — $0.02 A pharmacovigilance-style summary for a medical device drawn from the public-domain FDA MAUDE (Manufacturer and User Facility Device Experience) database via openFDA. Supply a device brand or generic device name and get back aggregate counts only (never raw report bodies): the total number of adverse-event reports and a breakdown by event type, with the malfunction, injury and death counts surfaced directly. Counts are computed with openFDA count aggregations so the response stays compact. The moat is the normalized, cited summary rather than a raw dump. Partial or empty answers are returned cleanly if the domain is briefly down or the brand has no reports (never a 500). These are informational indicators aggregated from public FDA data, NOT medical advice, NOT a diagnosis and NOT a guarantee; consult a licensed professional and the FDA label before acting. openFDA data does not imply FDA endorsement. - Query params: `{"brand": "insulin pump"}` - Example response: `{"query": {"brand": "pacemaker"}, "found": true, "device_events": {"total_reports": 33709, "deaths": 804, "injuries": 7856, "malfunctions": 24899, "by_event_type": {"Malfunction": 24899, "Injury": 7856}}, "sources": {"partial": false}}` - Tags: device, medical-device, maude, adverse-events, openfda, safety ### `GET /drug/shortages` — $0.008 Checks the public-domain FDA drug-shortages database via openFDA for a generic drug name. Supply a generic name and get back the current shortage records normalized to a compact cited shape: the reported status (for example current, resolved or to be discontinued), the therapeutic category, dosage form and presentation, the reporting company, the availability note and the initial-posting and last-update dates. The response also reports the record count and whether any record represents an active (unresolved, non-discontinued) shortage. The moat is the normalized, cited summary, not a raw dump. Partial or empty answers are returned cleanly if the domain is briefly down or the drug is not in shortage (never a 500). These are informational indicators aggregated from public FDA data, NOT medical advice, NOT a diagnosis and NOT a guarantee; consult a licensed professional and the FDA label before acting. openFDA data does not imply FDA endorsement. - Query params: `{"drug": "amoxicillin"}` - Example response: `{"query": {"drug": "amoxicillin"}, "found": true, "shortage_count": 2, "has_active_shortage": true, "shortages": [{"generic_name": "Amoxicillin", "status": "Current", "therapeutic_category": ["Anti-Infective"], "update_date": "2026-03-25"}], "sources": {"partial": false}}` - Tags: drug, medication, shortage, supply, openfda, safety ### `GET /macro/indicator` — $0.01 One indicator, one or more countries, returned as a normalized cited time-series. The indicator is a canonical key (for example gdp_current_usd, gdp_per_capita_usd, gdp_growth, inflation_cpi, unemployment, population, govt_debt_gdp, current_account_gdp, life_expectancy, gini, co2_per_capita, internet_users_pct) or a raw World Bank series code such as NY.GDP.MKTP.CD. Countries are given as ISO-3166 alpha-2 or alpha-3 codes, common names, or World Bank aggregate codes like WLD or EUU, comma-separated for several at once. Select the window with years (a single year or a Y1:Y2 range) or range (the most recent N years). For each country the service resolves the canonical indicator across an ordered list of candidate sources and takes the first that has data, so every value carries its own provenance: source, source code, year, country ISO3 and unit. The response includes the latest value and the full history per country, plus the attribution strings for every source used. World Bank data is CC-BY 4.0 and IMF WEO requires attribution; both are included. Unknown indicator or country returns 400, an empty result 404, and an upstream failure 502. - Query params: `{"indicator": "gdp_current_usd", "country": "US,DE", "range": 5}` - Example response: `{"indicator": "gdp_current_usd", "unit": "USD", "year_range": {"from": 2022, "to": 2023}, "countries": [{"country_iso3": "USA", "source": "worldbank", "latest": {"year": 2023, "value": 27811517000000.0, "source": "worldbank", "source_code": "NY.GDP.MKTP.CD", "country_iso3": "USA", "unit": "USD"}}], "attribution": ["Source: World Bank, World Development Indicators (CC-BY 4.0)"]}` - Tags: macro, economics, gdp, cpi, inflation, unemployment, country, world-bank, imf, indicators, development ### `GET /macro/country` — $0.02 A one-call macroeconomic profile for a single country: a curated basket of headline indicators (GDP in current US dollars, GDP per capita, GDP growth, consumer price inflation, unemployment, total population, central government debt as a share of GDP, current account balance as a share of GDP, life expectancy at birth and CO2 emissions per capita). Each indicator is resolved across candidate sources and returned with its latest value and a short history, and every value is cited with its source, source code, year, country ISO3 and unit. Give the country as an ISO-3166 alpha-2 or alpha-3 code or a common name, and choose the history depth with years or range. Indicators with no data for the country are returned with available set to false rather than failing the call. The response lists the attribution for every source used (World Bank CC-BY 4.0, IMF WEO). Unknown country returns 400, no data at all 404, upstream failure 502. - Query params: `{"country": "Germany", "range": 5}` - Example response: `{"country": "Germany", "country_iso3": "DEU", "indicators": [{"indicator": "gdp_current_usd", "unit": "USD", "available": true, "source": "worldbank", "latest": {"year": 2023, "value": 4456081000000.0, "source": "worldbank", "source_code": "NY.GDP.MKTP.CD", "country_iso3": "DEU", "unit": "USD"}}], "attribution": ["Source: World Bank, World Development Indicators (CC-BY 4.0)"]}` - Tags: macro, economics, country-profile, gdp, inflation, world-bank, imf, indicators, development, overview ### `GET /macro/compare` — $0.02 Compare one indicator across several countries in a single call. The indicator is a canonical key (such as gdp_per_capita_usd, gdp_growth, inflation_cpi, unemployment, govt_debt_gdp, co2_per_capita) or a raw World Bank code; countries are given as ISO-3166 alpha-2 or alpha-3 codes or names, comma-separated (at least two). For each country the service takes the latest available value (at or before an optional reference year) and returns a ranking from highest to lowest along with computed signals: each country's rank, the highest and lowest values, the spread between them and the mean across the set. Every value is cited with its source and source code, and the response lists the attribution for every source used. Fewer than two countries returns 400, an unknown indicator or country 400, no data 404, upstream failure 502. - Query params: `{"indicator": "gdp_per_capita_usd", "country": "US,DE,JP,CN"}` - Example response: `{"indicator": "gdp_per_capita_usd", "unit": "USD", "ranking": [{"country_iso3": "USA", "year": 2023, "value": 82769.0, "rank": 1, "source": "worldbank", "source_code": "NY.GDP.PCAP.CD", "unit": "USD"}], "signals": {"count": 4, "max": {"country_iso3": "USA", "value": 82769.0}, "min": {"country_iso3": "CN", "value": 12614.0}, "spread": 70155.0}, "attribution": ["Source: World Bank, World Development Indicators (CC-BY 4.0)"]}` - Tags: macro, economics, compare, ranking, gdp, inflation, country, world-bank, imf, indicators ### `GET /macro/forecast` — $0.01 Forward-looking macro forecasts from the IMF World Economic Outlook (WEO) — the differentiator versus historical-only bundlers. For a single country it returns the requested forecast series (real GDP growth, average consumer price inflation, nominal GDP in US dollars, GDP per capita, general government gross debt as a share of GDP, current account balance as a share of GDP and the unemployment rate), or all of them when none is specified. Each series is a year to value list that includes the IMF's projected future years past the latest actual, so an agent can read the outlook directly. Give the country as an ISO-3166 alpha-2 or alpha-3 code or a name. Every value is cited to the IMF WEO with its indicator code, and the required attribution is included. Unknown country or forecast key returns 400, no data 404, upstream failure 502. The IMF endpoint occasionally returns a transient 403; the service retries. - Query params: `{"country": "US", "indicators": "real_gdp_growth,inflation"}` - Example response: `{"country": "United States", "country_iso3": "USA", "forecasts": [{"indicator": "real_gdp_growth", "unit": "percent", "source": "imf", "source_code": "NGDP_RPCH", "country_iso3": "USA", "values": [{"year": 2026, "value": 2.3}, {"year": 2027, "value": 2.1}]}], "attribution": ["Source: IMF World Economic Outlook"]}` - Tags: macro, economics, forecast, imf, weo, gdp-growth, inflation, projection, country, outlook ### `POST /pii/scan` — $0.005 A one-call detector an agent runs on any text BEFORE it forwards that text to a third-party LLM or API, so it can enforce GDPR / HIPAA / PCI handling. The object of the scan is the caller's own text (a JSON body) — nothing is crawled or fetched, so there is no network side effect and the marginal cost is ≈ zero. Deterministic detection combines curated regular expressions with checksum validators (Luhn for cards, mod-97 for IBAN, ABA for US routing numbers, structural checks for SSN and ITIN) and a context-word confidence boost, then resolves overlapping spans keeping the strongest. Coverage: emails, international and national phone numbers, credit cards, IBAN, US SSN and ITIN and EIN and bank routing numbers, Medicare beneficiary ids, passports and driver licenses, IPv4 and IPv6 and MAC addresses, Bitcoin and Ethereum addresses, dates of birth, geo coordinates, and a range of secrets and API keys (JWT, private keys, AWS and Google and GitHub and Slack and Stripe tokens). Each finding carries a 0-1 confidence score and its compliance tags; the summary counts by type and by compliance category. This route returns detection only — use /pii/redact to also get the transformed text. Structured PII only; it does not detect all PII (free-text names are out of scope); indicators, not legal advice. - Request body: `{"text": "Contact me at jane.doe@example.com or 4111 1111 1111 1111."}` - Example response: `{"object": "pii_scan", "input_bytes": 57, "summary": {"total_findings": 2, "counts_by_type": {"CREDIT_CARD": 1, "EMAIL": 1}, "compliance_categories": {"GDPR": 2, "PCI": 1}, "has_pii": true}, "findings": [{"type": "EMAIL", "score": 0.85, "compliance_tags": ["GDPR"]}, {"type": "CREDIT_CARD", "score": 0.8, "compliance_tags": ["PCI", "GDPR"]}], "pack_version": "2026.07.05", "disclaimer": "Structured PII indicators, not legal advice."}` - Tags: pii, privacy, gdpr, hipaa, pci, detection, compliance, redaction, agent, safety ### `POST /pii/redact` — $0.01 The transform companion to /pii/scan: it detects the same structured PII and returns the caller's text with each finding rewritten, plus the findings report and compliance summary. Four output modes, selectable globally and overridable per entity type: redact replaces a value with a type placeholder such as an EMAIL or CREDIT_CARD tag; mask keeps a useful remainder (a card's last four digits, an email's first letter); hash replaces the value with a salted SHA-256 digest so equal values stay linkable without exposing them; and tokenize is a reversible replacement that returns a token map in the response body so the caller can restore the original later. Tokenisation is fully STATELESS — the service stores nothing, which keeps it safe to run in an agent pipeline. Detection is deterministic (curated regular expressions plus checksum validators and a context boost); overlapping spans are resolved keeping the strongest. Use the entities allow-list to limit which types are touched and mode_overrides to, for example, mask phone numbers but tokenize emails in one call. Structured PII only; it does not detect all PII (free-text names are out of scope); indicators, not legal advice. - Request body: `{"text": "Email jane.doe@example.com, card 4111 1111 1111 1111.", "mode": "redact"}` - Example response: `{"object": "pii_redact", "mode": "redact", "input_bytes": 52, "sanitized_text": "Email , card .", "summary": {"total_findings": 2, "counts_by_type": {"CREDIT_CARD": 1, "EMAIL": 1}, "compliance_categories": {"GDPR": 2, "PCI": 1}, "has_pii": true}, "findings": [{"type": "EMAIL", "score": 0.85, "compliance_tags": ["GDPR"], "mode_applied": "redact"}], "pack_version": "2026.07.05", "disclaimer": "Structured PII indicators, not legal advice."}` - Tags: pii, privacy, gdpr, hipaa, pci, redaction, masking, tokenization, compliance, agent ### `GET /scholar/paper` — $0.02 One-call fused metadata for a single research paper, and the flagship of this service. Supply exactly one identifier — a DOI, an arXiv id, a PubMed id, a PubMed Central id, an OpenAlex work id, or a title to resolve by search — and get a compact cited JSON that reconciles the work across several open scholarly registries rather than reselling one raw feed. OpenAlex (CC0) is the anchor for the canonical metadata: title, reconstructed abstract, authors with their ORCID and ROR-identified affiliations, venue with ISSN and publisher, publication year, work type, subject concepts and topics, and funding. Crossref adds an independent is-referenced-by citation count, a references count and funder awards. Unpaywall and OpenAlex locate the best legally-hosted open-access PDF with its license, version and host type — a link to the copy the source itself points at, never a rehosted or restricted full-text. Semantic Scholar, when a key is configured, contributes a TL;DR and the influential-citation count. PubMed enriches biomedical works. The result deduplicates by DOI, provides a full id crosswalk (DOI, PMID, PMCID, arXiv, OpenAlex, Semantic Scholar, MAG), and tags every fused field with the source that supplied it in a provenance map. If a source is down, rate-limited or unconfigured its fields are simply omitted and noted in sources.errors — the call never fails with a 500. Metadata and open-access links only. - Query params: `{"doi": "10.1038/nature14539"}` - Example response: `{"found": true, "query": {"type": "doi", "value": "10.1038/nature14539"}, "ids": {"doi": "10.1038/nature14539", "openalex": "W2743563197", "pmid": "26017442"}, "title": "Deep learning", "authors": [{"name": "Yann LeCun", "orcid": "0000-0002-1825-0097", "affiliations": []}], "venue": {"name": "Nature", "issn": "0028-0836"}, "year": 2015, "type": "article", "counts": {"cited_by": {"openalex": 60000, "crossref": 58000}, "influential_citations": 4200}, "open_access": {"is_oa": true, "pdf_url": "https://example.org/paper.pdf", "license": "cc-by", "version": "publishedVersion"}, "provenance": {"id.doi": "openalex", "title": "openalex", "open_access": "unpaywall"}, "sources": {"partial": false, "used": ["openalex", "crossref", "unpaywall"]}, "attribution": ["OpenAlex (openalex.org), CC0"]}` - Tags: scholar, research, paper, doi, citation, openalex, crossref, unpaywall, semantic-scholar, metadata, open-access, literature ### `GET /scholar/search` — $0.01 Keyword and topic search over the OpenAlex catalogue of roughly 250 million works, returning a ranked list with the core metadata an agent needs to triage a literature review before paying for a full fusion. Supply search terms and optionally narrow by a publication-year range, open-access status, a subject concept, or an author institution. Each hit carries its DOI and OpenAlex id, title, leading authors, venue, year, work type, an OpenAlex citation count, and whether an open-access copy exists with its PDF link. This is the cheap first step: run a search, then call /scholar/paper on a promising DOI for the cross-registry cited fusion, or /scholar/citations to walk the citation graph. Results come straight from OpenAlex (CC0); if the upstream is rate-limited the response is marked partial rather than failing. Metadata only. - Query params: `{"query": "graph neural networks", "year_from": 2020, "oa_only": true}` - Example response: `{"query": {"search": "graph neural networks", "filters": {"year_from": 2020}}, "count": 48213, "returned": 1, "results": [{"ids": {"doi": "10.1145/3459637", "openalex": "W3126889"}, "title": "A survey on graph neural networks", "authors": ["Jie Zhou"], "venue": "ACM Computing Surveys", "year": 2021, "cited_by_count": 3100, "is_oa": true}], "sources": {"partial": false, "used": ["openalex"]}, "attribution": ["OpenAlex (openalex.org), CC0"]}` - Tags: scholar, research, search, literature, openalex, papers, lit-review, discovery, metadata ### `GET /scholar/citations` — $0.02 Walk the citation graph around a single paper for literature review, prior-art search and bibliometric analysis. Supply one identifier (DOI, arXiv id, PubMed id, PubMed Central id, OpenAlex id, or a title to resolve) and get two normalized lists: the works this paper references (its outgoing bibliography) and the works that cite it (its incoming impact), each ranked by citation count and returned as compact records with DOI and OpenAlex id, title, authors, venue, year and citation count. Totals for each direction are reported alongside the capped page of returned items, and when a Semantic Scholar key is configured the response adds the influential citation count — the subset of citations Semantic Scholar judges genuinely built on the work. The graph edges come from OpenAlex; a rate-limited or missing source is reported as partial, never a 500. Metadata only. - Query params: `{"doi": "10.1038/nature14539", "limit": 10}` - Example response: `{"found": true, "work": {"ids": {"doi": "10.1038/nature14539", "openalex": "W2743563197"}, "title": "Deep learning", "year": 2015}, "references": {"total": 100, "returned": 1, "items": [{"ids": {"openalex": "W1"}, "title": "Backprop", "year": 1986, "cited_by_count": 900}]}, "citing": {"total": 60000, "returned": 1, "items": [{"ids": {"doi": "10.1/x"}, "title": "A later work", "year": 2019, "cited_by_count": 12}]}, "influential_citation_count": 4200, "sources": {"partial": false, "used": ["openalex", "semanticscholar"]}, "attribution": ["OpenAlex (openalex.org), CC0"]}` - Tags: scholar, research, citations, references, citation-graph, prior-art, lit-review, openalex, semantic-scholar, bibliometrics ### `GET /scholar/author` — $0.015 Resolve a researcher's identity and impact profile for author-level due diligence, expert-finding and bibliometrics. Supply an ORCID for a single resolved profile, or a name (optionally narrowed by an institution) for a ranked list of candidate authors — the route never silently merges two different people who share a name; an ambiguous name returns candidates for you to choose from and re-query by ORCID. A resolved profile carries the display name, ORCID, OpenAlex id, total works count, total citation count, h-index and i10-index, current institutions with their ROR identifiers, the author's top subject concepts, and a list of their most-cited works. Data comes from OpenAlex (CC0), which performs the underlying author disambiguation; a rate-limited upstream is reported as partial rather than failing. Public researcher metadata only. - Query params: `{"orcid": "0000-0002-1825-0097"}` - Example response: `{"found": true, "query": {"orcid": "0000-0002-1825-0097"}, "author": {"name": "Yann LeCun", "orcid": "0000-0002-1825-0097", "ids": {"openalex": "W..."}, "works_count": 400, "cited_by_count": 250000, "h_index": 150, "institutions": [{"name": "New York University", "ror": "0190ak572"}], "concepts": [{"name": "Artificial intelligence", "score": 0.9}], "top_works": []}, "sources": {"partial": false, "used": ["openalex"]}, "attribution": ["OpenAlex (openalex.org), CC0"]}` - Tags: scholar, research, author, researcher, orcid, disambiguation, h-index, openalex, affiliation, bibliometrics ### `GET /scholar/oa` — $0.008 A cheap, focused open-access locator: give a DOI and find out whether a free, legally hosted copy of the paper exists and where. The route queries Unpaywall — the authority for open-access status — and falls back to OpenAlex, returning the best open-access location with its PDF url, landing page, license (for example cc-by), version (published, accepted or submitted) and host type (repository or publisher). It returns the link the source itself points at; it never proxies, rehosts or unlocks restricted or paywalled full-text. Use it when you already have a DOI and only need the free PDF, rather than the full /scholar/paper fusion. Attribution to Unpaywall is included as required. If a source is unavailable the response is marked partial rather than failing. - Query params: `{"doi": "10.1038/nature14539"}` - Example response: `{"found": true, "query": {"doi": "10.1038/nature14539"}, "title": "Deep learning", "is_oa": true, "best_oa": {"is_oa": true, "pdf_url": "https://example.org/paper.pdf", "landing_page": "https://example.org/paper", "license": "cc-by", "version": "publishedVersion", "host_type": "repository", "source": "unpaywall"}, "sources": {"partial": false, "used": ["unpaywall", "openalex"]}, "attribution": ["Data from Unpaywall (unpaywall.org)"]}` - Tags: scholar, research, open-access, oa, pdf, doi, unpaywall, openalex, fulltext-link ### `POST /tx/signature` — $0.02 Pre-sign safety check for the off-chain typed-data an autonomous agent is about to sign — the gap wallets barely cover because a signature is not a transaction. Recognizes EIP-2612 Permit, Uniswap Permit2 (PermitSingle, PermitBatch, PermitTransferFrom) and EIP-3009 (TransferWithAuthorization, ReceiveWithAuthorization, the flow x402 itself uses). Deterministically decodes the authorized spender, token, amount, deadline and nonce, then scores several dimensions: domain-spoof (a Permit2 signature whose verifyingContract is not the canonical Permit2, or a domain naming a known token but pointing elsewhere), chain-id mismatch, approval-hygiene (unlimited or very large allowance, missing or far expiry, unrecognized spender) and a match against public scam blocklists. Optionally recovers the signer from a supplied signature. Multi-chain EVM only. Returns allow, warn or block with a 0-100 risk, per-dimension flags and cited reasons. Off-chain signatures are decoded, not end-to-end simulated. Automated risk indicators, not advice. Bad input returns 4xx. - Request body: `{"network": "base", "typed_data": {"primaryType": "PermitSingle", "domain": {"name": "Permit2", "chainId": 8453, "verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"}, "message": {"details": {"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "1461501637330902918203684832716283019655932542975", "expiration": "281474976710655", "nonce": "0"}, "spender": "0x1111111111111111111111111111111111111111", "sigDeadline": "1999999999"}}}` - Example response: `{"kind": "signature", "network": "base", "chain_id": 8453, "recognized": true, "authorizes": {"standard": "Uniswap Permit2 PermitSingle", "spender": "0x1111111111111111111111111111111111111111", "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "unlimited": true}, "flags": {"unlimited_approval": true, "no_expiry": true, "unknown_spender": true}, "risk_score": 52, "verdict": "warn", "reasons": ["Grants an UNLIMITED (max-uint) spending allowance."], "disclaimer": "Automated risk indicators, not advice."}` - Tags: security, signature, eip712, permit2, eip3009, approval, phishing, wallet, onchain ### `POST /tx/raw` — $0.02 Pre-sign safety check for a raw EVM transaction ({to, data, value}). Decodes the calldata selector against a known-signature registry (approve, increaseAllowance, transfer, transferFrom, setApprovalForAll, EIP-2612 permit, Permit2 approve, NFT safeTransferFrom and more) into a human-readable function plus decoded arguments. For known patterns it surfaces the effect deterministically: an approval shows the new allowance and an unlimited flag and, given a from address, reads the current allowance for the delta; a transfer shows the recipient and amount; setApprovalForAll flags full-collection operator control. It optionally dry-runs an eth_call to see whether the transaction reverts, and matches the target and any decoded spender against public scam blocklists. This is decode plus approval-hygiene plus known-pattern effects plus scam-match, not full trace-based generic asset-diff (public RPCs often lack tracing). Multi-chain EVM only. Returns allow, warn or block with a 0-100 risk and cited reasons. Automated risk indicators, not advice. Bad input returns 4xx. - Request body: `{"network": "base", "to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "data": "0x095ea7b30000000000000000000000001111111111111111111111111111111111111111ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}` - Example response: `{"kind": "raw", "network": "base", "chain_id": 8453, "to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "decoded": {"selector": "0x095ea7b3", "function": "approve", "args": {"spender": "0x1111111111111111111111111111111111111111", "amount": "115792089237316195423570985008687907853269984665640564039457584007913129639935"}}, "effects": {"type": "approval", "unlimited": true}, "flags": {"unlimited_approval": true, "unknown_spender": true}, "risk_score": 40, "verdict": "warn", "disclaimer": "Automated risk indicators, not advice."}` - Tags: security, transaction, calldata, approval, abi, phishing, wallet, onchain ### `GET /gdelt/news` — $0.008 A one-call global news radar over the GDELT Project's open monitoring of world media across 65+ languages. Filter by a free-text `query` (multi-word phrases are auto-quoted as GDELT phrase searches), a curated `theme` (protests, terrorism, elections, inflation, sanctions, ...), a `country` (friendly name mapped to GDELT's FIPS 10-4 source-country code server-side), a source `lang`, a `timespan` (15min..1m), `limit` and `sort`. Each article returns only syndicated metadata (title, link-back to the publisher, domain, source-country, language, ISO seendate, social image) — full articles stay at the publisher's link (GDELT's redistribution terms). From the same payload we derive coverage breakdowns: the top source-countries, top domains, languages and total count, so you get a distribution view without extra calls. Upstream is throttled + cached (GDELT is rate-limited), so this is intelligence/research latency, not real-time. Bad input is a 400; a total upstream failure is a 502; never a 500. The host is fixed server-side (you pass only filters), so there is no SSRF surface. GDELT attribution is included on every response. - Query params: `{"theme": "protests", "country": "France", "timespan": "24h", "limit": 20}` - Example response: `{"query": "theme:PROTEST sourcecountry:FR", "count": 1, "articles": [{"title": "Thousands march in Paris", "url": "https://example.fr/a", "domain": "example.fr", "source_country": "France", "language": "French", "seendate": "2026-07-07T23:45:00Z", "socialimage": null}], "breakdowns": {"count": 1, "top_source_countries": [{"value": "France", "count": 1}], "top_domains": [{"value": "example.fr", "count": 1}], "languages": [{"value": "French", "count": 1}]}, "attribution": "Data via the GDELT Project ..."}` - Tags: news, geopolitics, world, events, gdelt, global, media, intelligence, osint, coverage, multilingual, research ### `GET /gdelt/tone` — $0.006 Sentiment for a world topic scored by GDELT's own multilingual tone engine — a real differentiator when the coverage is not in English. We request GDELT's ToneChart for your filter (a free-text `query`, curated `theme`, `country`, source `lang`, `timespan`) and return the tone histogram (emotional bins from strongly negative to strongly positive, each with a few example articles), the coverage-weighted average tone with a negative/neutral/positive label, the modal (most-covered) tone bucket, and the total article count. Set `trend` to also fetch a tone timeline (is the topic's tone rising or falling over the window). Each measurement is best-effort: a failing one is reported under `errors` and the rest are returned; only a total failure is a 502, never a 500. Upstream is throttled + cached (GDELT rate-limits), so this is research latency. The host is fixed server-side, so there is no SSRF surface; GDELT attribution is included. - Query params: `{"theme": "elections", "country": "United States", "trend": true}` - Example response: `{"query": "theme:ELECTION sourcecountry:US", "tone": {"average_tone": -1.42, "tone_label": "neutral", "modal_bin": -1, "total_articles": 240, "bins": [{"tone": -5, "count": 12, "examples": []}]}, "tone_trend": {"metric": "tone", "latest": -1.4, "trend": "falling", "points": []}, "errors": [], "attribution": "Data via the GDELT Project ..."}` - Tags: sentiment, tone, news, geopolitics, gdelt, multilingual, mood, intelligence, osint, research, global ### `GET /gdelt/timeline` — $0.006 Track whether a world topic is heating up or cooling down over time. Choose `metric` = volume (GDELT's coverage-intensity timeline — the percentage of all monitored global coverage that matches your filter, the classic 'is this trending' signal) or tone (the average-tone trend). Filter by a free-text `query`, curated `theme`, `country`, source `lang`, and a `timespan` (15min..1m). We normalize the GDELT timeline into ISO-dated points and add the latest value, the first value, the delta and a rising/falling/flat trend. One upstream call, throttled + cached (GDELT rate-limits). Bad input is a 400; a total upstream failure is a 502; never a 500. The host is fixed server-side (you pass only filters), so there is no SSRF surface; GDELT attribution is included. - Query params: `{"query": "climate summit", "metric": "volume", "timespan": "1w"}` - Example response: `{"query": "\"climate summit\"", "metric": "volume", "timeline": {"series": "Volume Intensity", "metric": "volume", "latest": 0.031, "first": 0.012, "delta": 0.019, "trend": "rising", "points": [{"date": "2026-07-01T00:00:00Z", "value": 0.012}]}, "attribution": "Data via the GDELT Project ..."}` - Tags: timeline, trend, news, volume, tone, gdelt, geopolitics, intelligence, osint, monitoring, research, global ### `GET /gdelt/pulse` — $0.03 The moat route: a single normalized, cited intelligence brief on any world topic that fuses what would otherwise be several GDELT queries. From at most two cached upstream calls (an article list + a tone timeline) we return the recent articles (metadata + link-back), coverage breakdowns derived from the same article payload (top source-countries, top domains, languages, count), the tone trend over the window with the current average tone and a rising/falling/flat direction. Filter by a free-text `query`, curated `theme`, `country`, source `lang`, `timespan` and `limit`. This saves a buyer four to five GDELT calls with different modes plus the parsing and normalization. Each dimension is best-effort: a failing one is reported under `errors` with a `partial` flag and the rest are returned; only a total failure is a 502, never a 500. HONEST latency: up to ~15-20s on a cold cache because outbound GDELT calls are serialized under a rate-limit throttle — this is intelligence/research, not real-time trading. The host is fixed server-side, so there is no SSRF surface; GDELT attribution is included. - Query params: `{"theme": "sanctions", "country": "Russia", "timespan": "3d", "limit": 25}` - Example response: `{"query": "theme:ECON_SANCTIONS sourcecountry:RS", "articles": [{"title": "New measures announced", "url": "https://example.ru/a", "domain": "example.ru", "source_country": "Russia", "language": "Russian", "seendate": "2026-07-07T20:00:00Z", "socialimage": null}], "coverage": {"count": 25, "top_source_countries": [{"value": "Russia", "count": 9}], "top_domains": [], "languages": []}, "tone_trend": {"metric": "tone", "latest": -2.1, "trend": "falling", "points": []}, "current_avg_tone": -2.1, "tone_direction": "falling", "partial": false, "errors": [], "attribution": "Data via the GDELT Project ..."}` - Tags: intelligence, fusion, news, geopolitics, tone, coverage, gdelt, osint, global, multilingual, research, brief ### `GET /btc/fees` — $0.005 One-call Bitcoin fee intelligence for a wallet, exchange or payment agent that needs to price a transaction before broadcasting it. Returns the recommended fee rate in satoshis per virtual byte for five confirmation horizons: fastest (next block, about ten minutes), half hour (about three blocks), hour (about six blocks), economy (no time guarantee) and the minimum relay fee. Alongside the fee rates it returns a live mempool congestion snapshot drawn from the same source: the current unconfirmed transaction count, the total virtual size of the mempool and an estimated block backlog, so an agent can judge how quickly a given fee will confirm. Data is normalized from the free public mempool.space API into one compact cited shape; the value-add is the normalization and the congestion context, not a resale. Fees change every block; these are informational indicators, not advice, and not a guarantee of confirmation time. - Query params: `{}` - Example response: `{"fee_estimates_sat_vb": {"fastest": {"sat_vb": 3, "target": "next block (~10 min)"}, "hour": {"sat_vb": 1, "target": "within ~6 blocks (~60 min)"}}, "congestion": {"mempool_tx_count": 89345, "estimated_backlog_blocks": 45.6}, "sources": {"partial": false}}` - Tags: bitcoin, btc, fees, fee-rate, sat-vb, mempool, congestion, on-chain, blockchain ### `GET /btc/mempool` — $0.005 One-call view of the Bitcoin mempool for a fee-estimation, monitoring or transaction-timing agent. Returns the current number of unconfirmed transactions, the total virtual size of the mempool in virtual bytes, the total fees offered by those transactions in satoshis, and a fee-rate histogram that groups pending transactions into buckets by their fee rate in satoshis per virtual byte with the virtual size in each bucket. From the total virtual size it also returns an estimated block backlog, the approximate number of blocks needed to clear the current mempool. This is a deeper view than the fee-rate summary: the histogram lets an agent reason about exactly where its chosen fee rate sits in the queue. Data is normalized from the free public mempool.space API into one compact cited shape; the value-add is the normalization and the backlog derivation, not a resale. The mempool changes every block; informational indicators only, not advice. - Query params: `{}` - Example response: `{"mempool_tx_count": 89345, "mempool_vsize": 45652382, "mempool_total_fee_sat": 11284021, "fee_histogram": [{"fee_rate_sat_vb": 7.72, "vsize": 50009}], "estimated_backlog_blocks": 45.6, "sources": {"partial": false}}` - Tags: bitcoin, btc, mempool, fee-histogram, backlog, congestion, unconfirmed, on-chain, blockchain ### `GET /btc/address` — $0.01 One-call balance and unspent-output lookup for a Bitcoin address, for a wallet, accounting, treasury or analytics agent. Accepts any Bitcoin mainnet address form (legacy starting with one, pay-to-script-hash starting with three, or native SegWit and Taproot bech32 starting with bc1) and returns the confirmed on-chain balance, the unconfirmed mempool balance and the combined total, each in both satoshis and BTC; the funded and spent output totals and the transaction count; and the set of current unspent transaction outputs, each with its txid, output index, value and confirmation state. The UTXO set is capped for anti-abuse with a truncated flag when the address holds more outputs than the cap. Reads use the Esplora REST schema with mempool.space as primary and Blockstream Esplora as an automatic fallback, so a single source outage does not break the call. The value-add is the normalization into one cited balance-and-UTXO shape; informational indicators only, not advice. - Query params: `{"address": "bc1qgdjqv0av3q56jvd82tkdjpy7gdp9ut8tlqmgrpmv24sq90ecnvqqjwvw97"}` - Example response: `{"address": "bc1qgdjq...jwvw97", "balance": {"confirmed_sat": 13001007900798, "confirmed_btc": 130010.079, "total_sat": 13001007900798}, "tx_count": 334, "utxo_count": 46, "utxos": [{"txid": "9f5d8b...0db3", "vout": 0, "value_sat": 1628, "confirmed": true}], "sources": {"partial": false}}` - Tags: bitcoin, btc, address, balance, utxo, unspent, wallet, on-chain, blockchain ### `GET /btc/tx` — $0.01 One-call decoded view of a Bitcoin transaction for a wallet, explorer or settlement-monitoring agent. Supply a transaction id and get back the version and locktime; the size in bytes, the weight and the computed virtual size; the fee in satoshis and BTC and the derived fee rate in satoshis per virtual byte; a replace-by-fee flag computed from the input sequence numbers per BIP 125; the input and output counts with the total input and output value; and the list of inputs (previous txid, output index, value and address where known, coinbase flag) and outputs (value, address and script type), each capped for anti-abuse with a truncated flag. It also returns the confirmation status: whether the transaction is confirmed, its block height and hash and time, and a confirmation count derived from the current chain tip. Reads use the Esplora REST schema with mempool.space as primary and Blockstream Esplora as an automatic fallback. The value-add is the normalization into one cited shape plus the derived virtual size, fee rate and confirmation count; informational indicators only, not advice. - Query params: `{"txid": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"}` - Example response: `{"txid": "4a5e1e...da33b", "fee_sat": 2820, "vsize": 141, "fee_rate_sat_vb": 20.0, "rbf": false, "input_count": 1, "output_count": 2, "status": {"confirmed": true, "block_height": 800000, "confirmations": 157155}, "sources": {"partial": false}}` - Tags: bitcoin, btc, transaction, txid, rbf, fee, confirmations, on-chain, blockchain ### `GET /btc/block` — $0.008 One-call composite view of Bitcoin block and network state for a mining, research or protocol-monitoring agent. Supply a block height or a block hash, or omit both to get the current chain tip, and receive the block metadata (hash, height, timestamp and median time, transaction count, size and weight, version, merkle root, previous block hash, nonce, bits and difficulty) with a confirmation count derived from the tip. On top of the raw block this route fuses network context that a plain block lookup does not give: the current difficulty-adjustment period (progress percent through the retarget, the estimated difficulty change, the remaining blocks and the next retarget height), a computed halving countdown (the halving interval, the current reward era and block subsidy, the next halving height, the blocks remaining until the halving and an estimated halving date), and a recent network hashrate snapshot in exahashes per second with the current difficulty. The halving countdown is computed by us from the tip height, not proxied. Block reads use the Esplora schema with mempool.space primary and Blockstream Esplora fallback; the difficulty, halving and hashrate context come from the mempool.space extended API and degrade gracefully if briefly unavailable. The value-add is this composite fusion plus the halving computation, not a resale; informational indicators only, not advice. - Query params: `{"height": 800000}` - Example response: `{"block": {"height": 800000, "tx_count": 3721, "difficulty": 53911173001054.586, "confirmations": 157155}, "halving": {"next_halving_height": 1050000, "blocks_until_halving": 92845, "current_block_subsidy_btc": 3.125}, "difficulty_adjustment": {"progress_percent": 77.9, "remaining_blocks": 445}, "hashrate": {"current_hashrate_ehs": 907.29}, "sources": {"partial": false}}` - Tags: bitcoin, btc, block, halving, difficulty, hashrate, retarget, on-chain, blockchain ### `GET /tax/income` — $0.005 Estimates US federal individual income tax for the given tax year from a layered progressive bracket table (each rate applies only to its slice of taxable income). Taxable income is gross_income minus deductions, using the standard deduction when deductions is omitted. Returns taxable_income, the standard_deduction, federal_tax, the marginal_rate (top bracket reached) and effective_rate (tax over gross income), plus a per-bracket breakdown. Supply a two-letter state code to add a flat-state income estimate and a combined total. Reference vector: single, gross 100000, 2026 gives taxable 83900 and federal_tax 13170. Rates from IRS Rev. Proc. 2025-32. Pure local computation; a reference estimate, not tax advice. - Query params: `{"gross_income": 100000, "filing_status": "single", "tax_year": 2026}` - Example response: `{"filing_status": "single", "taxable_income": 83900.0, "standard_deduction": 16100.0, "federal_tax": 13170.0, "marginal_rate": 0.22, "effective_rate": 0.1317, "tax_year": 2026, "disclaimer": "estimate for reference only, not tax advice"}` - Tags: tax, income-tax, federal, irs, brackets, us ### `GET /tax/fica` — $0.003 Estimates US payroll taxes. For an employee: Social Security (OASDI) at 6.2% up to the annual wage base, Medicare at 1.45% on all wages, and the additional Medicare 0.9% surtax above the filing-status threshold. For self_employed: both halves on 92.35% of net earnings (OASDI 12.4% to the wage base, Medicare 2.9%), the additional Medicare surtax, and the deductible half of the self-employment tax. Wage base and thresholds from SSA 2026 and IRS Rev. Proc. 2025-32. Pure local computation; a reference estimate, not tax advice. - Query params: `{"wages": 200000, "filing_status": "single", "self_employed": false}` - Example response: `{"self_employed": false, "wages": 200000.0, "social_security": 11439.0, "medicare": 2900.0, "additional_medicare": 0.0, "total": 14339.0, "tax_year": 2026, "disclaimer": "estimate for reference only, not tax advice"}` - Tags: tax, fica, payroll, social-security, medicare, self-employment ### `GET /tax/capgains` — $0.003 Estimates US tax on a capital gain. A long-term gain is stacked on top of ordinary taxable income and taxed layered across the 0, 15 and 20 percent breakpoints for the filing status. A short-term gain is taxed at ordinary rates, computed as the incremental tax of stacking the gain on ordinary income. The net investment income tax of 3.8 percent is added on the lesser of the gain and income above the filing-status threshold. Breakpoints and thresholds from IRS Rev. Proc. 2025-32. Pure local computation; a reference estimate, not tax advice. - Query params: `{"gain": 50000, "holding_period": "long", "ordinary_income": 100000, "filing_status": "single"}` - Example response: `{"filing_status": "single", "holding_period": "long", "gain": 50000.0, "cap_gains_rate": 0.15, "cap_gains_tax": 7500.0, "niit": 0.0, "total": 7500.0, "tax_year": 2026, "disclaimer": "estimate for reference only, not tax advice"}` - Tags: tax, capital-gains, niit, investments, long-term, short-term ### `GET /tax/paycheck` — $0.008 Composite take-home estimate that reuses the income and FICA math internally. Federal income tax is computed on gross income less pretax deductions and the standard deduction; payroll tax is Social Security plus Medicare on gross wages; an optional two-letter state code adds a flat-state estimate. Returns the total tax, the total effective rate, net pay for the year and per pay period, and disposable income (take-home after all taxes and pretax withholdings). Pretax deductions reduce the income-tax base but not payroll wages, which is documented. Pure local computation; a reference estimate, not tax advice. - Query params: `{"gross_income": 100000, "filing_status": "single", "pay_period": "biweekly", "state": "CO"}` - Example response: `{"filing_status": "single", "pay_period": "biweekly", "gross_income": 100000.0, "federal_income_tax": 13170.0, "total_tax": 21389.0, "net_pay_annual": 78611.0, "net_pay_per_period": 3023.5, "disposable_income": 78611.0, "tax_year": 2026, "disclaimer": "estimate for reference only, not tax advice"}` - Tags: tax, paycheck, take-home, net-pay, disposable-income, payroll ### `GET /tax/brackets` — $0.002 Cheap reference dump of the underlying data table for a tax year and filing status: the ordered income-tax brackets with their bounds, the standard deduction, the long-term capital-gains breakpoints, the FICA and self-employment constants (rates, wage base, additional-Medicare and net-earnings factors), and the net investment income tax threshold. Values from IRS Rev. Proc. 2025-32 and SSA 2026. Pure lookup, not tax advice. - Query params: `{"tax_year": 2026, "filing_status": "single"}` - Example response: `{"filing_status": "single", "standard_deduction": 16100, "brackets": [{"rate": 0.1, "from": 0, "to": 12400}], "tax_year": 2026, "disclaimer": "estimate for reference only, not tax advice"}` - Tags: tax, brackets, reference, standard-deduction, irs, us ### `GET /aeo/audit` — $0.02 One-call AI-search / answer-engine optimization (AEO, also called GEO — generative-engine optimization) audit of a website, for an agent deciding whether a site is discoverable and citeable by ChatGPT search, Perplexity, Google AI Overviews, Claude and autonomous agents. Input: a URL, domain or host. Output: a deterministic composite visibility score 0-100, a rating (poor / fair / good / excellent), a prioritized fix plan (each fix carries the axis, the issue, why it matters and a concrete recommendation) and the raw per-axis signals so the agent can re-rank. Six axes, each best-effort (an unreachable source drops out and the weighted mean renormalizes, never a 500): answerability (a single H1, an H2/H3 hierarchy, FAQ/QAPage answer blocks and how much content is readable as static text instead of hidden behind JavaScript), structured data (schema.org JSON-LD, OpenGraph, Twitter cards, meta description, canonical), AI-crawler access (a robots.txt access matrix for the 2026 cohort of AI crawlers such as GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, Claude-User, PerplexityBot, Google-Extended and more, where blocking citation-relevant fetchers removes the site from AI answers), crawlability (sitemap.xml, robots not blocking everything, HTTPS, readable without JS), llms.txt readiness (presence and llmstxt.org validity of /llms.txt and /llms-full.txt) and MCP well-known readiness (agent manifests under /.well-known). All signals are computed by us from the site's own public surface, not a resale of a paid API. Automated visibility indicators, not a guarantee of being cited or ranked. - Query params: `{"url": "https://example.com"}` - Example response: `{"domain": "example.com", "visibility_score": 62, "rating": "good", "fixes": [{"axis": "answerability", "issue": "The homepage has no H1 heading.", "why_it_matters": "The H1 is the primary topic signal an answer engine uses.", "recommendation": "Add exactly one descriptive H1 that states the page topic.", "impact": "high"}], "coverage": {"axes_total": 6, "axes_evaluated": 6, "confidence": 1.0}, "disclaimer": "Automated AI-search visibility indicators, not a guarantee."}` - Tags: aeo, ai-search, answer-engine, seo, visibility, llms-txt, robots, structured-data, schema-org, crawlability, audit, generative-engine-optimization, geo ### `GET /aeo/llms` — $0.005 A cheap, focused sub-check of a site's llms.txt readiness for LLM readers. Fetches /llms.txt and /llms-full.txt from the target host and validates each against the llmstxt.org format: a single H1 title line, a blockquote summary, and one or more sections of markdown links to key pages, plus the file size. llms.txt is the emerging convention that hands an LLM reader a curated, low-noise map of the most important pages instead of forcing it to guess from raw HTML. Returns per-file presence and structural flags, a 0-100 readiness score and any fixes. Computed by us from the site's own public files. Indicators, not a guarantee. - Query params: `{"domain": "example.com"}` - Example response: `{"domain": "example.com", "llms_txt": {"present": true, "has_h1": true, "has_blockquote": true, "link_count": 12, "size_bytes": 1840, "valid": true}, "llms_full_txt": {"present": false}, "llms_score": 100, "fixes": [], "disclaimer": "Automated AI-search visibility indicators, not a guarantee."}` - Tags: aeo, llms-txt, ai-search, answer-engine, llmstxt, readiness, agent-readable ### `GET /aeo/crawlers` — $0.005 A single-fetch analysis of a site's robots.txt from the point of view of AI answer engines. Parses robots.txt and, for each crawler in the 2026 AI cohort (OpenAI GPTBot, ChatGPT-User and OAI-SearchBot; Anthropic ClaudeBot, anthropic-ai and Claude-User; Perplexity PerplexityBot and Perplexity-User; Google-Extended and GoogleOther; Common Crawl CCBot; Applebot-Extended; ByteDance Bytespider; Meta meta-externalagent; Amazonbot), reports whether the bot is explicitly listed and whether it is allowed or blocked at the site root, flags each bot that actually fetches pages to cite in an answer engine, reports whether the default user-agent rule blocks the whole site, lists any declared sitemaps and returns a 0-100 score based on how many citation-relevant bots are allowed. Blocking citation-relevant fetchers removes the site from AI answers; blocking training-only bots is a separate policy choice. Computed by us from the site's own robots.txt. Indicators, not a guarantee. - Query params: `{"domain": "example.com"}` - Example response: `{"domain": "example.com", "robots_present": true, "default_blocks_all": false, "crawler_matrix": [{"bot": "PerplexityBot", "operator": "Perplexity", "citation_relevant": true, "listed": false, "access": "allowed"}], "crawler_score": 100, "fixes": [], "disclaimer": "Automated AI-search visibility indicators, not a guarantee."}` - Tags: aeo, robots-txt, ai-crawler, gptbot, claudebot, perplexitybot, ai-search, access-control, crawl ### `GET /seo/audit` — $0.03 One-call deterministic on-page technical-SEO audit of a single public web page, for an SEO/marketing agent, a site owner or a coding agent editing markup. Input: a full URL (path preserved), or a bare domain/host (audits the homepage). The page is fetched over HTTPS following redirects, and BOTH the HTML and the response headers and final URL are analysed, so header-only and redirect-only signals (X-Robots-Tag, Content-Type charset, HTTP-to-HTTPS, self-canonical) are caught. Twenty-four mechanical rules run across six weighted categories. Indexability and crawl directives: HTTPS, meta-robots noindex, X-Robots-Tag noindex, robots.txt access and a present, self-referencing canonical. Title and meta description: presence and SERP-snippet length bands (title about 30 to 60 characters, description about 70 to 160). Headings and content depth: exactly one H1, a heading outline that does not skip levels, and enough body text that the page is not thin. Structured data and social: schema.org JSON-LD that is present AND parses (a present-but-broken block is failed, which a naive counter misses), OpenGraph completeness and a Twitter card. Images: the share of img elements carrying a non-empty alt attribute. And i18n, mobile, encoding and crawl aids: a mobile viewport, a valid html lang, a declared charset, valid hreflang if used, a discoverable sitemap and a favicon. Output: a 0-100 score, a letter grade A to F and a word rating, a per-rule checklist (each rule carries its status, the evidence and, when not passing, the issue, why it matters and a concrete recommendation), a prioritized fix list sorted by impact, and per-category subscores. Crucially, an indexability-critical fail (noindex, an X-Robots-Tag noindex, a robots.txt block or a canonical pointing at a different URL) flags the verdict critical and caps the grade DOWN no matter how green the cosmetics are, because such a page physically will not rank. An unreachable, robots-blocked or non-200 page is itself the critical finding: its HTML rules become not-applicable and the audit still returns a verdict, never an error. All signals are computed by us from the page's own public surface, honoring robots.txt, with no third-party audit API resold. This is a deterministic, mechanical markup audit: it does not judge content quality, keyword intent, E-E-A-T, backlinks, Core Web Vitals or JavaScript-rendered content. Mechanical indicators, not a guarantee of ranking or indexation. - Query params: `{"url": "https://example.com"}` - Example response: `{"url": "https://example.com", "score": 71, "grade": "C", "rating": "good", "critical": false, "summary": {"rules_total": 24, "pass": 16, "warn": 3, "fail": 3, "na": 2}, "fixes": [{"id": "single_h1", "category": "headings", "status": "fail", "severity": "high", "recommendation": "Use exactly one descriptive H1."}]}` - Tags: seo, technical-seo, on-page-seo, audit, indexability, meta-tags, structured-data, sitemap, site-audit ### `GET /validator/vet` — $0.02 One-call delegation due-diligence for agents choosing (or monitoring) a Solana validator to stake SOL with. Supply exactly one identifier, either a vote-account pubkey or a node identity pubkey, and optionally set include_history. The route resolves the validator in a cluster-wide snapshot this service refreshes in-process from keyless public Solana RPC and returns a delegation-risk verdict of safe, caution, avoid or not_found with a 0-100 risk score. The score is a deterministic weighted model that FUSES several dimensions rather than relaying raw fields: voting delinquency (a delinquent validator is missing rewards now), commission level and a confiscatory flag, a commission-rug signal built from this service's own accrued per-epoch commission history (fee raised after stake was gathered), leader skip-rate as a percentile of the whole network computed from block production, vote-credit performance as a network percentile, agent software version lag against the latest line the cluster runs, and whether the validator sits in the superminority whose combined stake can halt the chain. Each fired signal returns its weight, flag and a human-readable reason so an agent can re-rank with its own policy. All dimensions are computed by this service from public on-chain data; no third-party dashboard API is resold. Cold-start aware: before commission history accrues, the rug dimension reports no_history. An unknown pubkey returns verdict not_found rather than an error. Risk indicators only, not financial or staking advice; verify before delegating. - Query params: `{"vote": "8tjRQLzor4dP4qd1e7pVDdQmsdwdVv4kSeCVEHwWEiQW"}` - Example response: `{"verdict": "safe", "risk_score": 8, "network": "solana", "validator": {"vote_pubkey": "8tjRQLzor4dP4qd1e7pVDdQmsdwdVv4kSeCVEHwWEiQW", "commission_pct": 5, "activated_stake_sol": 893257.1, "delinquent": false, "in_superminority": false}, "flags": {"delinquency": "ok", "commission_level": "ok"}, "reasons": ["No adverse risk indicators detected."], "epoch": 1000, "disclaimer": "Risk indicators computed from public on-chain data; not financial or staking advice. Verify independently before delegating."}` - Tags: solana, validator, staking, delegation, due-diligence, risk, vetting, commission, superminority, skip-rate, proof-of-stake ### `GET /validator/lookup` — $0.008 The light first step of a two-step validator-vetting flow (lookup then vet, mirroring the freight and sanctions screen-then-verify pattern). Use it two ways. Give a vote-account or a node identity pubkey and it resolves the pair plus the commission, activated stake in SOL and delinquency flag, so an agent can map between the identity a validator advertises and the vote-account it delegates to. Or give top_n and it returns that many validators the model currently rates safe, ranked by ascending risk score and then by stake, each with its vote and identity pubkeys, verdict, risk score, commission and activated stake, filtered to active non-delinquent vote accounts with meaningful stake. Then call validator/vet on a chosen vote-account for the full weighted verdict with per-dimension reasons. Data is a cluster-wide snapshot computed from keyless public Solana RPC. Risk indicators only, not financial or staking advice. - Query params: `{"top_n": 5}` - Example response: `{"network": "solana", "epoch": 1000, "resolved": null, "top_safe": [{"vote_pubkey": "8tjRQLzor4dP4qd1e7pVDdQmsdwdVv4kSeCVEHwWEiQW", "verdict": "safe", "risk_score": 4, "commission_pct": 5, "activated_stake_sol": 893257.1}], "disclaimer": "Risk indicators computed from public on-chain data; not financial or staking advice. Verify independently before delegating."}` - Tags: solana, validator, staking, delegation, lookup, resolve, vote-account, identity, top-validators, proof-of-stake ### `GET /depin/hotspot` — $0.01 A one-call profile of a single Helium hotspot or gateway, fused from the official keyless Helium Entity API (provided free of charge, with location obfuscated to an H3 resolution-8 cell) plus an optional keyless Solana on-chain owner lookup. Pass the network (helium) and the hotspot's entity key or asset key. The response reports the subnetworks the hotspot participates in (IOT, MOBILE), a per-subnetwork obfuscated location (city, state, country and the H3 cell), elevation and antenna gain, the data credit onboarding fee, and the device type where present. On top of the raw fields it computes flags an agent can act on: whether a location is asserted, whether the hotspot spans multiple subnetworks, and a deployment completeness ratio. The owner wallet is resolved on-chain when available (partial on failure). An optional earnings trend is included when the Relay key is configured, otherwise it reports available false. Every value is cited with its source and the attribution list is always present. An unknown key returns found false rather than an error; bad input returns 400; upstream failure returns 502. These are network intelligence indicators, not investment advice. - Query params: `{"network": "helium", "key": "3t47wfGTY1Wq9MWWFkyFAQwVi2W2NaZbWWu9LGBf26Hj"}` - Example response: `{"network": "helium", "found": true, "name": "Long Orchid Skunk", "subnetworks": ["iot", "mobile"], "by_subnetwork": {"iot": {"location": {"city": "Seattle", "country": "United States", "h3": "8c28d55042403ff"}, "gain": 12}}, "flags": {"has_asserted_location": true, "multi_network": true, "deployment_completeness": 1.0}, "owner_wallet": {"available": true, "value": "6mgp..."}, "attribution": ["Source: Helium Entity API (entities.nft.helium.io)"]}` - Tags: depin, helium, hotspot, gateway, wireless, iot, mobile, network-intelligence, coverage ### `GET /depin/wallet` — $0.01 A one-call portfolio view for a Helium operator or investor wallet, from the official keyless Helium Entity API. Pass the network (helium) and a Solana wallet pubkey. The response returns the number of hotspots the wallet holds, a breakdown of how many are on the IOT subnetwork, the MOBILE subnetwork or both, the geographic spread across countries, states and cities, and the wallet's token balances for HNT, IOT, MOBILE and DC normalized by their on-chain decimals. It also computes portfolio signals: subnetwork diversity, country and state spread, the top country and a geographic concentration ratio. For very large operators the hotspot list is sampled and a truncated flag is set. Every value is cited to the Entity API with attribution. A wallet with nothing returns found false; a malformed pubkey returns 400; upstream failure returns 502. These are network intelligence indicators, not investment advice. - Query params: `{"network": "helium", "wallet": "6mgpuHRMKUcnvcSy2K7GkbnQNdi75a7GLGyj8YLc95jT"}` - Example response: `{"network": "helium", "found": true, "hotspots_count": 2, "subnetwork_breakdown": {"iot": 2, "mobile": 0, "both": 0}, "geo_spread": {"countries": 1, "states": 2, "cities": 2}, "token_balances": {"HNT": {"amount": 12.5, "decimals": 8}}, "signals": {"subnetwork_diversity": 1, "country_spread": 1}, "attribution": ["Source: Helium Entity API (entities.nft.helium.io)"]}` - Tags: depin, helium, wallet, portfolio, operator, investor, iot, mobile, tokens, network-intelligence ### `GET /depin/network` — $0.02 A one-call network health and token-economics verdict for a DePIN network, fused from the official keyless Helium Entity API and keyless Solana on-chain reads. Pass the network (helium). The response reports coverage size as the IOT and MOBILE node counts from the Entity API pagination metadata, and the token economics as the on-chain circulating supply for HNT, IOT, MOBILE and DC read with getTokenSupply, each with its mint, role and decimals. It adds the network's emission and halving context (HNT max supply, the two-year halving cadence and the burn-and-mint relationship to DC) as descriptive context, and a coarse coverage-scale indicator derived from the total node count. Every facet degrades independently: a source that fails is marked unavailable rather than failing the whole call. Every value is cited and the attribution list covers both sources. These are network intelligence indicators, not investment advice. - Query params: `{"network": "helium"}` - Example response: `{"network": "helium", "label": "Helium", "coverage": {"iot": {"hotspots": 1035517}, "mobile": {"hotspots": 56681}}, "token_economics": {"HNT": {"supply": 181941344.8, "role": "network", "available": true}}, "decentralization": {"coverage_scale": "very_large", "total_hotspots": 1092198}, "attribution": ["Source: Helium Entity API (entities.nft.helium.io)", "Source: Solana on-chain via public JSON-RPC"]}` - Tags: depin, helium, network, tokenomics, supply, coverage, health, hnt, network-intelligence ### `GET /depin/coverage` — $0.015 Coverage density and a deployment-opportunity signal for a geography on a DePIN network. Pass the network (helium) and a geo string (a city, state or country, or an H3 cell). Because the Entity API does not cheaply aggregate hotspots by geography, this route is implemented as an optional keyed enrichment over the Relay Wireless API (a free Community-plan signup). Without the Relay key configured the route returns available false with an explanatory note, and the keyless core routes (network, hotspot, wallet) remain fully functional. With the key configured it returns the coverage density and a saturation or opportunity signal for the geography, cited to Relay. Bad input returns 400. These are network intelligence indicators, not investment advice. - Query params: `{"network": "helium", "geo": "Austin, Texas"}` - Example response: `{"network": "helium", "geo": "Austin, Texas", "available": true, "h3_cell": "85489fabfffffff", "h3_resolution": 5, "area_km2": 252.9, "total_hotspots": 412, "density_per_km2": 1.63, "rating": "dense", "opportunity": "low", "attribution": ["Geocoding © OpenStreetMap contributors (nominatim.openstreetmap.org)", "Source: Relay Wireless (relaywireless.com)"]}` - Tags: depin, helium, coverage, density, geo, deployment, opportunity, network-intelligence ### `GET /depin/rewards` — $0.02 Reward economics, earnings trend and anomaly indicators for a DePIN entity or subnetwork. Pass the network (helium) with an entity key for a single hotspot or a subnetwork (iot or mobile) for the aggregate. Earnings history is not exposed by the keyless Entity API, so this route is an optional keyed enrichment over the Relay Wireless API (a free Community-plan signup). Without the Relay key configured the route returns available false with an explanatory note, and the keyless core routes remain fully functional. With the key configured it returns the earnings trend and reward-economics indicators, cited to Relay. Bad input returns 400. These are network intelligence indicators, not investment advice. - Query params: `{"network": "helium", "subnetwork": "mobile"}` - Example response: `{"network": "helium", "subnetwork": "mobile", "available": true, "window": {"from": "2026-07-07T00:00:00Z", "to": "2026-07-14T00:00:00Z", "days": 7}, "total_reward_records": 28006, "sampled_records": 100, "by_reward_type": {"service_provider_reward": {"count": 7, "total_amount": 315000000000}}, "attribution": ["Source: Relay Wireless (relaywireless.com)"]}` - Tags: depin, helium, rewards, earnings, economics, trend, iot, mobile, network-intelligence ### `GET /farcaster/profile` — $0.005 The headline route: a single paid call that fuses the whole public Farcaster identity of one account. Supply exactly one of fid or username (resolved via the keyless fname registry). Returns the protocol profile fields, the in-profile primary Ethereum address, the full list of verified on-chain wallets (Ethereum and Solana), the on-chain custody address, following and follower and cast counts, and the account age derived from the on-chain registration event. Large accounts return follower and cast counts as a FLOOR with a capped flag (hub pagination is unbounded, so we count up to a page cap). The value is the FUSION, not a raw resell: one call replaces separate userData, verifications, registration, links and casts reads. Partial answers are returned when a facet is down (never a 500); an unknown fid or username returns found=false. Public protocol data only. - Query params: `{"username": "dwr"}` - Example response: `{"found": true, "fid": 3, "username": "dwr", "profile": {"display_name": "Dan Romero", "bio": "Working on Farcaster", "primary_eth_address": "0x6Ce0...fe"}, "custody_address": "0x6b0bda3f2ffed5efc83fa8c024acff1dd45793f1", "primary_eth_address": "0x6Ce0...fe", "verified_addresses": [{"address": "0x91031...", "protocol": "ethereum"}], "counts": {"following": {"count": 1200, "capped": false}, "followers_floor": {"count": 5000, "capped": true}, "casts_floor": {"count": 5000, "capped": true}}, "account_age_days": 1400, "attribution": ["Farcaster protocol (open-source, MIT) — public social graph"]}` - Tags: farcaster, profile, social, fid, wallet, identity, web3, base, crypto, social-graph, reputation, onchain ### `GET /farcaster/verifications` — $0.003 The wallet-discovery route: map one Farcaster identity to the set of on-chain addresses its owner has cryptographically verified control of. Supply one of fid or username; the route returns each verified address with its chain (Ethereum or Solana), the in-profile declared primary Ethereum address, and the count. Every address is a signed verification message from the Farcaster protocol, not a guess. Useful for attaching a social identity and reputation to a wallet, or fanning a FID out to the wallets to watch. Partial on facet failure (never a 500); an unknown identity returns found=false. Public protocol data only. - Query params: `{"fid": 3}` - Example response: `{"found": true, "fid": 3, "primary_eth_address": "0x6Ce0...fe", "verified_addresses": [{"address": "0x91031dcfdea024b4d51e775486111d2b2a715871", "protocol": "ethereum"}, {"address": "ExAqci8uUVKtqHqFW58fmwgMMY9PATfRGGyv6837j9Lx", "protocol": "solana"}], "count": 2, "provenance": "Farcaster verificationsByFid (signed on-chain address proofs)", "attribution": ["Farcaster protocol (open-source, MIT) — public social graph"]}` - Tags: farcaster, verifications, wallet, fid, identity, ethereum, solana, web3, crypto, provenance, address ### `GET /farcaster/resolve` — $0.005 The two-way bridge between a wallet and a Farcaster identity. Reverse direction: give an Ethereum address and the route maps a custody address to its FID with no key required; reversing a merely verified address to a FID is gated behind an optional runtime enrichment and honestly reports available=false when it is not configured. Forward direction: give a fid or username and get the canonical identity block (fid, username, display name, custody address and the list of verified wallets). This is the identity reconciliation a crypto agent needs to answer who is behind this address or what wallets does this account control. Partial on facet failure (never a 500); no match returns found=false. Public protocol data only. - Query params: `{"address": "0x6b0bda3f2ffed5efc83fa8c024acff1dd45793f1"}` - Example response: `{"found": true, "fid": 3, "username": "dwr", "custody_address": "0x6b0bda3f2ffed5efc83fa8c024acff1dd45793f1", "verified_addresses": [{"address": "0x91031...", "protocol": "ethereum"}], "query": {"type": "address", "value": "0x6b0bda3f2ffed5efc83fa8c024acff1dd45793f1"}, "match": "custody", "attribution": ["Farcaster protocol (open-source, MIT) — public social graph"]}` - Tags: farcaster, resolve, identity, wallet, fid, address, reverse, web3, crypto, reconciliation, custody, base ### `GET /farcaster/reputation` — $0.008 A verdict route, not a raw read: it computes a deterministic zero-to-one-hundred social-reputation score for a Farcaster identity supplied as a fid, username or Ethereum address (an address is first mapped to its FID). The score is additive over transparent, data-driven signals — a claimed username, a display name, a bio and picture, at least one verified on-chain wallet, a declared primary address, account tenure from the on-chain registration event, a follower floor and cast activity — and returns the numeric score, a band, every fired reason and the per-dimension breakdown so the caller can audit it. Built for anti-sybil, airdrop-eligibility and wallet-provenance checks by crypto agents on Base. These are reputation indicators derived from public data, NOT a guarantee of trustworthiness. Partial on facet failure (never a 500); an unresolvable input returns found=false. Public protocol data only. - Query params: `{"username": "dwr"}` - Example response: `{"found": true, "fid": 3, "username": "dwr", "resolved_via": "username", "reputation": {"score": 96, "band": "high", "reasons": ["Has a registered Farcaster username (fname/ENS) — a claimed, human-readable identity.", "At least 1000 followers (broad reach)."], "disclaimer": "Reputation indicators derived from public Farcaster protocol data, NOT a guarantee."}, "attribution": ["Farcaster protocol (open-source, MIT) — public social graph"]}` - Tags: farcaster, reputation, score, anti-sybil, identity, fid, wallet, web3, crypto, trust, provenance, base ### `GET /farcaster/graph` — $0.01 A social-graph slice for network and reputation analysis. Supply one of fid or username and the route returns the accounts this FID follows (with a count and a sample of target FIDs), the followers as a floor (with a count and a sample), and a sample of mutual connections computed from the intersection. Because hub pagination is unbounded, following, follower and mutual figures are counted up to a page cap and flagged capped when the true number is larger — an honest floor, never a fabricated total. Useful for clustering, sybil-ring detection and influence mapping over the open Farcaster graph. Partial on facet failure (never a 500); an unknown identity returns found=false. Public protocol data only. - Query params: `{"username": "dwr"}` - Example response: `{"found": true, "fid": 3, "following": {"count": 1200, "capped": false, "sample": [2, 2635, 5650]}, "followers_floor": {"count": 5000, "capped": true, "sample": [1, 2, 4]}, "mutual_sample": {"count": 300, "sample": [2, 5650]}, "attribution": ["Farcaster protocol (open-source, MIT) — public social graph"]}` - Tags: farcaster, graph, social-graph, following, followers, fid, network, web3, crypto, mutuals, reputation, base ### `GET /sports/scores` — $0.005 Live and recently-finished scores for a whole league in one call, normalized to a single cited schema across sources. Supply a league key — mlb, nhl, nfl, nba or the English Premier League (epl) — and optionally an ISO date to pull a specific day's card; omit the date for live and current games. Each game is returned with both teams (display name, abbreviation and score), a normalized state (pre, in or post), the human status, the current period or inning, the venue and the scheduled start time. Official league APIs are the authority for their own league (MLB Stats API for baseball, the NHL Web API for hockey) with the broad ESPN public endpoints covering every league, and a commercial-clean TheSportsDB tier as the anchor when a key is configured. Every record carries the source that supplied it, and the response carries per-source attribution plus a facts-only, not-affiliated disclaimer. This is sports FACTS only — scores and game state — never editorial recaps, artwork or betting odds. If a source is down the response is marked partial rather than failing. - Query params: `{"league": "mlb"}` - Example response: `{"league": "mlb", "league_name": "MLB", "date": null, "count": 1, "scores": [{"game_id": "776543", "start_ts": "2025-10-01T23:05:00Z", "state": "post", "status": "Final", "period": 9, "home": {"name": "Pittsburgh Pirates", "abbr": "PIT", "score": 7}, "away": {"name": "Cincinnati Reds", "abbr": "CIN", "score": 3}, "source": "mlb"}], "provenance": {"scores": "mlb"}, "sources": {"used": ["mlb"], "partial": false, "errors": []}, "attribution": ["Data via MLB Stats API (statsapi.mlb.com)"], "disclaimer": "Sports facts; not affiliated with any league. No odds."}` - Tags: sports, scores, live, mlb, nhl, nfl, nba, soccer, results, facts, scoreboard ### `GET /sports/schedule` — $0.004 The fixture list and game schedule for a league, normalized to a single cited schema. Supply a league key — mlb, nhl, nfl, nba or the English Premier League (epl) — and optionally an ISO date; omit the date for the current or upcoming card. Each scheduled game returns both teams, the scheduled start time, the venue and the state. Official league APIs are the authority for their own league, ESPN covers the rest, and a commercial-clean TheSportsDB tier anchors when a key is set. Use it to plan around the sports calendar — when a team next plays, what the day's slate looks like — then call /sports/scores for live results or /sports/game for a deep single-game view. Every record carries its source; the response carries per-source attribution and a facts-only, not-affiliated disclaimer. Facts only, no odds; a down source degrades to partial rather than a failure. - Query params: `{"league": "nhl", "date": "2025-10-08"}` - Example response: `{"league": "nhl", "league_name": "NHL", "date": "2025-10-08", "count": 1, "schedule": [{"game_id": "2025020001", "start_ts": "2025-10-08T23:00:00Z", "state": "pre", "status": "Scheduled", "home": {"name": "Chicago Blackhawks", "abbr": "CHI", "score": null}, "away": {"name": "Florida Panthers", "abbr": "FLA", "score": null}, "source": "nhl"}], "provenance": {"schedule": "nhl"}, "sources": {"used": ["nhl"], "partial": false, "errors": []}, "attribution": ["Data via NHL Web API (nhle.com)"], "disclaimer": "Sports facts; not affiliated with any league. No odds."}` - Tags: sports, schedule, fixtures, calendar, mlb, nhl, nfl, nba, soccer, upcoming ### `GET /sports/standings` — $0.005 The current league table for a whole league in one call, normalized to a single cited schema. Supply a league key — mlb, nhl, nfl, nba or the English Premier League (epl) — and optionally a season label (for example 2025 for baseball or 2024-2025 for hockey and soccer); the current season is the default. Each team row returns its rank within its division or conference group, games played, wins, losses, overtime losses or ties where the sport has them, win percentage or points, games behind the leader, and current streak. Official league APIs are the authority for their own league (MLB Stats API, the NHL Web API), the broad ESPN public endpoints cover every league, and a commercial-clean TheSportsDB tier anchors when a key is set. Every row carries the source that supplied it, and the response carries per-source attribution plus a facts-only, not-affiliated disclaimer. Standings are non-copyrightable facts; a rate-limited source degrades to partial, never a failure. - Query params: `{"league": "mlb"}` - Example response: `{"league": "mlb", "league_name": "MLB", "season": "2025", "count": 1, "standings": [{"rank": 1, "team": "Toronto Blue Jays", "group": "AL East", "games_played": 162, "wins": 94, "losses": 68, "pct": ".580", "games_back": "-", "streak": "W4", "source": "mlb"}], "provenance": {"standings": "mlb"}, "sources": {"used": ["mlb"], "partial": false, "errors": []}, "attribution": ["Data via MLB Stats API (statsapi.mlb.com)"], "disclaimer": "Sports facts; not affiliated with any league. No odds."}` - Tags: sports, standings, table, league-table, mlb, nhl, nfl, nba, soccer, wins, losses, streak ### `GET /sports/game` — $0.01 The deepest per-game view this service offers: give a league key and a game_id (the id returned by /sports/scores or /sports/schedule) and get one game's full factual state in a single cited JSON. Depending on the sport and source you get the normalized state and status, the current period, inning or clock, both teams with their score, team-level box-score numbers (runs, hits, shots on goal and the like), the statistical leaders as player-plus-number facts, and any reported injuries or scratches. The league's official API (MLB Stats API boxscore and linescore, the NHL gamecenter boxscore) is preferred for its own league, with ESPN's game summary covering every league. This is facts only — numbers and status — and deliberately strips ESPN's odds, pick-center and editorial blocks: no betting lines, no recaps. The response tags the source, includes attribution and a not-affiliated disclaimer, and reports found:false rather than failing when the id is unknown. - Query params: `{"league": "nhl", "game_id": "2025020001"}` - Example response: `{"found": true, "league": "nhl", "game_id": "2025020001", "game": {"state": "post", "status": "OFF", "period": 3, "home": {"name": "Vegas Golden Knights", "abbr": "VGK", "score": 0, "sog": 22}, "away": {"name": "Carolina Hurricanes", "abbr": "CAR", "score": 3, "sog": 23}, "source": "nhl"}, "provenance": {"game": "nhl"}, "sources": {"used": ["nhl"], "partial": false, "errors": []}, "attribution": ["Data via NHL Web API (nhle.com)"], "disclaimer": "Sports facts; not affiliated with any league. No odds."}` - Tags: sports, game, box-score, play-by-play, leaders, injuries, mlb, nhl, nfl, nba, soccer ### `GET /sports/team` — $0.005 A factual profile of one team, normalized to a single cited JSON. Supply a league key — mlb, nhl, nfl, nba or the English Premier League (epl) — and a team name or abbreviation, and get the team's canonical name and short code, the sport, its home venue, country, year founded, its current win-loss record where the source exposes it, and recent form where available. Official league APIs are preferred for their own league, with ESPN and a commercial-clean TheSportsDB tier filling in profile detail such as venue and founding year. The result carries the source that supplied it, per-source attribution and a facts-only, not-affiliated disclaimer. Team metadata and record only — no logos, artwork or editorial. If the team can't be resolved the response reports found:false rather than failing, and a down source degrades to partial. - Query params: `{"league": "epl", "team": "Arsenal"}` - Example response: `{"found": true, "league": "epl", "query": "Arsenal", "team": {"team": "Arsenal", "abbr": "ARS", "league": "epl", "sport": "soccer", "venue": "Emirates Stadium", "country": "England", "founded": 1892, "record": null, "source": "thesportsdb"}, "provenance": {"team": "thesportsdb"}, "sources": {"used": ["thesportsdb"], "partial": false, "errors": []}, "attribution": ["Data via TheSportsDB (thesportsdb.com)"], "disclaimer": "Sports facts; not affiliated with any league. No odds."}` - Tags: sports, team, profile, roster, record, venue, mlb, nhl, nfl, nba, soccer ### `GET /fec/contributions` — $0.02 Normalized federal campaign contributions for compliance, PEP-exposure, ESG and opposition-research due-diligence. Query by contributor name, recipient committee id or candidate id, and narrow with an employer, an even-year cycle or a minimum amount. The route pulls the FEC Schedule A itemized receipts and returns a compact cited JSON: contributor name, employer, occupation, city and state, the amount and date, and the recipient committee and candidate, with each record citing its FEC transaction id and filing image so an agent can trace it back to the primary source. A summary totals the amount and ranks the top recipients. Data is primary US public-domain disclosure from the FEC; it is provided for informational due-diligence only and never as a marketing donor list or for soliciting contributions. - Query params: `{"contributor_name": "smith", "min_amount": 200, "limit": 20}` - Example response: `{"found": true, "total_matched": 42, "returned": 1, "summary": {"total_amount": 500.0, "record_count": 1, "top_recipients": []}, "contributions": [{"contributor_name": "SMITH, JANE", "employer": "ACME CORP", "occupation": "ENGINEER", "city": "AUSTIN", "state": "TX", "amount": 500.0, "date": "2024-03-15", "recipient": {"committee_id": "C00401224", "committee_name": "EXAMPLE PAC", "candidate_id": null, "candidate_name": null}, "citation": {"transaction_id": "SA11AI.123", "pdf_url": "https://docquery.fec.gov/cgi-bin/fecimg/?2024..."}}], "attribution": ["FEC / OpenFEC (api.open.fec.gov), US public domain"], "disclaimer": "Public government disclosure data (FEC/LDA). For due-diligence/compliance/research — NOT for soliciting contributions or commercial solicitation of donors (52 U.S.C. §30111(a)(4)); informational only, not legal or investment advice."}` - Tags: fec, campaign-finance, contributions, schedule-a, donor, money-in-politics, compliance, due-diligence, pep, opposition-research ### `GET /fec/committee` — $0.02 A one-call fused profile of a federal political committee. Supply the FEC committee id, or a name query to resolve the best match, and the route returns the committee type, designation, party and home state, its per-cycle financial totals (receipts, disbursements, cash on hand and reported independent expenditures), and a computed summary of the independent expenditures the committee itself made, split into amounts supporting versus opposing candidates. This fuses the committees, committee totals and Schedule E endpoints so an agent gets the whole picture in one response. Data is primary US public-domain disclosure from the FEC, provided for research and compliance due-diligence and not for soliciting contributions. - Query params: `{"q": "actblue"}` - Example response: `{"found": true, "committee": {"committee_id": "C00401224", "name": "EXAMPLE PAC", "committee_type": "Hybrid PAC", "party": null, "state": "DC"}, "totals": [{"cycle": 2024, "receipts": 1000000.0, "disbursements": 900000.0, "cash_on_hand": 100000.0, "independent_expenditures": 250000.0}], "independent_expenditures": {"total_amount": 250000.0, "record_count": 12, "support": 200000.0, "oppose": 50000.0, "partial": false}, "attribution": ["FEC / OpenFEC (api.open.fec.gov), US public domain"], "disclaimer": "Public government disclosure data (FEC/LDA). For due-diligence/compliance/research — NOT for soliciting contributions or commercial solicitation of donors (52 U.S.C. §30111(a)(4)); informational only, not legal or investment advice."}` - Tags: fec, committee, pac, super-pac, independent-expenditures, campaign-finance, money-in-politics, totals, due-diligence ### `GET /lobbying/filings` — $0.02 Normalized federal lobbying disclosure for policy monitoring, compliance and due-diligence. Query by lobbying client, registrant firm, individual lobbyist or issue, and optionally a filing year and period. The route reads the Senate Lobbying Disclosure Act API, which is a unified structured superset covering both the House and the Senate, and returns a compact cited JSON for each filing: the registrant firm and client, the reported income or expenses, the issue areas and government entities lobbied, and the named lobbyists, each citing its filing document url and uuid. Data is public LDA disclosure, provided for informational due-diligence and not for donor solicitation. - Query params: `{"client_name": "google", "filing_year": 2024, "limit": 10}` - Example response: `{"found": true, "total_matched": 128, "returned": 1, "filings": [{"filing_uuid": "6bd1-...", "filing_type": "Quarterly Report", "filing_year": 2024, "filing_period": "First Quarter", "income": null, "expenses": 30000.0, "registrant": {"name": "EXAMPLE GR LLC"}, "client": {"name": "GOOGLE CLIENT SERVICES LLC"}, "issues": ["CPT"], "lobbyists": ["MATTHEW GERSON"], "citation": {"filing_uuid": "6bd1-...", "filing_document_url": "https://lda.senate.gov/filings/..."}}], "attribution": ["US Senate LDA (lda.senate.gov), public disclosure"], "disclaimer": "Public government disclosure data (FEC/LDA). For due-diligence/compliance/research — NOT for soliciting contributions or commercial solicitation of donors (52 U.S.C. §30111(a)(4)); informational only, not legal or investment advice."}` - Tags: lobbying, lda, senate, disclosure, registrant, client, money-in-politics, policy, compliance, due-diligence ### `GET /lobbying/spend` — $0.03 A single cited profile of how much an organization spends on federal lobbying and on what. Supply the company or organization name and the route pulls its Senate LDA filings and aggregates them into the total reported spend, a year-by-year breakdown with a simple rising, falling or flat trend, the top issue areas by number of filings, and the registrant firms it retained, plus a few recent cited filings for traceability. Optionally set the political contributions flag to also fold in a bounded summary of the LD-203 political contribution reports filed by the top registrant firms. This replaces manual assembly across many filings with one response. Data is public LDA disclosure, provided for informational due-diligence and not for donor solicitation. - Query params: `{"client_name": "google"}` - Example response: `{"found": true, "client_name": "google", "spend": {"total_reported_spend": 12000000.0, "spend_by_year": [{"year": 2023, "amount": 6000000.0}, {"year": 2024, "amount": 6000000.0}], "trend": "flat", "top_issues": [{"issue_code": "CPT", "filings": 8}], "registrants": [{"name": "EXAMPLE GR LLC", "filings": 8}], "filing_count": 20, "total_matched": 20}, "recent_filings": [], "attribution": ["US Senate LDA (lda.senate.gov), public disclosure"], "disclaimer": "Public government disclosure data (FEC/LDA). For due-diligence/compliance/research — NOT for soliciting contributions or commercial solicitation of donors (52 U.S.C. §30111(a)(4)); informational only, not legal or investment advice."}` - Tags: lobbying, lda, spend, company, trend, issues, registrants, money-in-politics, compliance, esg, due-diligence ### `GET /politics/profile` — $0.04 The premium cross-domain view: a single money-in-politics footprint for one organization or person. Supply a name and the route fuses two primary disclosure domains: the entity's federal campaign contributions as a donor from FEC Schedule A (total given, record count and top recipients, with recent cited records) and its federal lobbying spend as a client from the Senate LDA system (total reported spend, year trend, top issues and registrant firms). A footprint block summarizes both domains side by side so an agent can gauge an entity's overall political-money exposure in one call. Each domain is collected independently and a failing or rate-limited source is reported without failing the whole response. This is the substantive due-diligence value the individual routes feed into. Data is primary US public-domain and public disclosure, for informational due-diligence and never for soliciting contributions. - Query params: `{"name": "acme corporation"}` - Example response: `{"found": true, "entity": {"name": "acme corporation"}, "footprint": {"fec_contributions_total": 250000.0, "fec_contribution_records": 40, "lobbying_spend_total": 3000000.0, "lobbying_filings": 12, "domains_present": ["campaign_finance", "lobbying"]}, "campaign_finance": {"available": true, "as": "donor (FEC Schedule A)", "total_matched": 40, "summary": {}, "recent": []}, "lobbying": {"available": true, "as": "client (LDA lobbying)", "spend": {}}, "attribution": ["FEC / OpenFEC (api.open.fec.gov), US public domain", "US Senate LDA (lda.senate.gov), public disclosure"], "disclaimer": "Public government disclosure data (FEC/LDA). For due-diligence/compliance/research — NOT for soliciting contributions or commercial solicitation of donors (52 U.S.C. §30111(a)(4)); informational only, not legal or investment advice."}` - Tags: money-in-politics, profile, fec, lda, cross-domain, footprint, due-diligence, compliance, pep, esg, opposition-research ### `GET /bank/verify` — $0.008 One-call bank-account / IBAN verification for fraud, KYC/AML, payout and supplier-onboarding loops, computed ENTIRELY OFFLINE from schwifty (MIT) — no paid bank/HLR-style API is resold. Given an IBAN (spaces optional, any case) plus an optional expected_country (ISO-3166 alpha-2), it returns: structural validity (ISO 13616 mod-97 checksum + the country's BBAN structure/length, 127 countries), the parsed country (name/alpha-2/alpha-3/numeric) and format spec, the resolved BIC, bank name, branch and bank code (open bank-registry coverage for roughly 45 countries — all SEPA plus UA/CH/NO/DK and more), the SEPA-zone flag, and a DETERMINISTIC risk_score (0-100) with a low/medium/high band and human-readable reasons. The score fuses independent, data-driven signals: a high-risk (FATF / sanctioned) jurisdiction, an expected-country mismatch, a known EMI / virtual-IBAN issuer (Wise, Revolut, Monzo and similar — a KYC signal, not fraud), a bank that does not resolve, and a non-SEPA country. The fired signals and weights are returned so a caller can re-rank with its own policy, and when the in-process sanctions index is warm the resolved bank name is fuzzy-checked and surfaced as an ADVISORY potential match only. IMPORTANT: these are risk INDICATORS from offline open-registry metadata, NOT a definitive fraud verdict and NOT legal/KYC advice; the result does NOT prove the account exists or belongs to any person or company (no Confirmation-of-Payee / account-holder name matching), and the input IBAN is never stored or logged. Invalid input returns a 4xx, never a 500. - Query params: `{"iban": "DE89370400440532013000", "expected_country": "DE"}` - Example response: `{"valid": true, "iban": "DE89370400440532013000", "error_type": null, "country": {"name": "Germany", "alpha_2": "DE", "alpha_3": "DEU", "numeric": "276"}, "format_spec": {"bban_spec": "8!n10!n", "bban_length": 18, "iban_length": 22}, "bic": "COBADEFFXXX", "bank_name": "Commerzbank", "branch_code": null, "bank_code": "37040044", "in_sepa_zone": true, "expected_country": "DE", "risk_score": 0, "risk_band": "low", "reasons": [], "signals": [], "high_risk_jurisdiction": null, "virtual_iban_issuer": null, "bank_sanctions_advisory": null, "disclaimer": "Offline IBAN verification indicators, not advice."}` - Tags: bank, iban, bank-account, verify, validation, bic, swift, sepa, fraud, kyc, aml, payments, risk ### `GET /bank/validate` — $0.003 Cheap structural-only IBAN validation, computed OFFLINE from schwifty (MIT) — the low-cost first step before the fuller /bank/verify fusion route (the same pattern as /kyb/screen before /kyb/verify). It confirms the ISO 13616 mod-97 checksum and the per-country BBAN structure and length across 127 countries, returning valid true/false and, on a rejection, a machine-readable error_type (one of invalid_checksum, invalid_length, invalid_structure, invalid_country) together with the parsed country and the expected format spec so a caller can explain the failure. A structurally-parseable but invalid IBAN is a normal 200 result (valid false), not an error; only a missing or over-long input is a 4xx. It does NOT resolve the bank or score risk (use /bank/verify for that), does NOT prove the account exists, and the input IBAN is never stored or logged. - Query params: `{"iban": "DE89370400440532013000"}` - Example response: `{"valid": false, "iban": "DE89370400440532013001", "error_type": "invalid_checksum", "country": {"name": "Germany", "alpha_2": "DE", "alpha_3": "DEU", "numeric": "276"}, "format_spec": {"bban_spec": "8!n10!n", "bban_length": 18, "iban_length": 22}, "disclaimer": "Offline IBAN validation, not advice."}` - Tags: bank, iban, validate, checksum, structure, format, sepa, payments ### `GET /bank/bic` — $0.005 Reverse BIC / SWIFT lookup, computed OFFLINE from schwifty's bundled BIC registry (MIT). Given an 8- or 11-character BIC it returns whether the code is structurally valid, the resolved bank name(s), the country (name/alpha-2/alpha-3/numeric) and any domestic bank codes mapped to that institution — the complement of the IBAN-to-BIC resolution in /bank/verify, at zero additional data cost. A malformed BIC returns a 200 result with valid false and an error_type rather than an error; only a missing or over-long input is a 4xx. This is open-registry metadata only; it does NOT confirm any account and is not legal/KYC advice. - Query params: `{"bic": "COBADEFFXXX"}` - Example response: `{"valid": true, "bic": "REVOGB21", "error_type": null, "bank_names": ["REVOLUT LTD"], "country": {"name": "United Kingdom", "alpha_2": "GB", "alpha_3": "GBR", "numeric": "826"}, "domestic_bank_codes": ["REVO"], "disclaimer": "Offline BIC lookup, not advice."}` - Tags: bank, bic, swift, lookup, bank-name, reverse, payments, kyc ### `GET /treasury/auctions` — $0.02 Primary-market debt-issuance intelligence direct from TreasuryDirect. For a chosen security type (Bill, Note, Bond, TIPS, FRN or CMB) it returns the recent auction results over a lookback window, normalized to a compact cited record per auction: CUSIP, security term, auction and issue dates, offering and total accepted amounts, bid-to-cover ratio, high yield or high discount rate, and the competitive, indirect, direct, primary-dealer and SOMA accepted amounts. On top of the raw list it computes signals a bundler does not: the latest and average bid-to-cover, a bid-to-cover trend series across the recent auctions of that type, and the average indirect-bidder share as a demand gauge. Set upcoming to also attach the forward auction calendar (announced and scheduled auctions of that type). Filter to one tenor with the optional term. Every value is public-domain U.S. Government data with attribution echoed in the response. An unknown type returns 400, an upstream failure 502, never a 500. - Query params: `{"type": "Note", "days": 90, "upcoming": true}` - Example response: `{"type": "Note", "count": 1, "auctions": [{"cusip": "91282CKK6", "security_term": "10-Year", "auction_date": "2026-07-09", "bid_to_cover": 2.61, "indirect_accepted": 30125000000.0, "total_accepted": 39000000000.0, "high_yield": 4.362, "source": "treasurydirect"}], "signals": {"latest_bid_to_cover": 2.61, "avg_bid_to_cover": 2.55, "avg_indirect_share": 0.77}, "attribution": ["Source: U.S. Department of the Treasury, TreasuryDirect (public domain)"]}` - Tags: treasury, auctions, debt-issuance, bills, notes, bonds, tips, bid-to-cover, treasurydirect, fixed-income, us-government ### `GET /treasury/debt` — $0.01 The authoritative federal debt series straight from Treasury Fiscal Data (Debt to the Penny), not a re-bundled aggregate. It returns the latest total public debt outstanding split into the two components that matter for supply analysis: debt held by the public and intragovernmental holdings. Over the requested window it returns the full daily history and computes the net change in total debt across the window as a proxy for net issuance, plus the public versus intragovernmental shares of the total. It also fuses in the latest interest expense on the public debt, summed across security types with a per-security breakdown and both the current month and the fiscal-year-to-date figures. Every value carries its record date and source; the data is public-domain U.S. Government work. Choose the depth with days or its alias range. No data for the window returns 404, an upstream failure 502, never a 500. - Query params: `{"days": 30}` - Example response: `{"series": "debt_to_penny", "unit": "USD", "window_days": 30, "latest": {"record_date": "2026-07-09", "total_public_debt": 39414179016130.09, "debt_held_by_public": 31709399350223.4, "intragovernmental_holdings": 7704779665906.69}, "computed": {"net_issuance_over_window": 152340000000.0, "public_share": 0.8046, "intragovernmental_share": 0.1954, "to_date": "2026-07-09"}, "attribution": ["Source: U.S. Department of the Treasury, Fiscal Data (public domain)"]}` - Tags: treasury, national-debt, debt-to-the-penny, public-debt, interest-expense, fiscal, us-government, fiscaldata ### `GET /treasury/cash` — $0.01 The government's checking-account balance, a widely watched liquidity signal. From the Daily Treasury Statement operating cash table it returns the Treasury General Account closing balance for the latest reporting day, the full daily history over the window, and the computed day-over-day change flagged as a build or a drawdown. The balance is in millions of US dollars. Choose the depth with days or its alias range. Values are cited to Treasury Fiscal Data with the record date; the data is public-domain U.S. Government work. No data for the window returns 404, an upstream failure 502, never a 500. - Query params: `{"days": 30}` - Example response: `{"series": "operating_cash_balance", "account": "Treasury General Account (TGA)", "unit": "USD_millions", "window_days": 30, "latest": {"record_date": "2026-07-09", "balance": 744637.0}, "computed": {"daily_change": -4607.0, "direction": "drawdown"}, "attribution": ["Source: U.S. Department of the Treasury, Fiscal Data (public domain)"]}` - Tags: treasury, tga, operating-cash, daily-treasury-statement, liquidity, cash-balance, fiscal, us-government, fiscaldata ### `GET /treasury/statement` — $0.02 The federal budget scorecard from the Monthly Treasury Statement. It resolves the latest published month and returns receipts, outlays and the deficit or surplus for both the current month and the fiscal year to date, together with the same figures for the prior fiscal year so an agent can compare. On top it computes the change in the fiscal-year-to-date deficit versus the prior year in both dollars and percent, and, by fusing in interest expense on the public debt, the interest expense as a share of fiscal-year-to-date receipts. The deficit is reported as a positive number; a negative value is a surplus. Every value carries its record date and source; the data is public-domain U.S. Government work. No statement available returns 404, an upstream failure 502, never a 500. - Query params: `{}` - Example response: `{"statement": {"record_date": "2026-05-31", "fiscal_year": "2026", "month": "May", "current_month": {"receipts": 335512183227.42, "outlays": 628160645311.16, "deficit": 292648462083.74}, "fiscal_ytd": {"receipts": 3655648146756.66, "outlays": 4901851413143.59, "deficit": 1246203266386.93}}, "computed": {"deficit_yoy_change": -529165923431.42, "interest_pct_of_receipts_fytd": 0.219}, "attribution": ["Source: U.S. Department of the Treasury, Fiscal Data (public domain)"]}` - Tags: treasury, monthly-treasury-statement, receipts, outlays, deficit, budget, fiscal, us-government, fiscaldata ### `GET /treasury/rates` — $0.015 A rates snapshot fusing two Treasury sources. The Daily Treasury Par Yield Curve gives the latest par yields across the maturity spectrum from one month to thirty years, and the average interest rates on the outstanding debt give the effective coupon Treasury actually pays by security type. From the curve it computes the 2s10s spread (the ten-year minus the two-year par yield) and an inversion flag, a classic recession and term-premium signal. The par yield curve is served as a resilient partial grain: if its upstream host is unreachable the route still returns the average interest rates with yield_curve_available set to false rather than failing. Give a four-digit year to select the curve year; the default is the current year. Values are cited to Treasury with record dates; the data is public-domain U.S. Government work. An upstream failure of both sources returns 502, never a 500. - Query params: `{"year": 2026}` - Example response: `{"average_interest_rates": {"record_date": "2026-06-30", "unit": "percent", "rates": [{"security_type": "Marketable", "security": "Treasury Bills", "avg_interest_rate": 3.706}]}, "yield_curve_available": true, "par_yield_curve": {"date": "2026-07-09", "unit": "percent", "points": {"2y": 3.73, "10y": 4.21, "30y": 4.79}}, "computed": {"spread_2s10s": 0.48, "inverted_2s10s": false}, "attribution": ["Source: U.S. Department of the Treasury, Fiscal Data (public domain)"]}` - Tags: treasury, yield-curve, interest-rates, par-yield, 2s10s, inversion, average-interest-rate, fixed-income, us-government ### `GET /prediction/search` — $0.01 A cross-venue prediction-market search for research, forecasting and trading agents. Pass a topic or free-text `query` and get back a ranked list of markets normalized into one schema across Polymarket (real-money markets that index on-chain USDC positions on Polygon) and Manifold (play-money mana markets), with Metaculus forecasts added when a token is configured. Each market carries its venue, a reference implied probability and which outcome it refers to, the full outcome/price list, traded volume and liquidity, the close/resolve date, status, a link-back to the source, and — crucially — its money_type (real / play / forecast) so a play-money mana probability is never mistaken for a real-money bet. Results are ranked real-money-and-volume first. Optionally restrict to one `venue`. A venue that is down is reported under summary.errors and the rest still return (never a 500); a total upstream failure is a 502; an empty result is a 422. Every response carries per-source attribution and a not-financial-advice disclaimer. Data about markets only — no trading, no resolution oracle. - Query params: `{"query": "election", "limit": 10}` - Example response: `{"query": "election", "count": 1, "markets": [{"venue": "polymarket", "money_type": "real", "question": "Will X win the 2028 election?", "implied_prob": 0.41, "implied_outcome": "Yes", "volume": 1200000.0, "close_date": "2028-11-07T00:00:00Z", "status": "open", "link": "https://polymarket.com/event/x-2028"}], "summary": {"venues_ok": 2, "venues_failed": 0, "errors": []}, "disclaimer": "Prediction-market data, not financial advice."}` - Tags: prediction-markets, polymarket, manifold, forecasting, odds, probability, search, markets, sentiment, research ### `GET /prediction/event` — $0.02 The moat route: cross-venue consensus and divergence for one event. Give a free-text `query` (or a venue `market_id` + `venue` to seed the anchor) and the service fetches candidate markets from every configured venue, picks the best anchor market, and deterministically clusters the SAME event across the other venues using a rapidfuzz token-set-ratio over normalized question text plus resolve-date proximity (no LLM, fully reproducible). It returns each matched venue's implied probability with its match score, a single consensus probability weighted by money_type (real-money markets weigh more than play-money), a forecast-divergence signal (the spread and standard deviation of the probabilities) that is labelled honestly as disagreement between forecasts — NOT a tradeable arbitrage, since the venues differ in money type, liquidity and resolution — plus aggregated volume and liquidity. Partial on failure (a down venue is reported, never a 500); 502 only if every venue fails; 422 if nothing matches. Every market carries its money_type, and every response carries per-source attribution and a not-financial-advice disclaimer. - Query params: `{"query": "will X win the 2028 election"}` - Example response: `{"query": "will X win the 2028 election", "event": {"question": "Will X win the 2028 election?", "n_venues": 2, "consensus_probability": {"probability": 0.4331, "n_markets": 2}, "divergence": {"spread": 0.08, "stdev": 0.04, "note": "disagreement, not arbitrage"}, "aggregated_volume": 1260000.0, "per_venue": [{"venue": "polymarket", "money_type": "real", "implied_prob": 0.46, "match_score": 100.0}]}, "summary": {"venues_ok": 2, "matched_venues": 2, "errors": []}, "disclaimer": "Prediction-market data, not financial advice."}` - Tags: prediction-markets, consensus, forecast, divergence, polymarket, manifold, event, probability, fusion, signal ### `GET /prediction/market` — $0.01 Fetch the full detail of a single Polymarket market or event by any of its identifiers — a Gamma numeric market/event id, a 0x conditionId, a market-slug or an event-slug — with the id type auto-detected (or pinned via id_type). If the id resolves to a lone market you get one normalized market; if it resolves to an event you get the event with its markets folded in. Every market is normalized into the service's common schema: the outcome/price list, a reference implied probability and which outcome it refers to, traded volume and liquidity, close/resolve date, status, money_type (real — Polymarket indexes on-chain USDC positions on Polygon) and a link-back. Polymarket returns outcomes and outcomePrices as JSON-encoded strings; this route parses them for you. Unknown id across every lookup is a 422; upstream failure is a 502. Every response carries attribution and a not-financial-advice disclaimer. Data about markets only — no trading, no resolution oracle. - Query params: `{"id": "will-abiy-ahmed-be-the-next-prime-minister-of-ethiopia"}` - Example response: `{"query": "0xabc", "type": "market", "market": {"venue": "polymarket", "money_type": "real", "question": "Will Abiy Ahmed be the next PM of Ethiopia?", "implied_prob": 0.9565, "implied_outcome": "Yes", "volume": 102938.6, "status": "open", "link": "https://polymarket.com/event/…"}, "disclaimer": "Prediction-market data, not financial advice."}` - Tags: prediction-markets, polymarket, market-detail, odds, probability, conditionid, slug, event, outcomes, lookup ### `GET /prediction/trending` — $0.01 The hot list: top prediction events ranked by 24-hour traded volume, so an agent can discover what the market is actually trading RIGHT NOW without knowing an id up front. Each event is normalized into the service schema: title, 24h volume and all-time volume, liquidity, number of markets, a compact top-market summary (the highest-volume market's question, implied probability and outcome), close date, status, money_type (real — on-chain USDC on Polygon) and a link-back. Pass limit (default 15, cap 25) and optionally closed=true to include settled events. Sorted by 24h volume descending. Upstream failure is a 502. Every response carries attribution and a not-financial-advice disclaimer. Data about markets only — no trading. - Query params: `{"limit": 10}` - Example response: `{"count": 1, "order": "volume24hr", "events": [{"venue": "polymarket", "money_type": "real", "title": "Next Prime Minister of Ethiopia?", "volume24hr": 11816400.4, "volume": 201857308.2, "n_markets": 33, "top_market": {"question": "Will Abiy Ahmed …?", "implied_prob": 0.9565, "implied_outcome": "Yes"}, "status": "open", "link": "https://polymarket.com/event/…"}], "disclaimer": "Prediction-market data, not financial advice."}` - Tags: prediction-markets, polymarket, trending, hot, volume, 24h, events, odds, probability, discovery ### `GET /prediction/trades` — $0.015 The recent-trade feed for one Polymarket market, plus a derived order-flow summary — the value-add over a raw relay. Give a market as a 0x conditionId, a slug or a numeric id (a slug/id is resolved to its conditionId first; an event resolves to its highest-volume market). Each trade is normalized to a PSEUDONYMOUS on-chain fact — proxy wallet, side, size, price, timestamp, outcome, outcome index and transaction hash. The trader's name, pseudonym, bio and avatar are STRIPPED (privacy invariant): only the pseudonymous wallet and the trade facts remain. Alongside the feed you get a summary computed over the returned trades: trade count, buy and sell volume and counts, a size-weighted average price (vwap), the last price at the most recent timestamp, the price range and the time window — so you get buy/sell pressure at a glance without parsing the feed yourself. Optional min_size (minimum cash value) and side (BUY or SELL) filters, limit default 25 cap 100. Upstream failure is a 502. Every response carries attribution and a not-financial-advice disclaimer. Data about markets only — no trading. - Query params: `{"market": "0x16d89dc6276b2c65dbaa6644600b4e1984257dac7c98e2348ccf9ccc8ce46e67", "limit": 25}` - Example response: `{"market": "0x16d8…", "count": 1, "trades": [{"proxyWallet": "0xdfaad1…", "side": "BUY", "size": 2.0, "price": 0.967, "timestamp": 1784305333, "outcome": "Yes", "outcome_index": 0, "tx_hash": "0xd10a05…"}], "summary": {"n_trades": 1, "buy_volume": 2.0, "sell_volume": 0.0, "buy_count": 1, "sell_count": 0, "vwap": 0.967, "last_price": 0.967, "min_price": 0.967, "max_price": 0.967}, "disclaimer": "Prediction-market data, not financial advice."}` - Tags: prediction-markets, polymarket, trades, order-flow, vwap, buy-sell, activity, market, onchain, feed ### `GET /prediction/prices` — $0.015 The odds-history route: a market-implied probability time series for ONE outcome of a Polymarket market, plus a derived momentum summary — the value-add over a raw CLOB relay. Give a market by any identifier (a Gamma numeric id, a 0x conditionId, a market-slug or an event-slug; an event resolves to its highest-volume market) and pick the outcome by name (case-insensitive, e.g. Yes or No) or by integer index (default index 0, usually Yes). Choose the history window with interval (1h, 6h, 1d, 1w, 1m or max; default 1d) and optionally the resolution in minutes with fidelity (a sensible per-interval default is applied and the series is capped to the most recent points so the payload stays bounded — truncation is flagged). The response is a clean list of {t, p} points (unix seconds, implied probability) — never Polymarket's JSON-in-strings — with a summary that gives start and end price, absolute and percent change, min and max with their timestamps, the current price, the time window and a trend label (up/down/flat), so a forecasting agent gets momentum at a glance without parsing the series itself. Robust to short series (empty or one point never errors). Unknown id or outcome is a 422, a bad interval is a 400, upstream failure is a 502. Every response carries money_type=real, attribution and a not-financial-advice disclaimer. Data about markets only — no trading. - Query params: `{"id": "will-abiy-ahmed-be-the-next-prime-minister-of-ethiopia", "interval": "1w"}` - Example response: `{"id": "will-abiy-ahmed-…", "count": 2, "points": [{"t": 1783706403, "p": 0.91}, {"t": 1784310845, "p": 0.9565}], "summary": {"n_points": 2, "start_price": 0.91, "end_price": 0.9565, "change": 0.0465, "change_pct": 5.11, "min_price": 0.91, "max_price": 0.9565, "current_price": 0.9565, "trend": "up"}, "context": {"question": "Will Abiy Ahmed be the next PM of Ethiopia?", "outcome": "Yes", "outcome_index": 0, "interval": "1w"}, "money_type": "real", "disclaimer": "Prediction-market data, not financial advice."}` - Tags: prediction-markets, polymarket, price-history, odds-history, timeseries, momentum, probability, trend, forecasting, clob ### `GET /match/name` — $0.01 A one-call fuzzy matcher an agent runs to decide whether two records refer to the same entity — the core of CRM / lead / vendor list deduplication and master-data management. The differentiator is NORMALIZATION BEFORE MATCHING: a naive fuzzy ratio of Acme Inc against ACME Incorporated scores about 56 and falls below any threshold, but canonicalising the legal form and folding case first lifts a true match to about 100. The engine unicode-folds, lower-cases, strips punctuation, canonicalises multi-jurisdiction legal forms, drops business stop-words for companies, strips titles and generational suffixes and maps common nicknames for people, and folds USPS-style abbreviations for addresses, then fuses four similarity components: order-insensitive token overlap, prefix-weighted Jaro-Winkler, a phonetic-code agreement signal and a character edit ratio, each weighted per entity type. The response carries the composite score, the per-component scores, both normalized forms, the threshold and is_match, so a caller can re-rank with its own policy. All compute is over the caller's own strings — no network, no keys, no storage. Similarity indicators for linkage and dedup, NOT authoritative identity resolution and NOT libpostal-grade international address parsing. - Query params: `{"a": "Acme Inc", "b": "ACME Incorporated", "type": "company"}` - Example response: `{"object": "match_name", "type": "company", "a": {"input": "Acme Inc", "canonical": "acme"}, "b": {"input": "ACME Incorporated", "canonical": "acme"}, "score": 100.0, "components": {"token_set": 100.0, "jaro_winkler": 100.0, "phonetic": 100.0, "edit": 100.0}, "threshold": 82, "is_match": true, "reasons": ["normalized forms identical"], "pack_version": "2026.07.12", "disclaimer": "Structural normalization plus fuzzy matching; indicators, not authoritative identity resolution."}` - Tags: record-linkage, fuzzy-matching, name-matching, dedup, entity, company, person, address, data-quality, mdm ### `GET /match/key` — $0.005 Generate a stable blocking key so a caller can group a large list into candidate-duplicate buckets cheaply before running the more expensive pairwise /match/name confirmation only within each bucket — the standard record-linkage blocking pattern that keeps deduplication out of quadratic time. The key is built from the significant normalized tokens (sorted so word order does not matter, business stop-words dropped for companies) plus a phonetic code of the significant token(s) so spelling variants that sound alike still collide. Identical keys mean the two inputs are duplicate candidates. The response also returns the canonical normalized form and its tokens. Pure compute over the caller's string — no network, no keys, no storage. Indicators, not authoritative identity resolution. - Query params: `{"value": "ACME Incorporated", "type": "company"}` - Example response: `{"object": "match_key", "type": "company", "input": "ACME Incorporated", "similarity_key": "acme|#AKM", "canonical": "acme", "tokens": ["acme"], "phonetic_backend": "jellyfish.metaphone", "pack_version": "2026.07.12", "disclaimer": "Structural normalization plus fuzzy matching; indicators, not authoritative identity resolution."}` - Tags: record-linkage, similarity-key, blocking, dedup, entity, company, person, address, data-quality, mdm ### `GET /match/standardize` — $0.005 Clean and canonicalise one record so different surface forms collapse to a single standard string — the data-cleansing step before storage, matching or joining. For companies it unicode-folds, lower-cases, canonicalises multi-jurisdiction legal forms (Incorporated to a single Inc token, GmbH, Ltd, S.A. and more) and drops business stop-words; for people it strips titles and generational suffixes and maps common nicknames to the canonical first name; for addresses it folds USPS-style street-suffix, unit-designator and directional abbreviations. The response returns the canonical form, its tokens and an explicit list of the rules that fired so the transformation is auditable. Pure compute over the caller's string — no network, no keys, no storage. Structural normalization only, NOT libpostal-grade international address parsing; indicators, not authoritative identity resolution. - Query params: `{"value": "123 North Main Street, Suite 100", "type": "address"}` - Example response: `{"object": "match_standardize", "type": "address", "input": "123 North Main Street, Suite 100", "canonical": "123 n main st ste 100", "tokens": ["123", "n", "main", "st", "ste", "100"], "applied_rules": ["address_abbrev:north->n", "address_abbrev:street->st", "address_abbrev:suite->ste"], "pack_version": "2026.07.12", "disclaimer": "Structural normalization plus fuzzy matching; indicators, not authoritative identity resolution."}` - Tags: record-linkage, standardization, normalization, cleansing, entity, company, person, address, data-quality, mdm ### `POST /match/dedupe` — $0.02 Deduplicate a whole list in one call — the batch companion to /match/name. An agent posts a list of contact, lead or vendor names (or addresses) and gets back clusters of records that refer to the same entity, each with a canonical representative it can keep. The algorithm blocks the list by similarity key so only records that already share a key are compared pairwise, keeping the work near-linear instead of quadratic; within each block a pairwise composite score above the per-type threshold unions records into a cluster. The response includes each cluster's members with their normalized forms, a deterministic canonical representative, and a summary of the input, cluster and duplicate counts. The list is capped for abuse resistance and every string is size-bounded. This route is POST because an arbitrary list does not fit in query parameters — there are no secrets. Pure compute over the caller's own list — no network, no keys, no storage. Similarity indicators, not authoritative identity resolution. - Request body: `{"items": ["Acme Inc", "ACME Incorporated", "Beta LLC"], "type": "company"}` - Example response: `{"object": "match_dedupe", "type": "company", "threshold": 82, "summary": {"input_count": 3, "cluster_count": 2, "duplicate_count": 1}, "clusters": [{"cluster_id": 0, "size": 2, "canonical_representative": "Acme Inc", "similarity_key": "acme|#AKM", "members": [{"index": 0, "input": "Acme Inc", "canonical": "acme"}, {"index": 1, "input": "ACME Incorporated", "canonical": "acme"}]}, {"cluster_id": 1, "size": 1, "canonical_representative": "Beta LLC", "similarity_key": "beta llc", "members": [{"index": 2, "input": "Beta LLC", "canonical": "beta llc"}]}], "pack_version": "2026.07.12", "disclaimer": "Structural normalization plus fuzzy matching; indicators, not authoritative identity resolution."}` - Tags: record-linkage, dedup, deduplication, clustering, entity, company, person, address, data-quality, mdm ### `GET /env/facility` — $0.03 One-call environmental due-diligence profile for a US EPA-regulated facility, built entirely from public-domain EPA data. Accepts a company/facility {name} (optionally narrowed by {state}), an EPA FRS {registry_id}, a US {address} (auto-geocoded), or {lat, lon} with an optional {radius}. Resolves the best-match facility and returns its current compliance status (significant-violation and noncompliance flags per Clean Air Act, Clean Water Act, RCRA and Safe Drinking Water Act), a three-year quarter-by-quarter compliance history, enforcement history (formal and informal actions, inspection recency, cumulative penalty dollars), a Toxics Release Inventory trend, and the reported Greenhouse Gas Reporting Program CO2e profile. It fuses these into a deterministic 0 to 100 environmental-risk score with a low, medium, high or critical rating and per-dimension reasons, each citing its EPA source and period. Every downstream source is best-effort: a source that fails yields a null block plus a summary.errors note and partial=true, never a failure. Environmental due-diligence indicators only, not legal or compliance advice. US coverage; bad input returns 400, no match returns 404, never 500. - Query params: `{"name": "Par Hawaii Refining", "state": "HI"}` - Example response: `{"facility": {"registry_id": "110000486322", "name": "PAR HAWAII REFINING", "state": "HI", "compliance": {"snc_flag": true}}, "environmental_risk": {"score": 82.4, "rating": "critical"}, "greenhouse_gas": {"latest_co2e_tonnes": 1250000}, "summary": {"partial": false, "errors": []}}` - Tags: environmental, compliance, esg, epa, echo, emissions, tri, greenhouse-gas, due-diligence, risk, us ### `GET /env/compliance` — $0.02 Enforcement and compliance detail for a US EPA-regulated facility from the ECHO Detailed Facility Report, the violations grain of the environmental service. Accepts a company/facility {name} (optionally with {state}), an EPA FRS {registry_id}, a US {address}, or {lat, lon}. Returns the current significant-violation and noncompliance flags overall and per statute (Clean Air Act, Clean Water Act NPDES, RCRA hazardous waste, Safe Drinking Water Act), the number of quarters in noncompliance, per-statute enforcement summaries (formal and informal actions, cases, penalty and case-penalty dollars, last inspection), and inspection recency. Best-effort detail: a Detailed Facility Report failure yields a null detail block plus summary.errors and partial=true, never a failure. Environmental due-diligence indicators only, not legal or compliance advice. US coverage; bad input returns 400, no match 404, never 500. - Query params: `{"registry_id": "110000486322"}` - Example response: `{"facility": {"registry_id": "110000486322", "name": "PAR HAWAII REFINING", "state": "HI"}, "compliance": {"snc_flag": true, "quarters_in_noncompliance": 12, "by_statute": {"CAA": "Significant Violation"}}, "enforcement": {"formal_actions": 4, "total_penalties_usd": 31254432}, "summary": {"partial": false, "errors": []}, "source": "US EPA ECHO (public domain)"}` - Tags: environmental, compliance, enforcement, violations, epa, echo, penalties, due-diligence, us ### `GET /env/emissions` — $0.02 Emissions profile for a US EPA-regulated facility fusing two public-domain EPA programs. Accepts a company/facility {name} (optionally with {state}), an EPA FRS {registry_id}, a US {address}, or {lat, lon}. Returns the Toxics Release Inventory history (total on-site and off-site toxic releases and total air emissions by year, the latest year, and the on-site release trend) and the Greenhouse Gas Reporting Program profile (annual reported CO2e in metric tonnes by year, the latest year, and the trend). Either source is best-effort: a failure yields a null block plus summary.errors and partial=true, never a failure. Environmental indicators only, not legal or compliance advice. US coverage; bad input returns 400, no match 404, never 500. - Query params: `{"name": "Par Hawaii Refining", "state": "HI"}` - Example response: `{"facility": {"registry_id": "110000486322", "name": "PAR HAWAII REFINING"}, "toxic_releases": {"latest_on_site_releases_lbs": 164890, "on_site_trend": "rising"}, "greenhouse_gas": {"latest_year": 2023, "latest_co2e_tonnes": 1250000}, "summary": {"partial": false, "errors": []}, "sources": ["US EPA TRI (public domain)", "US EPA GHGRP (public domain)"]}` - Tags: environmental, emissions, tri, toxic-release, greenhouse-gas, ghg, co2e, epa, esg, us ### `GET /env/screen` — $0.015 Cheap discovery step for the environmental service: fuzzy-search US EPA-regulated facilities and get back ranked candidates with their EPA FRS registry id, before paying for a full facility verdict. Accepts a facility or company {name} (rapidfuzz-ranked), a {state}, a US {address} or {lat, lon} with an optional {radius} in miles, and an optional {naics} industry-code filter; combine them to narrow. Returns the total number of matching facilities and a ranked candidate list, each with registry id, name, city, state, county, coordinates, NAICS codes, current compliance status and significant-violation flag, and a match score when a name was given. Feed a returned registry_id into env facility, env compliance or env emissions. US coverage; bad input returns 400, never 500. - Query params: `{"name": "Exxon", "state": "TX"}` - Example response: `{"query": {"name": "Exxon", "state": "TX"}, "total_matching": 1622, "returned": 2, "candidates": [{"registry_id": "110000486322", "name": "EXXONMOBIL", "state": "TX", "compliance_status": "No Violation Identified", "match_score": 90.0}], "source": "US EPA ECHO (public domain)"}` - Tags: environmental, screen, search, epa, facility, frs, us ### `GET /trials/study` — $0.02 One-call normalized profile for a single clinical trial, flattened from the deeply nested ClinicalTrials.gov API v2 record into a compact cited JSON. Supply an NCT id and get the trial's identity (NCT id, brief title, organization, acronym), current recruitment status with any why-stopped reason, the study design (type, phase, allocation, intervention model, masking, primary purpose), target enrollment, the lead sponsor with its class and any collaborators, the conditions studied, the interventions with their type, the primary outcome measures, and the trial sites reduced to facility, city, state and country. Key dates (start, primary completion, completion, last update) are included alongside computed signals: whether the trial is recruiting or active, whether results have been posted, days since the last update, days to primary completion and the enrollment type. Natural-person contacts (investigators, central contacts) are deliberately never returned. Informational aggregation of public registry data, not medical advice. - Query params: `{"nct": "NCT03228186"}` - Example response: `{"found": true, "query": {"nct": "NCT03228186"}, "trial": {"identity": {"nct_id": "NCT03228186", "brief_title": "Trial of Pevonedistat Plus Docetaxel in NSCLC", "org": "University of Michigan Rogel Cancer Center"}, "status": {"overall_status": "terminated", "primary_completion_date": "2021-11-04", "results_posted": true}, "design": {"study_type": "INTERVENTIONAL", "phases": ["Phase 2"], "enrollment": 40}, "sponsor": {"lead": "University of Michigan Rogel Cancer Center", "lead_class": "OTHER", "collaborators": []}, "conditions": ["Non-small Cell Lung Cancer"], "interventions": [{"type": "DRUG", "name": "Pevonedistat"}], "signals": {"is_recruiting": false, "has_results": true}}, "attribution": ["Source: ClinicalTrials.gov (U.S. National Library of Medicine, NIH)"]}` - Tags: clinical-trials, clinicaltrials-gov, trial, nct, pharma, biotech, drug-development, pipeline, enrollment, sponsor, healthcare ### `GET /trials/search` — $0.015 Keyword and facet search over ClinicalTrials.gov, returning a ranked list of normalized trial records rather than a raw registry dump. Supply any combination of a condition or indication, an intervention drug or molecule, a sponsor or lead sponsor, free-text terms, title or acronym terms, and narrow further by phase, recruitment status, study type or country. Each hit is compacted to its NCT id, brief title, phases, status, study type, lead sponsor, target enrollment and primary completion date, sorted by most-recently updated so active programs surface first. The response also carries the true total match count and an on-page facet summary by phase and status for quick triage. Use it as the cheap first step: run a search, then call /trials/study for a full profile of a promising NCT id, or /trials/pipeline for a by-phase and by-status aggregation across a whole program. Informational aggregation of public registry data, not medical advice. - Query params: `{"cond": "lung cancer", "phase": "3", "status": "recruiting"}` - Example response: `{"query": {"cond": "lung cancer", "phase": "3"}, "total_count": 1380, "returned": 1, "results": [{"nct_id": "NCT00000000", "title": "A Phase 3 NSCLC Study", "phases": ["Phase 3"], "status": "recruiting", "lead_sponsor": "Example Pharma", "enrollment": 600, "primary_completion_date": "2027-06-30"}], "facets_on_page": {"by_phase": {"Phase 3": 1}, "by_status": {"recruiting": 1}}, "attribution": ["Source: ClinicalTrials.gov (U.S. National Library of Medicine, NIH)"]}` - Tags: clinical-trials, clinicaltrials-gov, search, indication, sponsor, drug, molecule, pharma, biotech, pipeline, discovery ### `GET /trials/pipeline` — $0.03 A deterministic pipeline view of every trial for one molecule, one indication or one sponsor, computed with count-only queries against ClinicalTrials.gov rather than any language model. Supply exactly one of an intervention or molecule, a condition, or a sponsor and get the total trial count, a breakdown by phase from Early Phase 1 through Phase 4, and a breakdown by recruitment status covering recruiting, not yet recruiting, active not recruiting, completed, terminated, withdrawn and suspended. From those the route derives the active, completed and recruiting totals, and a near-term readout list: recruiting or active trials whose primary completion date falls within a window you choose (default 180 days), sorted by soonest and each annotated with days to readout. Upcoming primary completions are the clinical catalysts investors and competitive-intelligence agents watch. The number of upstream queries is capped and reported. Informational aggregation of public registry data, not medical or investment advice. - Query params: `{"intr": "pembrolizumab"}` - Example response: `{"query": {"intr": "pembrolizumab"}, "total_trials": 1800, "by_phase": {"phase1": 300, "phase2": 700, "phase3": 500, "phase4": 90}, "by_status": {"recruiting": 400, "completed": 900, "terminated": 60}, "signals": {"active_trials": 650, "completed_trials": 900, "recruiting_trials": 400}, "near_term_readouts": {"window_days": 180, "count": 1, "items": [{"nct_id": "NCT00000000", "title": "A study", "phases": ["Phase 3"], "status": "recruiting", "primary_completion_date": "2026-09-30", "days_to_readout": 80}]}, "attribution": ["Source: ClinicalTrials.gov (U.S. National Library of Medicine, NIH)"]}` - Tags: clinical-trials, clinicaltrials-gov, pipeline, phase, aggregation, drug-development, pharma, biotech, sponsor, readout, catalyst ### `GET /trials/results` — $0.02 An aggregate summary of the results a sponsor has posted for a trial, for agents screening readouts without parsing the full ClinicalTrials.gov results section. Supply an NCT id and, when results exist, get the date results were first posted, the aggregate participant flow (how many were enrolled and how many completed across all arms), the metadata of the primary outcome measures (type, title, unit of measure and parameter type), and aggregate serious adverse-event counts (serious and death affected totals with the at-risk denominator and the reporting frequency threshold). Only aggregate figures are returned, never per-subject case bodies. When a sponsor has not posted results the route returns has_results false with the trial's current status rather than an error. Informational aggregation of public registry data, not medical advice. - Query params: `{"nct": "NCT03228186"}` - Example response: `{"found": true, "has_results": true, "query": {"nct": "NCT03228186"}, "results_first_posted": "2023-01-15", "participant_flow": {"enrolled": 31, "completed": 30}, "primary_outcome_measures": [{"type": "PRIMARY", "title": "Percentage of Patients That Respond", "unit": "percentage of participants"}], "serious_adverse_events": {"serious_affected": 12, "deaths_affected": 24, "at_risk": 30}, "attribution": ["Source: ClinicalTrials.gov (U.S. National Library of Medicine, NIH)"]}` - Tags: clinical-trials, clinicaltrials-gov, results, outcomes, adverse-events, safety, efficacy, pharma, biotech, readout ### `GET /nonprofit/profile` — $0.03 The composite grantee/charity due-diligence report an AI grantmaking, donor-advised, or agentic-giving agent needs before sending funds to a US 501(c) nonprofit. Accepts an EIN directly or resolves an organization name (optionally narrowed by US state). Fuses three free public-domain sources: ProPublica Nonprofit Explorer for identity, decoded IRS classification codes (NTEE major group, subsection, foundation type, ruling date, exempt status) and the latest Form 990 financials with executive compensation; the IRS Publication 78 file for current charitable-deductibility; and the IRS Automatic Revocation list for loss-of-status with revocation and reinstatement dates. Returns normalized latest financials, a multi-year revenue/expense/net-asset trend, cited filing PDF links by tax year, computed ratios (program-support, overhead, officer-compensation share, net margin, revenue growth), and a deterministic health and risk score with the signals that fired. Returns status indicators from public data, not tax, legal or donation advice. See /nonprofit/sources for provenance and index freshness. - Query params: `{"ein": "530196605"}` - Example response: `{"found": true, "identity": {"ein": "530196605", "name": "American National Red Cross", "ntee": {"code": "P21", "major_group": "Human Services"}, "subsection": "501(c)(3) Charitable / religious / educational"}, "current_status": {"pub78_deductible": true, "auto_revoked": false}, "latest_financials": {"tax_year": 2023, "revenue": 3217077611, "expenses": 2971106889}, "risk": {"risk_score": 0, "risk_band": "low", "health_score": 100}, "attribution": "ProPublica Nonprofit Explorer + IRS (public domain)"}` - Tags: nonprofit, charity, 501c3, due-diligence, irs, form-990, grantmaking, ein, tax-exempt ### `GET /nonprofit/status` — $0.008 The cheap authoritative gate for donor-DD, grant-eligibility and KYC checks on a US 501(c) nonprofit. Reads the on-disk index built from the IRS Publication 78 (current charitable-deductibility) and Automatic Revocation of Exemption files, both public domain, keyed by EIN. Returns whether the organization is currently tax-exempt, whether donations are presently deductible with the Pub 78 eligibility code, whether tax-exempt status was automatically revoked with the revocation posting date, whether it was later reinstated with that date, and its 501(c) subsection. While the IRS index is still building the route returns a no-charge 503. Returns status indicators, not tax or legal advice. - Query params: `{"ein": "530196605"}` - Example response: `{"ein": "530196605", "tax_exempt": true, "pub78_deductible": true, "pub78_deductibility_code": "PC", "auto_revoked": false, "reinstated": false, "subsection": "501(c)(3) Charitable / religious / educational", "attribution": "ProPublica Nonprofit Explorer + IRS (public domain)"}` - Tags: nonprofit, charity, irs, tax-exempt, pub78, deductible, auto-revocation, compliance, ein ### `GET /nonprofit/financials` — $0.02 The multi-year Form 990 financial picture an analyst agent needs to assess a US 501(c) nonprofit. Normalizes each available filing from the ProPublica Nonprofit Explorer 990 extract into one canonical schema: total revenue, functional expenses, contributions and grants, program service revenue, investment income, end-of-year assets, liabilities and net assets, and compensation of current officers. Per period it computes program-support, overhead, officer-compensation-share, expense and net-margin ratios and year-over-year revenue growth, and flags missing years. Every number is cited to its filing tax year and PDF link (linked, never rehosted). Form 990 data typically lags one to two years, so each figure is as-of its cited tax year. Public financial data, not investment or tax advice. - Query params: `{"ein": "530196605"}` - Example response: `{"found": true, "ein": "530196605", "name": "American National Red Cross", "periods": [{"tax_year": 2023, "revenue": 3217077611, "expenses": 2971106889, "net_assets": 3019994931, "ratios": {"net_margin": 0.0765}}], "revenue_growth_latest": 0.05, "attribution": "ProPublica Nonprofit Explorer + IRS (public domain)"}` - Tags: nonprofit, charity, form-990, financials, irs, revenue, expenses, executive-compensation, ein ### `GET /nonprofit/search` — $0.008 The cheap first step to resolve a US 501(c) nonprofit by name to its EIN before pulling a full profile or financials. Searches the ProPublica Nonprofit Explorer index and returns ranked candidate organizations, each with EIN, name, city, state, decoded NTEE classification, 501(c) subsection, a has-filings flag and a relevance score. Narrow the search by 2-letter US state, NTEE category id (1 to 10) or 501(c) subsection number to disambiguate common names. Public registry data; returns candidates, not legal advice. - Query params: `{"name": "American Red Cross", "state": "DC"}` - Example response: `{"query": {"name": "American Red Cross", "state": "DC"}, "total_results": 2, "count": 1, "candidates": [{"ein": "530196605", "name": "American National Red Cross", "city": "Washington", "state": "DC", "ntee": {"code": "P21", "major_group": "Human Services"}, "score": 94.2}], "attribution": "ProPublica Nonprofit Explorer + IRS (public domain)"}` - Tags: nonprofit, charity, search, ein, disambiguation, irs, 501c3, lookup ### `GET /travel/entry` — $0.03 One-call international-entry due-diligence for a travel-booking or compliance agent. Supply a passport country and a destination (country name, ISO2 or ISO3) and get back a fused, normalized and cited entry picture drawn from free public travel sources: the community passport-index visa-matrix requirement (visa free, visa on arrival, e-visa, electronic travel authorization, visa required, or the visa-free day allowance); a curated indicative passport-validity rule for the destination (including the Schengen three-month rule); the US Department of State travel advisory level one to four with its label, summary and last-updated date; and the US CDC travel-health notices currently in effect for that destination plus any global-scope notices. On top of the raw sources the route derives a required-documents list and human-readable entry notes. The moat is the fusion of four layers under one country-pair query, not a resale. Advisory and health data are authoritative and live; the visa requirement is INDICATIVE, from a community dataset compiled from Wikipedia (Passport Index Dataset, MIT, attributed on every response), so verify with the destination embassy before booking or travelling. Partial answers are returned if one source is briefly down (never a 500); an unknown country returns a clean 400. Informational only and not immigration, visa or legal advice; the final admission decision rests with the destination's border authorities. - Query params: `{"passport_country": "US", "destination": "Thailand"}` - Example response: `{"passport_country": {"iso2": "US", "iso3": "USA", "name": "United States"}, "destination": {"iso2": "TH", "iso3": "THA", "name": "Thailand"}, "visa": {"requirement": "visa free", "requirement_label": "Visa free", "allowed_days": 30, "source": "visa_matrix"}, "passport_validity_rule": {"rule": "Passport valid 6 months beyond entry.", "indicative": true}, "advisory": {"level": 1, "level_label": "Exercise Normal Precautions", "updated": "2024-01-08", "source": "state_advisory"}, "health_notices": [{"level": 1, "title": "Global Dengue", "scope": "global", "source": "cdc_health"}], "required_docs": ["Valid passport"], "sources": {"partial": false}}` - Tags: travel, visa, entry-requirements, passport, advisory, health-notice, immigration, border, agentic-travel, compliance ### `GET /travel/advisory` — $0.01 The current US Department of State travel advisory for a destination country. Supply a country name, ISO2 or ISO3 code and get back the normalized advisory level (one Exercise Normal Precautions, two Exercise Increased Caution, three Reconsider Travel, four Do Not Travel), the advisory title, the summary text and the last-updated date. The data is US-government public domain, fetched live and cached. A country with no current advisory returns found false rather than an error. Attributed to the US Department of State. Informational only and not a guarantee of safety; conditions change, so verify against travel.state.gov before travelling. - Query params: `{"destination": "France"}` - Example response: `{"destination": {"iso2": "FR", "iso3": "FRA", "name": "France"}, "found": true, "advisory": {"level": 2, "level_label": "Exercise Increased Caution", "updated": "2024-01-08", "source": "state_advisory"}, "sources": {"partial": false}}` - Tags: travel, advisory, state-department, safety, destination, risk-level ### `GET /travel/health` — $0.01 The current US CDC travel-health notices for a destination country. Supply a country name, ISO2 or ISO3 code and get back the outbreak, disease and vaccine notices the CDC currently has posted for that country (matched by country name in the notice), plus any global-scope notices that apply everywhere, each normalized to its notice level, title and link. The data is US-government public domain, fetched live from the CDC travel notices feed and cached. A country with no current notices returns an empty list rather than an error. Attributed to the US CDC. Informational only and not medical advice; consult a travel-medicine provider and cdc.gov/travel before travelling. - Query params: `{"destination": "Uganda"}` - Example response: `{"destination": {"iso2": "UG", "iso3": "UGA", "name": "Uganda"}, "notice_count": 1, "health_notices": [{"level": 2, "title": "Ebola in Uganda", "scope": "country", "source": "cdc_health"}], "sources": {"partial": false}}` - Tags: travel, health, cdc, outbreak, vaccine, disease, destination ### `GET /travel/visa` — $0.008 The visa requirement for a passport-and-destination pair, looked up in a community passport-index visa-matrix. Supply the passport country and the destination (country name, ISO2 or ISO3) and get back the normalized requirement: visa free, visa on arrival, e-visa, electronic travel authorization, visa required, or no admission, with a human label, a description and the visa-free day allowance when the source gives a number of days. The dataset is MIT-licensed and attributed on every response (Passport Index Dataset by Ilya Ilyankou) but is compiled from Wikipedia, so it is INDICATIVE, not authoritative: always verify with the destination embassy or official immigration authority before booking or travelling. An unknown pair returns found false rather than an error. Not immigration or legal advice. - Query params: `{"passport_country": "DE", "destination": "Japan"}` - Example response: `{"passport_country": {"iso2": "DE", "iso3": "DEU", "name": "Germany"}, "destination": {"iso2": "JP", "iso3": "JPN", "name": "Japan"}, "found": true, "visa": {"requirement": "visa free", "requirement_label": "Visa free", "allowed_days": 90, "source": "visa_matrix"}, "sources": {"partial": false}}` - Tags: travel, visa, passport, visa-requirement, visa-free, e-visa, visa-matrix ### `GET /osha/screen` — $0.008 The light first step of a two-step workplace-safety vetting flow (screen then company, mirroring the freight and KYB screen-then-verify pattern). Give an establishment or company name and get back ranked candidates grouped from the public OSHA Establishment Search, each carrying its physical state, SIC and NAICS industry codes, the date of its most recent inspection, how many inspections are on record, the summed number of violations across them and the most serious inspection trigger seen (a fatality or catastrophe, an accident, a complaint, a referral or a programmed inspection). An optional state code narrows the set; ranking is exact then prefix then substring on the normalized name, more-inspected and more-recent first. Establishment records that share a normalized name and state are deduplicated into one candidate. An agent uses this to pick the right employer and then calls osha/company for the full deterministic safety-risk verdict. Returns an empty list when nothing matches and a partial result when the source is down rather than failing; an empty name is a 400. Business and establishment metadata only, never personal data about workers. Source is the OSHA Establishment Search, US DOL public domain. Risk indicators, not legal or compliance advice. - Query params: `{"name": "Dollar General", "state": "AR"}` - Example response: `{"query": "DOLLAR GENERAL", "count": 1, "candidates": [{"establishment_name": "Dollar General Store", "state": "AR", "sic": null, "naics": "452319", "inspection_count": 3, "total_violations": 4, "last_inspection_date": "04/24/2025", "worst_impetus_label": "Complaint"}], "attribution": ["OSHA Establishment Search (US DOL; US-gov public domain)."]}` - Tags: osha, workplace-safety, labor, compliance, inspection, violations, due-diligence, vendor-screening, esg, supply-chain, dol, search ### `GET /osha/company` — $0.03 One-call workplace-safety vetting for procurement, vendor-onboarding, ESG, supply-chain and M&A due-diligence agents screening a US employer. Give an establishment or company name and, optionally, a 2-letter state, and the route resolves the best-matching establishment in the public OSHA enforcement records, fetches the detail pages of its most recent inspections (capped for cost, with a truncated flag when more exist) and returns a deterministic safety-risk verdict: a 0-100 safety_risk_score and a low, medium, high or critical rating. The score is a transparent weighted model across dimensions: willful violations, repeat violations, serious violations, aggregate current penalties, whether an inspection was triggered by a fatality or catastrophe, the depth of the enforcement history, how recently an adverse inspection occurred and any failure-to-abate penalties. Each fired dimension returns its points, severity and a human-readable reason so an agent can re-rank with its own policy, and a coverage block reports how many inspections were detailed versus the total on record. The response cites every inspection behind the score with its number, date, case status, trigger, current penalty and a link to the OSHA detail page. Wage-and-hour and mine-safety datasets are registered as deferred coverage a future extension will enable. Partial answers are returned when the source is down rather than failing; nothing found returns verdict not_found. Business and establishment metadata only, never personal data about workers; the accident narrative is not surfaced. OSHA enforcement data lags (citations post about 30 days after an employer receives them and open cases may omit citation data), so verify inspection status and contest outcomes directly with OSHA. Source is the OSHA Establishment Search and Inspection Detail, US DOL public domain. Risk indicators, not legal, safety or compliance advice. - Query params: `{"name": "Dollar General Store", "state": "AR"}` - Example response: `{"verdict": "found", "safety_risk_score": 46, "rating": "medium", "company": {"establishment_name": "Dollar General Store", "state": "AR", "naics": "452319"}, "aggregates": {"inspection_count_total": 3, "serious_violations": 4, "willful_violations": 0, "repeat_violations": 0, "current_penalty_total_usd": 6400.0, "worst_impetus_label": "Complaint"}, "signals": [{"dimension": "serious", "points": 14.4, "severity": "high", "reason": "Serious violation(s) on record."}], "reasons": ["Serious violation(s) on record."], "cited_inspections": [{"inspection_id": "1798228.015", "date_opened": "04/24/2025", "current_penalty_usd": 6400.0}], "disclaimer": "Risk indicators, not legal or compliance advice."}` - Tags: osha, workplace-safety, labor, compliance, inspection, violations, penalty, willful, repeat, risk-score, due-diligence, vendor-screening, esg, supply-chain, m-and-a, dol ### `GET /price/discover` — $0.005 The cheap first step of the hospital price-transparency workflow. Every US hospital must publish a plain-text cms-hpt.txt pointer file in the root of its website under the federal Hospital Price Transparency rule; this route fetches it (falling back to the known /documents/ path) and parses every location block a multi-hospital system lists into a normalized shape: the location name, the human source page, the machine-readable-file (MRF) URL and the detected file format (json, csv, json.gz or csv.gz). Pass a hospital domain to discover, or an mrf_url to classify a known file directly. Feed the returned mrf_url into /price/hospital to read actual negotiated, gross and cash prices for a procedure code. Not-found is returned cleanly (never a 500) when a hospital does not expose a readable pointer file. Informational price estimate from the hospital's own published file and US public data; NOT a quote or guarantee of coverage — verify with the provider and payer. - Query params: `{"domain": "nemours.org"}` - Example response: `{"query": {"domain": "nemours.org"}, "found": true, "location_count": 1, "locations": [{"location_name": "NEMOURS CHILDREN'S HOSPITAL", "mrf_url": "https://www.nemours.org/.../standardcharges.csv", "detected_format": "csv", "source": "https://nemours.org/cms-hpt.txt"}]}` - Tags: hospital, price-transparency, healthcare, mrf, cms, discovery, cms-hpt, billing ### `GET /price/hospital` — $0.04 The flagship route: a fused, cited price picture for one procedure at one hospital, drawn entirely from first-party and public data. Supply the hospital's machine-readable-file URL (from /price/discover, or a domain to auto-discover it) plus a procedure billing code and optional code system(s); the route streams just the slice of the file that matches the code — never loading the whole file into memory — and returns each matching charge normalized to one schema: description, care setting, gross charge, discounted cash price, de-identified minimum and maximum, and the list of payer-specific negotiated rates (payer, plan, dollar amount or percentage and methodology). An optional payer filter narrows the negotiated rates. Every value cites the file's own hospital name, last-updated date and version. When a 6-digit CMS Certification Number is supplied (or the hospital name resolves), the route fuses CMS Care Compare quality — the overall star rating and the safety, mortality and readmission measure counts — so price sits next to quality in one answer; that fusion plus the normalization of wildly heterogeneous file schemas (nested JSON and tall or wide CSV, gzip or plain) is the moat, not a bare lookup. A code absent from the file returns found:false (a rate is never invented); a very large file that hits the scan cap returns truncated:true with an honest scanned-bytes count; the quality grain degrades to null without failing the price answer. Informational price estimate from the hospital's own published file and US public data; NOT a quote or guarantee of coverage — verify with the provider and payer. - Query params: `{"domain": "nemours.org", "code": "96365", "code_type": ["CPT"]}` - Example response: `{"query": {"code": "27447", "code_type": ["CPT"]}, "found": true, "match_count": 1, "charges": [{"description": "Total knee arthroplasty", "setting": "outpatient", "gross_charge": 29157.12, "discounted_cash": 12000.0, "minimum": 3397.96, "maximum": 29157.12, "payers": [{"payer_name": "Aetna", "plan_name": "PPO", "standard_charge_dollar": 7542.0, "methodology": "fee schedule"}]}], "quality": {"overall_star_rating": 4, "state": "TX"}, "citation": {"hospital_name": "The Methodist Hospital", "last_updated_on": "2026-04-01", "mrf_version": "3.0.0"}, "coverage": {"truncated": false, "scanned_bytes": 1048576, "quality_fused": true}}` - Tags: hospital, price, negotiated-rate, cash-price, gross-charge, cms, care-compare, quality, procedure, healthcare, mrf, fusion ### `GET /price/benchmark` — $0.01 A cheap comparison anchor that needs no heavy machine-readable file. Supply a CPT or HCPCS procedure code and get the Medicare national reference amounts for it from public-domain CMS data — the average submitted charge, the average Medicare allowed amount and the average Medicare payment amount, broken out by place of service — so an agent can judge how a hospital's negotiated or cash price from /price/hospital compares to what Medicare pays nationally. The source dataset and year are cited. The benchmark source is registry-driven, so a new code system or dataset is one row; a code Medicare does not price at the national level returns found:false cleanly (never a 500). Informational price estimate from the hospital's own published file and US public data; NOT a quote or guarantee of coverage — verify with the provider and payer. - Query params: `{"code": "99213", "code_type": ["CPT"]}` - Example response: `{"query": {"code": "99213", "code_type": ["CPT"]}, "found": true, "available": true, "benchmark": {"code": "99213", "description": "Office/outpatient visit", "by_place_of_service": [{"place_of_service": "F", "avg_medicare_allowed": 61.15, "avg_medicare_payment": 43.96}]}, "source_dataset": "Medicare Physician & Other Practitioners - by Geography and Service", "year": 2024}` - Tags: hospital, price, benchmark, medicare, reference-price, cms, hcpcs, cpt, healthcare ### `GET /adviser/verify` — $0.03 Reconcile a US financial professional or firm across the two authoritative public regulatory disclosure systems in one call and return a deterministic due-diligence verdict. The fusion key is the CRD number (Central Registration Depository), the identifier a person or firm shares across FINRA BrokerCheck (broker-dealer side) and SEC IAPD (investment-adviser side). Provide a CRD for an authoritative result, or a name or firm which resolves to a CRD first. The response normalizes registration status and scope (broker-dealer and investment-adviser), Series exams such as Series 7, 63, 65 and 66, employment history, registered states and SROs, and every disciplinary disclosure with its date, category, resolution and allegations. The risk score from 0 to 100 is the capped sum of per-disclosure weights, where each disclosure's category weight is scaled by its disposition so a matter closed with no action counts near zero and a settled, awarded or consent outcome counts in full. The verdict is one of clean, minor_disclosures, elevated or red_flag, with any materialised criminal or regulatory event forcing at least an elevated or red_flag verdict. A name that does not resolve to a single subject returns candidate matches rather than labelling a possibly-wrong person, and a score is only ever computed on a resolved CRD. Each registry is fetched live per call and fused independently, so one source being unavailable returns a partial answer, never a failure. Informational compliance and due-diligence screening, not a consumer report under the FCRA and not legal or investment advice; every paid response carries per-source attribution and the BrokerCheck Terms of Use notice. - Query params: `{"crd": "1785564"}` - Example response: `{"verdict": "elevated", "risk_score": 34, "subject": {"crd": "1785564", "name": "JOHN JAY JOHN", "type": "individual"}, "registration": {"bc_scope": "Active", "ia_scope": "Active", "is_broker": true, "is_adviser": true}, "disclosures": {"flag": true, "count": 4, "by_type": {"Customer Dispute": 4}}, "reasons": ["4 Customer Dispute disclosures"], "attribution": ["Source: FINRA BrokerCheck", "Source: SEC IAPD (Investment Adviser Public Disclosure)"], "retrieved_at": "2026-07-12T00:00:00Z", "verdict_values": ["clean", "minor_disclosures", "elevated", "red_flag"]}` - Tags: finance, compliance, due-diligence, broker, investment-adviser, finra, brokercheck, sec, iapd, crd, disclosure, verification ### `GET /adviser/screen` — $0.008 The cheap first step of adviser due diligence: turn a name into ranked candidates so the caller can pick the right CRD before paying for a full verify. Searches both FINRA BrokerCheck and SEC IAPD, merges and de-duplicates hits by CRD number, and returns each candidate with its CRD, name, current firm, broker-dealer and investment-adviser scope and a disclosure flag. Provide a person name or a firm name, optionally narrowed by a two-letter US state code. No disciplinary score is assigned here — this route only disambiguates identity; pass the chosen CRD to /adviser/verify for the authoritative scored verdict. Data is fetched live per call from the two public registries; results carry per-source attribution and the BrokerCheck Terms of Use notice. Informational, not a consumer report under the FCRA and not legal or investment advice. - Query params: `{"name": "John John"}` - Example response: `{"query": "John John", "type": "individual", "count": 1, "candidates": [{"crd": "1785564", "name": "JOHN JAY JOHN", "type": "individual", "current_firm": "CALTON & ASSOCIATES, INC.", "bc_scope": "Active", "ia_scope": "Active", "disclosure_flag": true}], "attribution": ["Source: FINRA BrokerCheck", "Source: SEC IAPD (Investment Adviser Public Disclosure)"]}` - Tags: finance, compliance, broker, investment-adviser, finra, brokercheck, sec, iapd, crd, disambiguation, screening ### `GET /insider/trades` — $0.02 One call returns the normalized insider-trading history for a company straight from the authoritative SEC source, so an agent does not scrape EDGAR or parse raw ownership XML. Supply a ticker or issuer CIK and an optional date window; the route runs SEC EDGAR full-text search over the issuer's Form 3, 4 and 5 filings, fetches each structured ownership document, and maps it to a clean schema. For every transaction you get the SEC transaction code and a human label (open-market purchase, open-market sale, grant, option exercise, tax withholding, gift and more), the security title, share count, price per share, computed value, whether shares were acquired or disposed, direct or indirect ownership, shares owned afterward, and the disclosure lag in days between the transaction and the filing. Each filing carries the insider's name, CIK and role (director, officer with title, ten-percent owner) and cites its accession number and the exact form4.xml URL so any number is traceable. Optional filters narrow to one person or a set of transaction codes. Data covers the issuing company's insiders only and comes from US public-domain SEC filings; informational, not investment advice. - Query params: `{"ticker": "AAPL", "startdt": "2026-01-01", "enddt": "2026-06-30"}` - Example response: `{"found": true, "entity": {"name": "Apple Inc.", "cik": "0000320193", "ticker": "AAPL"}, "window": {"start": "2026-01-01", "end": "2026-06-30"}, "filings_returned": 1, "transactions_returned": 1, "filings": [{"owner": {"name": "Newstead Jennifer", "cik": "0001780525", "role": "officer (SVP, GC and Secretary)"}, "form": "4", "filing": {"accession": "0001140361-26-025622", "filedDate": "2026-06-17", "form4_url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126025622/form4.xml"}, "transactions": [{"securityTitle": "Common Stock", "transactionCode": "S", "transactionLabel": "Open-market or private sale", "acquiredDisposed": "D", "openMarket": true, "shares": 16238, "pricePerShare": 296.42, "transactionValue": 4813267.96, "transactionDate": "2026-06-15", "directOrIndirect": "D", "disclosure_lag_days": 2}]}], "attribution": "SEC EDGAR Form 3/4/5 (US public domain); efts.sec.gov + www.sec.gov"}` - Tags: insider, sec, form-4, form-3, form-5, ownership, insider-trading, directors, officers, 10-percent-owner, disclosure, due-diligence, ticker, cik ### `GET /congress/trades` — $0.02 Track what US House members disclose trading under the STOCK Act, normalized from the House Clerk's Periodic Transaction Report filings so an agent does not download and parse PDFs. Filter by a member surname, by a ticker, or both, over an optional date window; the route reads the House year index, selects the matching e-filed reports, extracts each PDF, and returns clean rows. Every trade carries the member and state-district, the transaction type (buy, sell or exchange), the disclosed dollar amount as a range with numeric low and high bounds, the ticker and asset description, the transaction date, the disclosure date, the disclosure lag in days, and whose account the trade was in (self, spouse, dependent child or joint). Each row cites the filing document id and its PDF URL. To stay fast the route scans the newest matching filings up to a bounded cap and reports a coverage note when results are truncated, so narrow by member or window for exhaustive coverage. House e-filed reports only; paper-scan filings and the Senate are noted as coverage gaps. Amounts are disclosed as ranges, not exact values. US public-domain data; informational, not investment advice. - Query params: `{"member": "Aderholt", "startdt": "2026-01-01", "enddt": "2026-06-30"}` - Example response: `{"found": true, "query": {"ticker": null, "member": "Aderholt", "chamber": "house"}, "window": {"start": "2026-01-01", "end": "2026-06-30"}, "trades_returned": 1, "filings_scanned": 1, "trades": [{"member": "Robert B. Aderholt", "chamber": "house", "state_district": "AL04", "ticker": "GSK", "asset_description": "GSK plc American Depositary Shares", "type": "sell", "owner": "self", "amount_range": "$1,001 - $15,000", "amount_low": 1001, "amount_high": 15000, "transaction_date": "2025-07-28", "disclosure_date": "2025-09-10", "disclosure_lag_days": 44, "filing": {"doc_id": "20032062", "ptr_url": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2025/20032062.pdf"}}], "attribution": "US House Clerk Periodic Transaction Reports (US public domain)"}` - Tags: congress, congressional-trading, stock-act, ptr, house, politician-trades, disclosure, representatives, due-diligence, ticker ### `GET /insider/signal` — $0.04 A premium due-diligence signal that fuses the two disclosure streams for a single ticker into one cited JSON, so an agent does not manually stitch together the insider and congressional routes. Supply a ticker and an optional window; the route pulls the issuer's SEC Form-4 insider transactions and the matching US House STOCK Act trades, then computes a deterministic, data-weighted signal score from 0 to 100 with a bullish, bearish or neutral direction. The response breaks out the drivers as explicit flags: net insider buying in shares and dollars with the count of distinct buyers and sellers; a cluster-buy flag when several different insiders bought in the window, a classic conviction signal; an unusual volume flag on large net buying; congressional activity with buy and sell counts and net direction; and the average disclosure lag. A components block shows how each factor moved the score, and a sources block reports how many filings and trades fed it plus any partial-coverage notes, so the score is transparent and auditable rather than a black box. The scoring weights and thresholds are data-driven. Informational only, not investment advice; built entirely on US public-domain filings. - Query params: `{"ticker": "AAPL", "startdt": "2026-01-01", "enddt": "2026-06-30"}` - Example response: `{"found": true, "entity": {"name": "Apple Inc.", "cik": "0000320193", "ticker": "AAPL"}, "window": {"start": "2026-01-01", "end": "2026-06-30"}, "signal": {"signal_score": 62.0, "direction": "bullish", "window_days": 180, "flags": {"net_insider_buy": {"net_shares": 12000, "net_usd": 3400000, "distinct_buyers": 3, "distinct_sellers": 1}, "cluster_buy": {"detected": true, "distinct_buyers": 3, "threshold": 3}, "unusual_volume": {"detected": true, "net_buy_usd": 3400000}, "congress_activity": {"trades": 2, "buys": 2, "sells": 0, "net": 2}, "avg_disclosure_lag_days": 5.0}}, "sources": {"insider_filings": 6, "congress_trades": 2}, "attribution": ["SEC EDGAR Form 3/4/5 (US public domain)", "US House Clerk PTRs (US public domain)"]}` - Tags: insider-signal, cluster-buy, alpha, due-diligence, sec, form-4, congress, stock-act, signal, screening, ticker ### `GET /insurance/model-law` — $0.03 The flagship of this service and an insurance-compliance moat: one call turns a NAIC model law into a normalized, machine-readable adoption tracker across all 50 states, DC and the US territories. Supply a NAIC model number (for example 22, 170 for Long-Term Care Insurance, 880 for Insurance Data Security, 895 for Annuity Suitability) or a title keyword to resolve one, and the route fetches the authoritative NAIC state-page chart and parses it by column coordinate into a clean table. Each jurisdiction is classified by the NAIC Legal Division's own scheme — MODEL ADOPTION (adopted the current model in a substantially similar manner), PREVIOUS VERSION (an older version enacted), RELATED ACTIVITY (statutes, regulations or bulletins on the same subject that are not a substantially-similar adoption), or NO CURRENT ACTIVITY — together with the exact statutory citation the NAIC lists. The response includes a summary count by classification, the NAIC publication version (for example Fall 2025), a linkback to the source PDF, mandatory NAIC attribution and a not-legal-advice disclaimer. The adoption facts are normalized and cited; the copyrighted NAIC model text is never rehosted. Keyless, cached hard (the charts change roughly once every year or two). Ideal for regulatory-change tracking, multi-state compliance mapping and insurtech due diligence. - Query params: `{"model": "22"}` - Example response: `{"found": true, "query": {"model": "22"}, "model": {"number": 22, "title": "Health Carrier Prescription Drug Benefit Management Model Act"}, "adoption": {"Arizona": {"classification": "RELATED_ACTIVITY", "citation": "ARIZ. REV. STAT. ANN. Sec. 20-1057.02 (2000/2015)."}, "Alabama": {"classification": "NO_CURRENT_ACTIVITY", "citation": null}}, "summary": {"states_total": 56, "by_classification": {"RELATED_ACTIVITY": 20, "NO_CURRENT_ACTIVITY": 30}}, "provenance": {"source_url": "https://content.naic.org/sites/default/files/model-law-state-page-22.pdf", "naic_version": "Fall 2025"}, "attribution": ["Source: NAIC Model Laws (content.naic.org)"]}` - Tags: insurance, regulation, compliance, naic, model-law, adoption, state-law, insurance-regulatory, statute, citation, cited ### `GET /insurance/state-adoption` — $0.03 The inverse of /insurance/model-law: instead of one model across all states, this gives one state across many models. Supply a US state or territory (name or two-letter code) and the route scans the NAIC state-page corpus to report which NAIC model laws that jurisdiction has adopted, each with its NAIC classification (model adoption, previous version or related activity), the statutory citation and a linkback to the source chart. Narrow the scan with an optional model-number list or a topic keyword for full, targeted coverage; without a filter the route scans a bounded default subset of well-known models and reports its coverage honestly in the summary so an agent knows exactly what was and was not checked. Results reuse the same parsed and hard-cached charts as the model-law route, so marginal cost stays near zero. Every response carries provenance, mandatory NAIC attribution and a not-legal-advice disclaimer; adoption facts only, never the copyrighted model text. Useful for building a single state's insurance-regulatory adoption profile. - Query params: `{"state": "New York", "topic": "annuity"}` - Example response: `{"found": true, "state": "New York", "adopted": [{"number": 880, "title": "Insurance Data Security Model Law", "classification": "MODEL_ADOPTION", "citation": "N.Y. INS. LAW Sec. 500 (2017)."}], "summary": {"models_scanned": 8, "adopted_count": 1, "coverage": "filtered"}, "attribution": ["Source: NAIC Model Laws (content.naic.org)"]}` - Tags: insurance, regulation, compliance, naic, state-adoption, model-law, state-law, insurance-regulatory, citation, cited ### `GET /insurance/bulletins` — $0.02 Normalized access to a state insurance regulator's recent guidance — the bulletins, circular letters and notices a Department of Insurance publishes to interpret law and direct carrier conduct, which are otherwise scattered across 50 differently-built state sites with no common feed. Supply a US state (name or two-letter code) and the route fetches that department's listing and returns a clean list of items, each with its title, a linkback url, the issuing year and a document type, filterable by a title keyword and a from-year. Coverage is a curated subset of the states reachable and structured enough to parse reliably (a new state is a one-row adapter); an unsupported or temporarily unreachable state is reported cleanly rather than failing, and errors are surfaced in the response so results are partial-on-failure, never a 500. Every response carries provenance to the department source, attribution and a not-legal-advice disclaimer. Pair it with /insurance/model-law to combine model adoption with the live regulatory guidance layered on top. - Query params: `{"state": "NY", "year_from": 2025}` - Example response: `{"found": true, "state": "New York", "source": {"name": "NY DFS Circular Letters", "host": "www.dfs.ny.gov"}, "count": 40, "returned": 1, "items": [{"title": "Coverage of Immunizations", "url": "https://www.dfs.ny.gov/industry-guidance/circular-letters/cl2025-05", "year": 2025, "type": "circular_letter", "state": "New York"}], "attribution": ["Source: NY DFS Circular Letters (www.dfs.ny.gov)"]}` - Tags: insurance, regulation, bulletin, circular-letter, doi, guidance, state-insurance, compliance, notice, cited ### `GET /netintel/rpki` — $0.008 Validate the origin of an IPv4 route against RPKI, the way a BGP router with origin validation would. This service maintains the full set of Validated ROA Payloads (from the rpki-client project console, published by the Regional Internet Registries) in memory and computes Route-Origin Validation per RFC 6811 itself, rather than reselling a validator API. Supply a public IPv4 prefix and, optionally, the origin autonomous system number; if the origin is omitted it is resolved from the Public-Domain IP-to-ASN table. The response gives the RFC 6811 state (Valid, Invalid or NotFound), how many ROAs cover the prefix, and the covering ROAs with their authorised origin, maximum length and trust anchor. These are routing indicators for infrastructure due-diligence, not authoritative real-time hijack detection, and contain no personal data. - Query params: `{"prefix": "1.1.1.0/24", "origin": "13335"}` - Example response: `{"prefix": "1.1.1.0/24", "origin_asn": 13335, "origin_source": "provided", "roa_status": "valid", "covering_roa_count": 1, "matching_roas": [{"origin_asn": 13335, "prefix_length": 24, "max_length": 24, "trust_anchor": "apnic"}], "reasons": ["A covering ROA authorises this origin AS for this prefix within its max length (RFC 6811 Valid)."], "disclaimer": "Routing indicators for infrastructure due-diligence, NOT authoritative real-time hijack detection (that needs live BGP monitoring) and NOT a statement about any individual. RPKI ROV follows RFC 6811 over a periodic VRP snapshot; allocation is from RIR registry statistics. Contains no personal data. Verify before acting."}` - Tags: rpki, roa, bgp, routing, route-origin-validation, rfc6811, prefix, asn, security ### `GET /netintel/asn` — $0.01 Look up who an autonomous system is and where it came from, fusing two free public sources. The Regional Internet Registry delegated-extended statistics (ARIN, RIPE NCC, APNIC, LACNIC, AFRINIC) give the allocating registry, the country, the allocation date and the registry status. The Public-Domain IP-to-ASN table gives the AS name and how many IPv4 ranges the AS announces, and this service's own datacenter/hosting heuristic classifies the operator. The AS-name enrichment is best-effort: if the IP-to-ASN index is still warming it is omitted rather than guessed. These are registry facts for due-diligence and contain no personal data. - Query params: `{"asn": "13335"}` - Example response: `{"asn": 13335, "as_name": "CLOUDFLARENET", "rir": "arin", "country": "US", "allocated_date": "2010-07-14", "status": "assigned", "is_datacenter": true, "announced_prefix_count": 42, "registry_found": true, "disclaimer": "Routing indicators for infrastructure due-diligence, NOT authoritative real-time hijack detection (that needs live BGP monitoring) and NOT a statement about any individual. RPKI ROV follows RFC 6811 over a periodic VRP snapshot; allocation is from RIR registry statistics. Contains no personal data. Verify before acting."}` - Tags: asn, autonomous-system, rir, allocation, as-name, bgp, routing, whois, datacenter ### `GET /netintel/prefix` — $0.01 One call that fuses everything this service knows about an IPv4 prefix for infrastructure due-diligence. The origin autonomous system and its name come from the Public-Domain IP-to-ASN table; the block's allocation (which Regional Internet Registry issued it, when, to which country and with what status) comes from the RIR delegated-extended statistics; the RPKI Route-Origin Validation status is computed per RFC 6811 from the bulk Validated ROA Payload set against that origin; and the report also counts more-specific ROAs inside the prefix and the less-specific ROAs that cover it. Use it to judge whether a prefix's routing is registry-clean and RPKI-authorised before trusting traffic from it. These are routing indicators, not authoritative real-time hijack detection, and contain no personal data. - Query params: `{"prefix": "8.8.8.0/24"}` - Example response: `{"prefix": "8.8.8.0/24", "origin_asn": 15169, "as_name": "GOOGLE", "is_datacenter": true, "rir_allocation": {"rir": "arin", "country": "US", "allocated_date": "1992-12-01", "status": "allocated"}, "roa_status": "valid", "covering_roa_count": 1, "matching_roas": [{"origin_asn": 15169, "prefix_length": 24, "max_length": 24, "trust_anchor": "arin"}], "more_specific_roa_count": 0, "more_specific_roas": [], "disclaimer": "Routing indicators for infrastructure due-diligence, NOT authoritative real-time hijack detection (that needs live BGP monitoring) and NOT a statement about any individual. RPKI ROV follows RFC 6811 over a periodic VRP snapshot; allocation is from RIR registry statistics. Contains no personal data. Verify before acting."}` - Tags: prefix, ip, bgp, rpki, roa, rir, allocation, routing, origin, due-diligence ### `GET /catalyst/calendar` — $0.03 A one-call, forward-looking regulatory catalyst calendar for a biotech company, built from the authoritative primary source rather than a scraped stock-calendar site. Supply a ticker or CIK; the route runs SEC EDGAR full-text search over the issuer's recent 8-K and 6-K filings for regulatory-event language, fetches the matching documents, and deterministically extracts the dates with a regex/structural parser (no language model). Each emitted event carries its type (PDUFA target action date, FDA advisory committee meeting, Complete Response Letter, priority review or PDUFA extension), the normalized ISO date, the raw date text, the surrounding quote that grounds it, whether it is upcoming or historical, and the filing it came from (accession, form, filed date and EDGAR URL) so any date is traceable. The extraction is precision-first: a date is emitted only when a regulatory keyword co-occurs with it in the same sentence window, so a filing that mentions PDUFA without a nearby date yields nothing rather than a guess. When an issuer has reported several different future dates for the same event across filings, the competing dates are flagged as possibly superseded with the latest-filed one marked canonical. Data is about the issuing company; the SEC source is US public domain. Informational, not investment advice. - Query params: `{"ticker": "SRRK", "forward_only": true}` - Example response: `{"found": true, "entity": {"name": "Scholar Rock Holding Corp", "cik": "0001727196", "ticker": "SRRK"}, "window": {"lookback_days": 270, "as_of": "2026-07-12"}, "forward_only": true, "events_returned": 1, "events": [{"event_type": "pdufa", "label": "PDUFA target action date", "date_iso": "2026-09-30", "raw_date": "September 30", "year_inferred": true, "direction": "upcoming", "quote": "BLA resubmission accepted by FDA; PDUFA action date of September 30th", "filing": {"accn": "0001104659-26-056655", "form": "8-K", "filed": "2026-05-07", "url": "https://www.sec.gov/Archives/edgar/data/1727196/000110465926056655/srrk.htm"}, "entity": {"cik": "0001727196", "ticker": "SRRK", "company": "Scholar Rock Holding Corp"}}], "attribution": "SEC EDGAR (public domain); efts.sec.gov full-text search + www.sec.gov filings."}` - Tags: biotech, pdufa, fda, catalyst, adcomm, advisory-committee, crl, regulatory, sec, 8-k, 6-k, event-driven, calendar, ticker, cik ### `GET /catalyst/upcoming` — $0.05 Scan the whole recent filing stream for upcoming FDA regulatory catalysts instead of querying one issuer at a time. The route runs SEC EDGAR full-text search over the most recent 8-K and 6-K filings matching regulatory-event language, fetches a bounded number of documents newest-first, deterministically extracts the dates and returns those falling inside your forward window, sorted by date. Each event carries its type, normalized ISO date, grounding quote, and the issuer and filing it came from (ticker, company, accession, EDGAR URL), so every entry is traceable to a primary source. Because this fans out across many issuers it is bounded by a hard document cap and served from an aggressive cache; a coverage note discloses the bound, and for exhaustive per-issuer coverage use the calendar route with a ticker. Extraction is precision-first (a date is emitted only on in-sentence co-occurrence with a regulatory keyword). US public-domain SEC data; informational, not investment advice. - Query params: `{"event_types": ["pdufa"], "forward_days": 180}` - Example response: `{"found": true, "window": {"forward_days": 180, "as_of": "2026-07-12", "horizon": "2027-01-08"}, "events_returned": 1, "events": [{"event_type": "pdufa", "label": "PDUFA target action date", "date_iso": "2026-09-30", "raw_date": "September 30", "year_inferred": true, "direction": "upcoming", "quote": "BLA resubmission accepted by FDA; PDUFA action date of September 30th", "filing": {"accn": "0001104659-26-056655", "form": "8-K", "filed": "2026-05-07", "url": "https://www.sec.gov/Archives/edgar/data/1727196/000110465926056655/srrk.htm"}, "entity": {"cik": "0001727196", "ticker": "SRRK", "company": "Scholar Rock Holding Corp"}}], "attribution": "SEC EDGAR (public domain); efts.sec.gov full-text search + www.sec.gov filings."}` - Tags: biotech, pdufa, fda, catalyst, adcomm, regulatory, sec, 8-k, 6-k, event-driven, calendar, market-wide, screening ### `GET /catalyst/filing` — $0.01 Pull all regulatory-decision dates out of a single SEC filing you already have in hand, or the latest relevant one for an issuer. Supply an accession number together with its CIK to read that exact document, or a ticker or CIK to have the route pick the most recent matching 8-K or 6-K. It fetches the filing body, deterministically extracts every PDUFA target action date, advisory committee meeting, Complete Response Letter, priority review and PDUFA extension mentioned, and returns each with its normalized ISO date, raw date text, grounding quote, direction (upcoming or historical) and the filing citation. Extraction is precision-first: only dates co-occurring in-sentence with a regulatory keyword are emitted. This is the cheapest route because it reads one document. US public-domain SEC data; informational, not investment advice. - Query params: `{"accession": "0001104659-26-056655", "cik": "1727196"}` - Example response: `{"found": true, "entity": {"name": "Scholar Rock Holding Corp", "cik": "0001727196", "ticker": "SRRK"}, "filing": {"accn": "0001104659-26-056655", "form": "8-K", "filed": "2026-05-07", "url": "https://www.sec.gov/Archives/edgar/data/1727196/000110465926056655/srrk.htm"}, "events_returned": 1, "events": [{"event_type": "pdufa", "label": "PDUFA target action date", "date_iso": "2026-09-30", "raw_date": "September 30", "year_inferred": true, "direction": "upcoming", "quote": "BLA resubmission accepted by FDA; PDUFA action date of September 30th", "filing": {"accn": "0001104659-26-056655", "form": "8-K", "filed": "2026-05-07", "url": "https://www.sec.gov/Archives/edgar/data/1727196/000110465926056655/srrk.htm"}, "entity": {"cik": "0001727196", "ticker": "SRRK", "company": "Scholar Rock Holding Corp"}}], "attribution": "SEC EDGAR (public domain); efts.sec.gov full-text search + www.sec.gov filings."}` - Tags: biotech, pdufa, fda, catalyst, sec, 8-k, 6-k, filing, accession, regulatory, ticker, cik ### `GET /threat/ioc` — $0.01 One-call, type-agnostic IOC enrichment for an agentic SOC / DFIR workflow — the canonical threat-intelligence enrichment-agent pattern. The buyer is a security agent triaging an alert: it extracts an indicator of compromise and needs a fast, cited reputation verdict. Input: a single indicator of ANY type — an md5, sha1 or sha256 file hash, an IPv4 or IPv6 address, a domain, a URL, or a CVE identifier. The service auto-detects the type by shape (or you can pass an explicit type), routes it to the right enrichment grain, fuses every available source and returns a single normalized JSON object: a verdict (malicious, suspicious, benign_known or unknown), an is_malicious boolean or null, a confidence between 0 and 1, any known malware family, a source count, per-source citations with attribution, tags and human-readable reasons. The keyless core is honest about what it knows: file hashes are enriched with CIRCL hashlookup known-file / whitelist context (a high trust hit means a legitimate distribution or system file — a false-positive reducer, not a malware oracle; a miss means the file is simply unknown, which is not proof of malice); IPs reuse our public-source IP reputation engine (autonomous system, hosting/datacenter classification, Tor exit list and the Spamhaus DROP hijacked-netblock list); domains and URLs reuse our public-source domain-trust engine (registration age, DNS and mail posture, TLS, Certificate Transparency and typosquat analysis); and a CVE id points at our dedicated vulnerability route. Malicious-hash conviction and malware-family attribution are an OPTIONAL upgrade that requires a licensed abuse.ch commercial Auth-Key, off by default. Every grain is best-effort: an unavailable source degrades to a partial result, never an error. Automated reputation indicators for security triage, not a guarantee and not a substitute for full analysis. - Query params: `{"indicator": "8.8.8.8"}` - Example response: `{"indicator": "8.8.8.8", "type": "ipv4", "verdict": "unknown", "is_malicious": null, "confidence": 0.25, "malware_family": [], "source_count": 1, "sources": ["fraud_ip"], "tags": [], "reasons": ["No positive reputation signal from the available sources."], "citations": [{"source": "IP reputation", "attribution": "iptoasn + Spamhaus DROP"}], "disclaimer": "Reputation indicators, not a guarantee."}` - Tags: threat-intelligence, ioc, soc, dfir, malware, reputation, hash, ip, domain, url, cve, enrichment, triage, security ### `GET /threat/hash` — $0.008 Dedicated file-hash reputation grain — the genuinely new keyless value of this service. Give a single md5, sha1 or sha256 hash and get a normalized verdict built from CIRCL hashlookup: whether the file is KNOWN (present in the NSRL Reference Data Set and a broad set of Windows, Ubuntu, Fedora, Kali and other distribution package databases), its hashlookup trust score from 0 to 100, and file metadata including file name, size, mimetype, the contributing source and database. The honest framing matters for triage: this is known-file and whitelist context, a false-positive reducer, NOT a malware-family oracle. A high-trust known file means the artifact is almost certainly a legitimate distribution or operating-system file and the alert can be de-prioritized; a hash that is absent from hashlookup is simply UNKNOWN, which is not by itself evidence that it is malicious — most files are unknown to whitelist sets. Positive malicious conviction and malware-family attribution are an OPTIONAL upgrade that requires a licensed abuse.ch commercial Auth-Key (MalwareBazaar and ThreatFox), off by default. The host is fixed and the call is per-hash with no bulk index. Automated reputation indicators for security triage, not a guarantee. - Query params: `{"hash": "d41d8cd98f00b204e9800998ecf8427e"}` - Example response: `{"hash": "d41d8cd98f00b204e9800998ecf8427e", "algo": "md5", "verdict": "benign_known", "is_malicious": false, "confidence": 0.75, "known_file": true, "hashlookup_trust": 100, "malware_family": [], "sources": ["circl_hashlookup"], "reasons": ["Hash is a KNOWN file in CIRCL hashlookup with high trust."], "disclaimer": "Automated reputation/threat indicators, not a guarantee; for triage."}` - Tags: threat-intelligence, hash, malware, file-reputation, hashlookup, known-file, whitelist, nsrl, soc, dfir, security ### `GET /edu/screen` — $0.008 The light first step of a two-step education-verification flow (screen then verify, mirroring the kyb and sanctions screen-then-detail pattern). Give a college or university name and get back ranked candidates from the US Department of Education DAPIP database, each carrying the DAPIP id, OPEID, IPEDS unit id, state, location type and a whether-accredited flag, so an agent can disambiguate the right institution and then call edu/verify with a precise OPEID or IPEDS id for the full accreditation and diploma-mill verdict. US-only, institution-level. Source is the US Dept of Education DAPIP public-domain dataset. - Query params: `{"name": "Harvard University", "limit": 5}` - Example response: `{"query": "Harvard University", "count": 1, "candidates": [{"dapip_id": "121150", "name": "Harvard University", "opeid": "00215500", "ipeds": "166027", "state": "MA", "is_accredited": true, "match_score": 100.0}], "attribution": ["US Dept of Education, Office of Postsecondary Education (DAPIP)"]}` - Tags: education, accreditation, university, college, screening, diploma-mill, verification, due-diligence, hiring, dapip ### `GET /edu/accreditor` — $0.005 A cheap supporting route and the most direct diploma-mill tell: a fake school invents an official-sounding accreditor. Give an accreditor name and this route fuzzy-matches it against the authoritative list of roughly 77 accrediting agencies recognized by the US Department of Education (the DAPIP agencies feed), returning a recognized flag and, on a match, the agency type (institutional or programmatic), whether it is a Title IV gatekeeper, whether it is currently active and its recognition year. An accreditor that does not match any recognized agency is a strong signal that a claimed accreditation is self-invented. US-only. Source is the US Dept of Education DAPIP public-domain recognized-agencies list. - Query params: `{"name": "Higher Learning Commission"}` - Example response: `{"query": "Higher Learning Commission", "recognized": true, "agency": {"agency_id": "9", "agency_name": "Higher Learning Commission", "type": "institutional", "title_iv_gatekeeper": true, "active": true, "recognition_year": 1952, "match_score": 100.0}, "match_score": 100.0}` - Tags: education, accreditor, accreditation, recognized, diploma-mill, verification, due-diligence, dapip, title-iv ### `GET /edu/verify` — $0.02 One-call institution-accreditation verification for HR, hiring, candidate vetting, enrollment and background-screening agents. Supply one identifier (name, opeid, ipeds or domain), optionally the accreditor the institution claims, and the route resolves the institution in the US Department of Education DAPIP database, fuses in College Scorecard when a key is configured, and returns an is_accredited flag, the list of recognized accrediting agencies with each agency type, accreditation status and dates, and a diploma-mill verdict. The diploma_mill_flag is a confidence heuristic (not a binary verdict) built from deterministic weighted signals: the institution is absent from the federal database, a claimed accreditor does not match any ED-recognized agency (the classic tell), every institutional accreditation record has lapsed, an accreditation was denied, the institution is not operating, or a for-profit is unaccredited. Each fired signal returns its weight and reason so an agent can re-rank with its own policy. The response also reports operating status (operating, closed or unknown), normalized institution facts (ownership, level, state, OPEID, IPEDS), a 0-1 confidence and the cited sources. Partial answers are returned when Scorecard is unavailable rather than failing; an unresolved name returns matched false with an elevated diploma-mill signal. US-only, institution-level accreditation indicators, NOT person-level credential verification and NOT a background check. Sources are US-gov public domain. - Query params: `{"name": "Harvard University"}` - Example response: `{"is_accredited": true, "accreditors": [{"agency_name": "New England Commission of Higher Education", "agency_recognized": true, "accreditation_status": "accredited"}], "diploma_mill_flag": false, "institution_status": "operating", "institution": {"name": "Harvard University", "ownership": "private_nonprofit", "state": "MA", "opeid": "00215500"}, "confidence": 0.9}` - Tags: education, accreditation, diploma-mill, university, verification, due-diligence, hiring, dapip ### `GET /governance/proposals` — $0.01 A normalized feed of a DAO's Snapshot governance proposals for treasury, delegate, monitoring and alert agents that hold governance tokens. Pass a Snapshot `space` (the exact space-id such as uniswapgovernance.eth, lido-snapshot.eth or aave.eth, or a curated protocol alias like `uniswap`) and optionally a `state` (active / pending / closed) and `limit`. Each proposal comes back under one schema: id, title, state, the choice labels, the per-choice scores and scores_total (voting power), the space quorum, the vote count, start/end unix timestamps, author, the snapshot block the ballot is weighed at, a compact strategies summary, and a link-back to Snapshot. One call instead of writing and maintaining Snapshot GraphQL yourself. The upstream host is fixed (Snapshot Hub, keyless) so the caller only ever supplies a space-id/state/limit — SSRF-safe. An empty space returns 422, a total upstream failure is a 502. Every response carries Snapshot attribution and a not-advice disclaimer. Data about proposals only — no vote is cast. - Query params: `{"space": "uniswapgovernance.eth", "limit": 10}` - Example response: `{"space": "uniswapgovernance.eth", "state": "active", "count": 1, "proposals": [{"id": "0xabc", "space": "uniswapgovernance.eth", "title": "[Temp Check] Protocol Fee", "state": "active", "choices": ["For", "Against", "Abstain"], "scores": [735034.4, 0, 0], "scores_total": 735034.4, "quorum": 10000000.0, "votes_count": 74, "start": 1783770071, "end": 1784202071, "strategies_summary": ["uni"], "link": "https://snapshot.box/#/s:uniswapgovernance.eth/proposal/0xabc"}], "attribution": ["Governance data from Snapshot Hub"], "disclaimer": "DAO-governance data, not voting or financial advice."}` - Tags: dao, governance, snapshot, proposals, voting, quorum, delegates, onchain, crypto, web3 ### `GET /governance/proposal` — $0.02 The moat route: one Snapshot proposal enriched with governance semantics computed deterministically (arithmetic and string ops only, no LLM, fully reproducible). Give a `proposal_id` (the 0x… hex id) and get the normalized proposal plus: quorum_progress (scores_total / quorum) and quorum_met; the leading_choice and its share; the margin between the leading and runner-up choice; participation (vote count, total voting power committed, quorum progress); time_remaining_sec until the ballot closes; an outcome_projection that names the CURRENT leader but is labelled HONESTLY as non-final — voting power can still change until close (the way a forecast is not a guarantee); the top voters by voting power with their resolved choice labels (a delegate-participation grain); and a structured digest (title + a truncated body excerpt + the current tally — assembled, never LLM-summarized). The upstream host is fixed; the caller passes only the id — SSRF-safe. A missing proposal returns 422, an upstream failure 502. Every response carries Snapshot attribution and a not-advice disclaimer. Read-only — no vote is cast. - Query params: `{"proposal_id": "0x3fda3c04fa106ad45173011ef4dfa5db2f14cd35c3c3a7a40f067a44cbadd5f4"}` - Example response: `{"proposal": {"id": "0xabc", "title": "[Temp Check] Protocol Fee", "state": "active", "choices": ["For", "Against", "Abstain"], "scores_total": 735034.4, "quorum": 10000000.0}, "semantics": {"quorum_progress": 0.0735, "quorum_met": false, "leading_choice": "For", "leading_share": 1.0, "margin": {"leader": "For", "runner_up": "Against", "score_gap": 735034.4}, "participation": {"votes_count": 74, "voting_power_total": 735034.4}, "time_remaining_sec": 84000, "outcome_projection": {"leading_choice": "For", "quorum_met": false, "is_final": false, "caveat": "current leader, not final"}, "top_voters": [{"voter": "0xB93…", "choice_label": "For", "vp": 457473.9}], "digest": {"title": "[Temp Check] Protocol Fee", "leading_choice": "For"}}, "attribution": ["Governance data from Snapshot Hub"], "disclaimer": "DAO-governance data, not voting or financial advice."}` - Tags: dao, governance, snapshot, proposal, quorum, outcome, delegates, voting-power, crypto, web3 ### `GET /governance/votes` — $0.008 The votes cast on a Snapshot proposal, normalized and ordered by voting power (highest first) — for tracking how delegates and large holders are voting. Pass a `proposal_id` and optional `limit`. Each vote carries the voter address, the raw choice index AND its resolved human label (mapped from the proposal's choices, so 'For'/'Against' not just `1`/`2`), the voting power behind it, any reason text the voter left, and the unix timestamp. Complex ballots (approval / ranked / weighted) keep their raw choice payload and carry a null label rather than being mislabelled. The upstream host is fixed; the caller passes only the id and limit — SSRF-safe. A missing proposal returns 422, an upstream failure 502. Every response carries Snapshot attribution and a not-advice disclaimer. Read-only. - Query params: `{"proposal_id": "0x3fda3c04fa106ad45173011ef4dfa5db2f14cd35c3c3a7a40f067a44cbadd5f4", "limit": 20}` - Example response: `{"proposal_id": "0xabc", "choices": ["For", "Against", "Abstain"], "count": 1, "votes": [{"voter": "0xB93…", "choice": 1, "choice_label": "For", "vp": 457473.9, "reason": null, "created": 1783774987}], "attribution": ["Governance data from Snapshot Hub"], "disclaimer": "DAO-governance data, not voting or financial advice."}` - Tags: dao, governance, snapshot, votes, delegates, voting-power, participation, crypto, web3 ### `GET /governance/space` — $0.008 The configuration and context of a Snapshot space, so a governance agent knows the RULES before it reads or reasons about proposals. Pass a `space` (exact space-id or a curated protocol alias) and get: the display name and about text, the network and governance token symbol, a compact strategies summary (how voting power is computed), the admin and moderator addresses, the voting config (delay, period, quorum, type), the total proposal count and follower count, and a bucketed count of active / pending / closed proposals (active and pending are exact bounded counts; closed is derived from the total). The upstream host is fixed; the caller passes only a space-id — SSRF-safe. A missing space returns 422, an upstream failure 502. Every response carries Snapshot attribution and a not-advice disclaimer. - Query params: `{"space": "uniswapgovernance.eth"}` - Example response: `{"space": {"id": "uniswapgovernance.eth", "name": "Uniswap", "network": "1", "symbol": "UNI", "strategies_summary": ["uni"], "voting": {"delay": null, "period": 432000, "quorum": 10000000.0, "type": null}, "proposals_count": 196, "followers_count": 125264, "counts": {"active": 1, "pending": 0, "closed": 195}}, "attribution": ["Governance data from Snapshot Hub"], "disclaimer": "DAO-governance data, not voting or financial advice."}` - Tags: dao, governance, snapshot, space, quorum, strategies, voting-rules, crypto, web3 ### `GET /crime/location` — $0.03 One-call location crime-risk scoring for insurance-underwriting, real-estate, relocation and travel-safety agents doing due-diligence on a place. Supply an address, a coordinate pair, an FBI ORI code or a state, and the route geocodes the input, resolves the nearest FBI reporting agency, fetches several years of violent-crime and property-crime rates from the public FBI Crime Data Explorer and returns a deterministic verdict: a 0-100 crime_risk_score and a low, medium, high or critical rating. The score is a transparent weighted model over four dimensions: the absolute violent-crime rate, the absolute property-crime rate, how far the local violent rate exceeds the US national baseline, and the violent-rate trend across the reporting years. Higher means more risk. Each fired dimension returns its points, severity and a plain-language reason so an agent can re-rank with its own policy, and the response carries the annualized violent and property series, the national baseline, the resolved agency, its NIBRS participation and the data as-of date. FBI UCR and NIBRS data lags one to two years and agency reporting coverage varies, so the score prefers the latest complete reporting year and reports the as-of date; partial answers are returned when a source is down rather than failing, and a location that resolves to nothing returns verdict not_found. United States only. Aggregate location and agency statistics only, never data about identifiable people; named sex-offender registries are deliberately not surfaced. Output is aggregate public-domain crime statistics for lawful due-diligence, not a consumer report and not for use in violation of the Fair Housing Act, ECOA or FCRA. - Query params: `{"address": "Dover, DE"}` - Example response: `{"verdict": "found", "crime_risk_score": 58, "rating": "high", "agency": {"ori": "DE0010100", "agency_name": "Dover Police Department", "state": "DE"}, "metrics": {"violent_rate_per_100k_yr": 640.2, "violent_rate_year": 2023, "national_violent_rate_per_100k_yr": 370.1, "vs_national_ratio": 1.73}, "signals": [{"dimension": "violent", "points": 31.5, "severity": "critical"}], "as_of": "06/2026", "disclaimer": "Aggregate risk indicators, not a consumer report."}` - Tags: crime, public-safety, location-risk, underwriting, insurance, real-estate, relocation, due-diligence, fbi, ucr, nibrs, risk-score, safety ### `GET /crime/agency` — $0.01 The direct-agency grain behind the crime/location flagship, for agents that already hold an FBI ORI code and want the raw normalized numbers without a geocode step. Give an ORI and, optionally, one of the supported offenses (violent-crime and property-crime aggregates plus homicide, rape, robbery, aggravated assault, burglary, larceny, motor-vehicle theft and arson) and a window of trailing years. The route pulls the agency metadata from the FBI state roster and the monthly offense rates from the FBI Crime Data Explorer, annualizes them into per-100,000 yearly rates, marks which years are complete, computes the trend from the earliest to the latest complete year and reports the data as-of date. Aggregate agency statistics only, never data about people. Partial answers are returned when the source is down; an agency with no data in the window returns an empty rate list. United States only. Aggregate public-domain crime statistics, not a consumer report and not for use in violation of the Fair Housing Act, ECOA or FCRA. - Query params: `{"ori": "DE0010100", "offense": "violent-crime"}` - Example response: `{"verdict": "found", "ori": "DE0010100", "offense": "violent-crime", "agency": {"agency_name": "Dover Police Department", "state": "DE", "is_nibrs": true}, "annual_rates": [{"year": 2023, "rate_per_100k_yr": 640.2, "complete": true}], "trend_pct": 4.1, "as_of": "06/2026"}` - Tags: crime, public-safety, fbi, ucr, nibrs, agency, ori, offense-rates, due-diligence ### `GET /crime/benchmark` — $0.008 The reference-baseline route, the anchor an agent uses to interpret a local crime score. Give one of the supported offenses and, optionally, a 2-letter state code, and the route returns the annualized national rate per 100,000 people by year, plus the state series when a state is supplied, from the public FBI Crime Data Explorer summarized data. Rates are annualized from the monthly reporting and each year is flagged complete or partial, with the data as-of date. Deterministic, no AI, marginal cost near zero. United States only. Aggregate public-domain crime statistics, not a consumer report and not for use in violation of the Fair Housing Act, ECOA or FCRA. - Query params: `{"offense": "violent-crime", "state": "DE"}` - Example response: `{"verdict": "found", "offense": "violent-crime", "scope": "state", "state": "DE", "national": [{"year": 2023, "rate_per_100k_yr": 370.1, "complete": true}], "state_rates": [{"year": 2023, "rate_per_100k_yr": 430.5, "complete": true}], "as_of": "06/2026"}` - Tags: crime, public-safety, fbi, ucr, nibrs, benchmark, baseline, national, state, offense-rates ### `GET /crime/incidents` — $0.02 A fresher, city-level complement to the lagged federal data, for agents that want recent incident density in a supported metro. Give a city portal slug (the supported set is listed at crime/sources) and an optional look-back window in days, and the route runs a keyless aggregation query against that city's open-data portal and returns the count of reported incidents by offense category over the window, sorted by frequency, with the total and the number of distinct categories. This is a density signal, not a raw per-incident dump; portal coverage and category taxonomies differ by city so counts are not directly comparable across cities. The upstream host for each city is fixed in the registry, so the caller only ever supplies a slug, never a URL. Partial answers are returned when a portal is down. Aggregate open-data statistics only, never data about identifiable people. Aggregate public-domain crime statistics, not a consumer report and not for use in violation of the Fair Housing Act, ECOA or FCRA. - Query params: `{"city": "chicago", "days": 365}` - Example response: `{"verdict": "found", "city": "chicago", "window_days": 365, "total_incidents": 258000, "by_type": [{"offense_type": "THEFT", "count": 58000}, {"offense_type": "BATTERY", "count": 41000}], "distinct_types": 30}` - Tags: crime, public-safety, incidents, city, open-data, socrata, density, recent ### `GET /wage/prevailing` — $0.02 The prevailing-wage level determination a US employer must make for an H-1B Labor Condition Application or a PERM permanent-labor certification, exposed as a deterministic API for immigration-law, HR and offer-compliance agents. Resolves the occupation from a SOC code, an O*NET-SOC code or an occupation title in free text, and the work location from an OFLC area code, a county plus state, or a metropolitan-area name. Returns the four statutory wage levels and the average for that area and occupation, each as an hourly rate and annualized at 2080 hours, together with the geographic level of the published wage, the wage year and a citation. These are the ready level wages published by the Department of Labor Office of Foreign Labor Certification from the Bureau of Labor Statistics OES survey, not a percentile recomputation, so they are the legally operative figures and robust to a methodology change. Supply an offered wage to get an offered-versus-prevailing compliance flag. Choose the ACWIA wage population for higher-education and non-profit research employers. Public labor-market data, not legal or immigration advice. See /wage/sources for provenance and the wage year. - Query params: `{"occupation": "software developer", "county": "Santa Clara", "state": "CA", "level": 2}` - Example response: `{"found": true, "soc": "15-1252", "soc_title": "Software Developers", "area": "41940", "area_name": "San Jose-Sunnyvale-Santa Clara, CA", "geo_level": 1, "wage_source": "all_industries", "wage_year": "2025-26", "levels": {"1": {"hourly": 61.23, "annual": 127358.4}, "2": {"hourly": 75.1, "annual": 156208.0}}, "average": {"hourly": 82.5, "annual": 171600.0}, "compliance": {"meets_level": 2, "below_prevailing": false}, "attribution": "DOL OFLC Wage Files + BLS OES (public domain)"}` - Tags: prevailing-wage, labor, wage, soc, onet, h1b, perm, lca, immigration, dol, compensation ### `GET /wage/occupations` — $0.005 The cheap first step to map a job title to its Standard Occupational Classification code before requesting a prevailing-wage determination. Searches the OFLC occupation dictionary (BLS OES titles) and returns ranked candidate occupations, each with the SOC code, official title and a relevance score, so an agent can confirm the occupation before paying for the full wage lookup. Public occupational-classification data. - Query params: `{"occupation": "registered nurse", "limit": 5}` - Example response: `{"count": 1, "candidates": [{"soc": "29-1141", "title": "Registered Nurses", "score": 97.5}], "attribution": "DOL OFLC Wage Files + BLS OES (public domain)"}` - Tags: soc, occupation, onet, wage, labor, lookup, disambiguation ### `GET /wage/areas` — $0.005 The cheap first step to map a US location to its OFLC wage area before requesting a prevailing-wage determination. Accepts a county together with a two-letter state, or a city or metropolitan-area name, and returns ranked candidate areas, each with the OFLC area code, area name and state. Use the returned area code with /wage/prevailing. Public geographic-crosswalk data. - Query params: `{"county": "Travis", "state": "TX"}` - Example response: `{"count": 1, "candidates": [{"area": "12420", "area_name": "Austin-Round Rock, TX", "state": "TX"}], "attribution": "DOL OFLC Wage Files + BLS OES (public domain)"}` - Tags: area, location, county, msa, wage, labor, geography, lookup ### `GET /employer/laborcert` — $0.03 The employer-side counterpart to the prevailing-wage routes: an aggregate labor-certification track record for a US employer from the public Office of Foreign Labor Certification case-disclosure data, for immigration-law, recruiting and compliance agents. Query by employer name, or by SOC occupation, worksite state and federal fiscal year. Returns the number of applications by program, the certified, denied and withdrawn shares, the offered-wage range and average, the most common occupations, and a flag for any offered wages below the prevailing wage. Employer names are published by the Department of Labor; this is historical filing data, not a prediction of any future determination and not legal or immigration advice. Where the disclosure index is not built on an instance the response reports available false; see /wage/sources for status. - Query params: `{"employer": "Acme Corp"}` - Example response: `{"available": true, "found": true, "total_applications": 128, "by_status": {"certified": 120, "denied": 3, "withdrawn": 5}, "rates": {"certified": 0.9375, "denied": 0.0234}, "below_prevailing_flag": false, "attribution": "DOL OFLC Wage Files + BLS OES (public domain)"}` - Tags: employer, h1b, lca, perm, labor-certification, disclosure, immigration, dol, track-record ### `GET /fda/screen` — $0.008 The light first step of a two-step FDA GMP vetting flow (screen then facility, mirroring the OSHA and freight screen-then-verify pattern). Give a manufacturer or firm name and get back ranked facility candidates grouped from the public FDA Data Dashboard inspection-classifications dataset, each carrying its FDA establishment identifier (FEI number), city, state and country, the FDA product types it makes, how many inspections are on record, and its latest and worst inspection classification (No Action Indicated, Voluntary Action Indicated or Official Action Indicated). Optional state, country and product-type filters narrow the set; foreign manufacturers (India, China, the EU) are covered because the FEI number is global. Ranking is exact then prefix then substring on the normalized name, more-inspected and more-recent first, deduplicated by FEI number. An agent uses this to pick the right establishment and then calls fda/facility for the full deterministic compliance-risk dossier. Returns an empty list when nothing matches and a partial result when a source is down rather than failing; an empty name is a 400. Business and establishment metadata only. The FDA Data Dashboard API is keyed but free; if the server has no key configured the response reports availability false rather than failing. Source is the FDA Data Dashboard, US FDA public domain. Risk indicators, not legal or regulatory advice. - Query params: `{"name": "Sun Pharmaceutical", "product": "Drugs"}` - Example response: `{"query": "SUN PHARMACEUTICAL", "count": 1, "candidates": [{"fei": "3002807820", "legal_name": "Sun Pharmaceutical Industries Ltd", "country": "India", "product_types": ["Drugs"], "inspection_count": 4, "latest_classification": "Official Action Indicated"}], "attribution": ["FDA Data Dashboard (US FDA; US-gov public domain)."]}` - Tags: fda, gmp, manufacturer, establishment, inspection, compliance, due-diligence, supplier-qualification, supply-chain, pharma, drug, device, search ### `GET /fda/facility` — $0.04 One-call FDA GMP vetting for procurement, supplier-qualification, ESG, supply-chain and M&A due-diligence agents screening an FDA-regulated manufacturer of drugs, devices, biologics, food, cosmetics or tobacco. Give an FDA FEI number or a firm name (optionally narrowed by state, country or product type) and the route resolves the best-matching establishment and fuses FOUR public FDA enforcement streams under one query: the inspection-classification history (Official, Voluntary or No Action Indicated, plus the trend and the latest outcome), compliance actions (warning letters, injunctions, seizures and consent decrees), Form-483 inspection observations with their cited CFR clause and short description, and import refusals at the US border. It returns a deterministic compliance-risk verdict: a 0-100 compliance_risk_score and a low, medium, high or critical rating. The score is a transparent weighted model across dimensions: Official Action Indicated classifications, judicial enforcement, warning letters, the volume and severity of Form-483 observations (data-integrity findings weighted heaviest), import refusals, how recent the adverse activity is, the inspection trend and the depth of the enforcement history. Each fired dimension returns its points, severity and a human-readable reason so an agent can re-rank with its own policy, and the response cites the underlying FDA firm-profile record links. Foreign manufacturers are covered because the FEI number is global. Partial answers are returned when a stream is down rather than failing; nothing found returns verdict not_found. This describes the manufacturer's regulatory standing, not the safety of any specific product. FDA data lags: a classification is posted only after an inspection closes and open cases may lack citation data, so verify inspection status and warning-letter close-out directly with FDA. The FDA Data Dashboard API is keyed but free; if the server has no key configured the response reports availability false rather than failing. Source is the FDA Data Dashboard, US FDA public domain. Risk indicators, not legal, regulatory, medical or investment advice. - Query params: `{"fei": "3002807820"}` - Example response: `{"verdict": "found", "compliance_risk_score": 88, "rating": "critical", "trend": "worsening", "facility": {"fei": "3002807820", "legal_name": "Sun Pharmaceutical Industries Ltd", "country": "India"}, "aggregates": {"oai_count": 2, "warning_letter_count": 1, "import_refusal_count": 5}, "signals": [{"dimension": "oai_classification", "points": 30.0, "severity": "critical"}], "rating_note": "0-100, higher = more risk"}` - Tags: fda, gmp, manufacturer, inspection, warning-letter, form-483, import-refusal, compliance, risk-score, due-diligence, supplier-qualification, supply-chain, esg, pharma, drug, device ### `GET /fda/inspections` — $0.02 The inspection face of an FDA establishment's GMP record, for agents that want the raw inspection trail behind a compliance verdict. Give an FDA FEI number or a firm name (optionally narrowed by state, country or product type) and the route returns the establishment's inspection-classification history from the public FDA Data Dashboard — each inspection's outcome (Official, Voluntary or No Action Indicated), its date, product type and project area — together with the trend (worsening, improving or stable) and every Form-483 observation citation on record, each with its cited CFR clause, program area and short description and a flag marking data-integrity findings. A compact summary counts the inspections, the Official Action Indicated outcomes, the total Form-483 citations and the data-integrity subset. Foreign manufacturers are covered because the FEI number is global. Partial answers are returned when a stream is down rather than failing; nothing found returns verdict not_found. FDA data lags: a classification is posted only after an inspection closes and open cases may lack citation data. The FDA Data Dashboard API is keyed but free; without a configured key the response reports availability false rather than failing. Source is the FDA Data Dashboard, US FDA public domain. Risk indicators, not legal or regulatory advice. - Query params: `{"fei": "3002807820"}` - Example response: `{"verdict": "found", "facility": {"fei": "3002807820", "legal_name": "Sun Pharmaceutical Industries Ltd"}, "trend": "worsening", "summary": {"inspection_count": 4, "oai_count": 2, "form_483_citation_count": 6, "data_integrity_citation_count": 3}, "form_483_citations": [{"act_cfr_number": "21 CFR 211.194", "short_description": "Laboratory records", "data_integrity": true}], "disclaimer": "Risk indicators, not legal or regulatory advice."}` - Tags: fda, gmp, inspection, classification, form-483, citation, manufacturer, compliance, due-diligence, pharma, drug, device ### `GET /fda/enforcement` — $0.02 The enforcement face of an FDA establishment's record, for agents that want the formal FDA compliance actions and border activity behind a verdict. Give an FDA FEI number or a firm name (optionally narrowed by state, country or product type) and the route returns every compliance action FDA took against the establishment from the public FDA Data Dashboard — warning letters, injunctions, seizures and consent decrees, each with its date, issuing center and product type — together with the firm's import refusals at the US border, each with its refusal date, product code and description, refusal charges and country. A compact summary counts the warning letters, the judicial-enforcement actions, all compliance actions and the import refusals. Foreign manufacturers are covered because the FEI number is global. Partial answers are returned when a stream is down rather than failing; nothing found returns verdict not_found. The FDA Data Dashboard API is keyed but free; without a configured key the response reports availability false rather than failing. Source is the FDA Data Dashboard, US FDA public domain. Risk indicators, not legal or regulatory advice. - Query params: `{"fei": "3002807820"}` - Example response: `{"verdict": "found", "facility": {"fei": "3002807820", "legal_name": "Sun Pharmaceutical Industries Ltd"}, "summary": {"warning_letter_count": 1, "critical_action_count": 1, "compliance_action_count": 2, "import_refusal_count": 5}, "compliance_actions": [{"action_type": "Warning Letter", "action_taken_date": "2023-12-01", "center": "CDER"}], "import_refusals": [{"refusal_date": "2024-02-14", "product_code": "62LDT", "refusal_charges": "CGMP"}], "disclaimer": "Risk indicators, not legal or regulatory advice."}` - Tags: fda, enforcement, warning-letter, injunction, seizure, import-refusal, manufacturer, compliance, due-diligence, supply-chain, pharma, drug, device ### `GET /aircraft/registration` — $0.01 The light first step of a two-step aircraft asset-vetting flow (registration then diligence, mirroring the OSHA and freight screen-then-verify pattern). Give a US tail number (N-number) or a serial number and get back a normalized record from the public FAA Aircraft Registry Inquiry: the registration status (valid, expired, reserved, sale-reported), the registered owner name and location, the manufacturer, model and year, the serial number, the aircraft and engine type, the airworthiness date, classification and category, the type certificate holder and data sheet, the fractional-ownership and dealer flags and the Mode-S code. A serial number resolves through the FAA serial search to the matching tail and then to the full record. A reserved N-number returns verdict reserved with the reservation detail and no aircraft; nothing found returns verdict not_found; a source hiccup returns a partial result rather than failing. Recorded liens and the full ownership chain are not available free by tail number, so lien_status is not_available_free. Registry metadata only. Source is the FAA Aircraft Registry, US DOT public domain. A diligence signal, not a certified title search and not legal advice. - Query params: `{"tail": "N801NN"}` - Example response: `{"verdict": "found", "record": {"n_number": "N801NN", "record_type": "aircraft", "status_label": "Valid", "manufacturer_name": "BOEING", "model": "737-823", "mfr_year": "2009", "serial_number": "29565", "registered_owner": {"name": "BANK OF UTAH TRUSTEE", "state": "UTAH"}, "expiration_date": "07/31/2027"}, "lien_status": "not_available_free", "attribution": ["FAA Aircraft Registry Inquiry (US DOT/FAA; US-gov public domain)."]}` - Tags: aircraft, faa, n-number, tail-number, registration, aviation, asset, title, due-diligence, ownership, airworthiness, lookup ### `GET /aircraft/diligence` — $0.04 One-call title and airworthiness vetting for aircraft-buying, aviation-lending, insurance-underwriting and escrow agents diligencing a US aircraft before a deal. Give a tail number (N-number) or serial and the route resolves the aircraft in the public FAA Aircraft Registry and returns a deterministic verdict: a 0-100 title_risk_score, a low, medium, high or critical rating and a clear_to_transact flag. The score is a transparent weighted model across registry dimensions: the registration status is not valid, a sale has been reported, the registration is expired, the registration expires soon, no airworthiness date is on record, an airworthiness exception code applies, fractional ownership is flagged and dealer registration is present. Each fired dimension returns its points, severity and a human-readable reason so an agent can re-rank with its own policy, and the response cites the registry fields behind the score. Recorded liens and the full ownership and conveyance chain are not available free by tail number, so lien_status is not_available_free and the verdict is honestly framed: for an authoritative clear-title determination order an FAA certified abstract of title or a commercial aircraft title search. A reserved N-number returns verdict reserved with no asset to transact; nothing found returns verdict not_found; a source hiccup returns a partial result rather than failing. The FAA registry updates on a lag, so confirm current status directly with the FAA. Source is the FAA Aircraft Registry, US DOT public domain. A diligence signal, not a certified title search and not legal advice. - Query params: `{"tail": "N801NN"}` - Example response: `{"verdict": "found", "title_risk_score": 0, "rating": "low", "clear_to_transact": true, "aircraft": {"n_number": "N801NN", "registration_status": "Valid", "manufacturer_name": "BOEING", "model": "737-823", "registered_owner": "BANK OF UTAH TRUSTEE"}, "signals": [], "reasons": ["No adverse registry title indicators found."], "lien_status": "not_available_free", "disclaimer": "A diligence signal, not a certified title search."}` - Tags: aircraft, faa, title, title-risk, risk-score, airworthiness, aviation-lending, aircraft-purchase, insurance-underwriting, escrow, asset-verification, due-diligence, clear-title, n-number ### `GET /aircraft/owner` — $0.02 Fleet lookup by owner for asset-verification, lending and underwriting agents mapping the aircraft an owner or operator holds. Give a registered owner or company name and the route runs the public FAA Aircraft Registry name search and returns the matching aircraft, each carrying its tail number (N-number), serial number, manufacturer and model and the owner name on record, capped by an optional limit with a truncated flag when more exist. Use it to enumerate a fleet and then call aircraft/registration or aircraft/diligence per tail for the full record and title verdict. Owner-name matching is exactly what the FAA name search returns; a common name can match many owners, so confirm the tail before relying on a row. Returns an empty list when nothing matches and a partial result when the source is down rather than failing. Registry metadata only. Source is the FAA Aircraft Registry, US DOT public domain. A diligence signal, not a certified title search and not legal advice. - Query params: `{"name": "Bank Of Utah Trustee"}` - Example response: `{"query": "BANK OF UTAH TRUSTEE", "count": 1, "total_found": 1, "aircraft": [{"n_number": "N100CM", "serial_number": "31T-8020073", "manufacturer_model": "PIPER PA-31T", "owner": "BANK OF UTAH TRUSTEE"}], "attribution": ["FAA Aircraft Registry Inquiry (US DOT/FAA; US-gov public domain)."]}` - Tags: aircraft, faa, owner, fleet, operator, aviation, registration, asset-verification, due-diligence, n-number, ownership, search ### `GET /bankhealth/screen` — $0.008 The light first step of a two-step bank-health vetting flow (screen then verdict, mirroring the osha and adviser screen-then-verify pattern). Give a bank or institution name and get back ranked candidate US FDIC-insured depository institutions resolved from the public FDIC BankFind Suite, each carrying its FDIC certificate number (CERT, the stable join key), whether the charter is currently active, its charter class, its city and state and its headline total assets, total deposits and return on assets and equity. An optional 2-letter state code narrows the set; candidates sharing a CERT are deduplicated. An agent uses this to pick the right institution and its CERT, then calls bankhealth/verdict for the full deterministic health verdict. Returns an empty list when nothing matches and a partial result when the source is down rather than failing; an empty name is a 400. US FDIC-insured banks only (credit unions are deferred NCUA coverage). Source is the FDIC BankFind Suite, US-gov public domain. Bank-health indicators, not financial or deposit-safety advice. - Query params: `{"name": "JPMorgan", "state": "OH"}` - Example response: `{"query": "JPMorgan", "count": 1, "candidates": [{"name": "JPMorgan Chase Bank, National Association", "cert": 628, "active": true, "charter_class": "N", "city": "Columbus", "state": "OH", "total_assets_usd": 4016571000, "total_deposits_usd": 2787994000, "roa": 1.44, "roe": 16.64}], "attribution": ["FDIC BankFind Suite API (US-gov public domain)."]}` - Tags: bank, bank-health, fdic, depository, counterparty-risk, treasury, financial-institution, resolve, search, due-diligence, cert ### `GET /bankhealth/verdict` — $0.03 One-call financial-health vetting for treasury, counterparty-risk, BaaS and fintech-partner selection and M&A due-diligence agents deciding whether a US depository institution is a sound place to hold or route funds. Give a bank name or, better, its FDIC certificate number and the route resolves the institution in the public FDIC BankFind Suite, fetches its most-recent quarterly call reports and returns a deterministic health verdict: a 0-100 health_score where HIGHER means HEALTHIER (the inverse polarity of the risk scores) and an A to F letter grade. The score is a transparent weighted model across dimensions: capital adequacy (total risk-based capital and tier-1 leverage ratios versus the well-capitalized regulatory thresholds), asset quality (a Texas-ratio proxy of problem assets over capital plus reserves), deposit stability (uninsured-deposit exposure, the dynamic behind the 2023 regional-bank runs), profitability (return on assets) and its trend over recent quarters. Each fired dimension returns its points, fraction and a human-readable reason, and every figure is grounded to the reporting date (as_of / REPDTE). Inactive or failed charters are flagged and capped low. These are DERIVED PROXIES computed from the public call-report, explicitly NOT the confidential CAMELS supervisory rating and not a resale of a paid bank rating. Credit unions and enforcement-action and peer-benchmark datasets are registered as deferred coverage a future extension will enable. Partial answers are returned when a source is down rather than failing; nothing found returns verdict not_found. US FDIC-insured banks only. Source is the FDIC BankFind Suite, US-gov public domain. Bank-health indicators, not financial, investment or deposit-safety advice. - Query params: `{"cert": 628}` - Example response: `{"verdict": "found", "health_score": 86, "letter_grade": "A", "as_of": "2026-03-31", "institution": {"name": "JPMorgan Chase Bank, N.A.", "cert": 628, "active": true, "state": "OH"}, "derived_metrics": {"total_rbc_ratio": {"value": 16.25, "fraction": 1.0}}, "signals": [{"dimension": "capital_adequacy", "points": 30.0}], "disclaimer": "Not advice; derived proxies, not CAMELS."}` - Tags: bank, bank-health, fdic, depository, counterparty-risk, treasury, capital-ratio, texas-ratio, uninsured-deposits, health-score, solvency, due-diligence, financial-institution ### `GET /bankhealth/failures` — $0.008 Query the public FDIC failed-bank list (every FDIC-insured bank and thrift failure and assisted acquisition on record) by bank name, FDIC certificate number, 2-letter state or year, or a combination. A name is resolved to candidate FDIC certificate numbers via the institutions register and then joined to the failures list by that certificate number, because the raw name filter on the failures endpoint is unreliable. Each returned record carries the failed institution's name and certificate number, the failure date and year, its city and state, the resolution type and the deposits, assets and estimated resolution cost at the time of failure. Useful as due-diligence context alongside bankhealth/verdict and for studying resolution history; the list includes the 2023 regional-bank failures (Silicon Valley Bank, Signature Bank, First Republic Bank). Returns an empty list when nothing matches and a partial result when the source is down rather than failing; a call with no filter at all is a 400. US FDIC-insured banks only. Source is the FDIC BankFind Suite failures dataset, US-gov public domain. Historical record, not financial advice. - Query params: `{"year": 2023, "state": "CA"}` - Example response: `{"query": {"year": 2023, "state": "CA"}, "count": 2, "failures": [{"name": "SILICON VALLEY BANK", "cert": 24735, "fail_date": "3/10/2023", "city_state": "SANTA CLARA, CA", "resolution_type": "FAILURE", "deposits_at_failure_usd_thousands": 175378000, "assets_at_failure_usd_thousands": 209026000}], "attribution": ["FDIC BankFind Suite API (US-gov public domain)."]}` - Tags: bank, bank-failure, fdic, depository, counterparty-risk, assisted-acquisition, resolution, due-diligence, history, financial-institution ### `GET /stablecoin/list` — $0.005 The discovery grain for stablecoin intelligence. It returns the universe of stablecoins DefiLlama tracks (hundreds of assets), each normalized to a compact record: ticker symbol, full name, the DefiLlama id used as the join key by the peg, supply and profile routes, the peg type, the collateral mechanism (fiat-backed, crypto-backed or algorithmic), total circulating supply across all chains, the latest price, and the list of chains the token is deployed on. Results are ranked by circulating supply so the largest, most liquid dollar tokens come first. Narrow the set with the collateral-mechanism filter to compare fiat-backed against algorithmic designs, or with the chain filter to see which dollars are available where. Because coverage is data-driven, a newly listed stablecoin is picked up automatically. Every response is attributed to the open-data source. An upstream failure returns 502, never a 500. The score and status fields are derived signals, not financial advice. - Query params: `{"pegMechanism": "fiat-backed", "limit": 5}` - Example response: `{"count": 1, "total_matched": 1, "stablecoins": [{"symbol": "USDC", "name": "USD Coin", "llama_id": "2", "pegType": "peggedUSD", "pegMechanism": "fiat-backed", "circulating_total": 73470281562.2, "price": 0.9998, "chains": ["Ethereum", "Base"]}], "attribution": ["Source: DefiLlama Stablecoins (open data)"]}` - Tags: stablecoin, stablecoins, list, catalog, peg, collateral, defillama, usdc, usdt, dai, market-cap, crypto ### `GET /stablecoin/profile` — $0.02 The flagship due-diligence object an agent reads before it holds, accepts or parks a given dollar token. Give a ticker such as USDC, or a contract address together with its chain, and it returns one fused profile. Identity resolves the issuer, peg type and collateral mechanism with a plain-language note on what backs the token. The peg facet returns the current price, the absolute deviation from the one-dollar peg, and a coarse depeg status of stable, watch or depegged. The supply facet returns total circulating supply, the per-chain breakdown, and an INDEPENDENT crypto-native cross-check that reads the ERC-20 totalSupply of the curated contract straight from chain state and flags any divergence from the aggregator figure. Known contract addresses per chain are listed. A proof-of-reserve availability flag is carried for a phase-two reserve-attestation feed. Finally a deterministic depeg-risk score from 0 to 100, with a low, medium, high or critical rating and a transparent per-signal reasons array, combines the collateral mechanism, the size of the peg deviation and any supply divergence. The score is computed by fixed math with no model in the loop and is a derived signal, explicitly not financial advice. Unknown token returns 404, an upstream failure 502, never a 500. - Query params: `{"symbol": "USDC"}` - Example response: `{"identity": {"symbol": "USDC", "name": "USD Coin", "llama_id": "2", "pegType": "peggedUSD", "collateral_mechanism": "fiat-backed"}, "peg": {"price": 0.9998, "peg_deviation": 0.0002, "depeg_status": "stable"}, "supply": {"circulating_total": 73470281562.2, "chain_count": 20, "divergence_flag": false}, "depeg_risk_score": 10, "rating": "low", "citations": ["Source: DefiLlama Stablecoins (open data)"]}` - Tags: stablecoin, depeg, risk-score, peg, reserves, collateral, supply, on-chain, verification, usdc, usdt, dai, profile, crypto ### `GET /stablecoin/peg` — $0.008 A focused, low-cost peg check for a single dollar token, ideal for polling. It resolves the token by ticker or DefiLlama id and returns the current price, the absolute deviation from the one-dollar peg, and a coarse status label of stable when within a tight band, watch when drifting, and depegged when the deviation is large. It also names the collateral mechanism with a short note so an agent understands the backing at a glance. Values are attributed to the open-data source. Unknown token returns 404, an upstream failure 502, never a 500. The status is a derived signal, not financial advice. - Query params: `{"symbol": "USDT"}` - Example response: `{"symbol": "USDT", "name": "Tether", "llama_id": "1", "peg": {"pegType": "peggedUSD", "mechanism": "fiat-backed", "price": 1.0003, "peg_deviation": 0.0003, "depeg_status": "stable"}, "attribution": ["Source: DefiLlama Stablecoins (open data)"]}` - Tags: stablecoin, peg, depeg, price, deviation, monitor, usdc, usdt, dai, crypto ### `GET /stablecoin/supply` — $0.008 Where the dollars actually live, plus an independent sanity check. It returns the total circulating supply of the stablecoin and the per-chain breakdown from the aggregator, then reads the ERC-20 totalSupply of the curated contract for a chosen chain directly from chain state and compares the two. When the on-chain figure and the aggregator figure disagree beyond a tolerance a divergence flag is raised, which is a useful early signal of stale data or an unexpected mint or bridge event. The on-chain cross-check is best-effort: for a token without a curated contract, or when an RPC endpoint is unreachable, the verification reports availability false and the aggregator supply is still returned. Every response is attributed to the open-data source and, when used, to public on-chain state. Unknown token returns 404, an upstream failure 502, never a 500. - Query params: `{"symbol": "DAI"}` - Example response: `{"symbol": "DAI", "name": "Dai", "llama_id": "5", "supply": {"circulating_total": 5300000000.0, "chain_count": 12, "per_chain": {"Ethereum": 4200000000.0}}, "onchain_verification": {"available": true, "chain": "Ethereum", "onchain_total_supply": 4200000001.0, "divergence_flag": false}, "divergence_flag": false, "attribution": ["Source: DefiLlama Stablecoins (open data)"]}` - Tags: stablecoin, supply, circulating, per-chain, on-chain, totalsupply, verification, divergence, usdc, usdt, dai, crypto ### `GET /holdings/manager` — $0.03 One call returns a clean, consolidated Form 13F portfolio for an institutional investment manager straight from the authoritative SEC source, so an agent does not fetch and parse raw 13F XML. Supply a CIK (authoritative) or a manager name (best-effort resolve, with an honest ask for the CIK when the name is not in the SEC map), and an optional quarter period-end; the route reads the SEC submissions index, selects that quarter's 13F-HR filing (the latest amendment for the period wins), parses the information table, and consolidates the many per-sub-manager rows into one position per security. Each position carries the issuer name, CUSIP, resolved ticker with a match quality of exact, fuzzy or none, share count, value in whole US dollars, percent of portfolio, share or principal type, investment discretion and the sole, shared and none voting split. The response adds the portfolio total, the top positions by value, a concentration block with the top-ten percent and a Herfindahl index, and a spot Bitcoin and Ether ETF exposure slice that flags funds like IBIT, FBTC, GBTC, ARKB and ETHA with their value and asset bucket, the crypto-adoption signal that on-chain trackers miss. Every response cites its accession, period-end and EDGAR index URL and reports the disclosure lag as stale days. Form 13F covers long 13(f) securities only, is filed up to 45 days after quarter-end, and is informational, not investment advice. - Query params: `{"cik": "1067983"}` - Example response: `{"found": true, "manager": {"name": "Berkshire Hathaway Inc", "cik": "0001067983"}, "quarter": "2026-03-31", "portfolioValueUsd": 263095703570, "positions": 40, "concentration": {"top10Pct": 84.1, "hhi": 1120.4, "positions": 40}, "cryptoEtfExposure": {"holds_crypto_etf": false, "totalValueUsd": 0, "pctOfPortfolio": 0, "byAsset": {}, "holdings": []}, "top": [{"issuer": "APPLE INC", "cusip": "037833100", "class": "COM", "ticker": "AAPL", "match": "exact", "valueUsd": 66000000000, "shares": 300000000, "pctOfPortfolio": 25.09, "investmentDiscretion": "DFND", "voting": {"sole": 300000000, "shared": 0, "none": 0}}], "stale_days": 45, "filing": {"accession": "0001193125-26-226661", "form": "13F-HR", "filedDate": "2026-05-15", "periodOfReport": "2026-03-31"}, "attribution": "SEC EDGAR / Form 13F (US public domain); data.sec.gov + www.sec.gov"}` - Tags: 13f, institutional, holdings, ownership, sec, hedge-fund, portfolio, concentration, bitcoin-etf, ethereum-etf, crypto-etf, cusip, manager, due-diligence ### `GET /holdings/changes` — $0.05 A real fusion product: the deterministic quarter-over-quarter diff of a manager's Form 13F portfolio, so an agent does not download two filings and reconcile them by hand. Supply a CIK or name and an optional quarter; the route loads that quarter's 13F-HR and the immediately preceding quarter's filing (latest amendment per period), consolidates each into positions, and matches them by CUSIP. Every security is bucketed as new, added to, reduced, sold out or unchanged, and each changed position reports its current and previous shares, the share delta and percent share change, and the current, previous and delta value in US dollars. A summary block counts each bucket and computes the added value, the reduced value and the net flow, the manager's net buying or selling in dollars for the quarter, with crypto-ETF positions tagged so an agent can see a fund initiating or trimming spot Bitcoin or Ether ETF exposure. Both filings are cited by accession and period. Form 13F covers long 13(f) securities only, is lagged up to 45 days, and is informational, not investment advice. - Query params: `{"cik": "1067983"}` - Example response: `{"found": true, "manager": {"name": "Berkshire Hathaway Inc", "cik": "0001067983"}, "quarter": "2026-03-31", "prev_quarter": "2025-12-31", "summary": {"new": 2, "added": 3, "reduced": 5, "sold_out": 1, "unchanged": 29, "added_value_usd": 4200000000, "reduced_value_usd": 1800000000, "net_flow_usd": 2400000000}, "changes": {"new": [{"issuer": "APPLE INC", "cusip": "037833100", "ticker": "AAPL", "shares": 300000000, "prevShares": 0, "deltaShares": 300000000, "deltaValueUsd": 66000000000}]}, "stale_days": 45, "attribution": "SEC EDGAR / Form 13F (US public domain); data.sec.gov + www.sec.gov"}` - Tags: 13f, institutional, holdings, changes, quarter-over-quarter, flow, buys, sells, sec, hedge-fund, portfolio, crypto-etf, cusip ### `GET /holdings/filing` — $0.01 The cheap granular route: one Form 13F filing turned into clean JSON. Supply an accession together with its filer CIK for a direct pull, or a CIK or name with an optional quarter to let the route select the filing. It parses the cover page for the filing manager, period, report type and amendment flag, and the information table into consolidated positions, one per security, each with issuer, CUSIP, resolved ticker and match quality, share count, value in whole US dollars, percent of portfolio, share or principal type, investment discretion and the sole, shared and none voting split. The response includes the portfolio total, a concentration block and the crypto-ETF exposure slice, all cited to the accession, period and EDGAR URL. Form 13F covers long 13(f) securities only, is lagged up to 45 days, and is informational, not investment advice. - Query params: `{"cik": "1067983", "accession": "0001193125-26-226661"}` - Example response: `{"found": true, "manager": {"name": "Berkshire Hathaway Inc", "cik": "0001067983"}, "quarter": "2026-03-31", "portfolioValueUsd": 263095703570, "positions": 40, "holdings": [{"issuer": "APPLE INC", "cusip": "037833100", "class": "COM", "ticker": "AAPL", "match": "exact", "valueUsd": 66000000000, "shares": 300000000, "pctOfPortfolio": 25.09}], "attribution": "SEC EDGAR / Form 13F (US public domain); data.sec.gov + www.sec.gov"}` - Tags: 13f, institutional, holdings, filing, information-table, sec, portfolio, cusip, accession ### `GET /holdings/security` — $0.06 The reverse of the manager routes: given a security by ticker or CUSIP and a quarter, return every institutional manager that reported holding it on Form 13F, with share and dollar totals, the concentration of institutional ownership, and the quarter-over-quarter institutional flow, the full list of holders of funds like IBIT or FBTC. Building this needs a reverse index of the per-quarter Form 13F structured dataset, which is too large to hold in memory on this small deployment, so the route is deferred behind a configuration flag and returns an availability status with instructions rather than an error. Until it is enabled, a manager's spot Bitcoin and Ether ETF exposure and its quarter-over-quarter change are available through the holdings manager and holdings changes routes. Form 13F covers long 13(f) securities only and is informational, not investment advice. - Query params: `{"ticker": "IBIT"}` - Example response: `{"available": false, "query": {"ticker": "IBIT", "cusip": null, "quarter": null}, "reason": "The security reverse-holders index is not enabled on this deployment. Phase-1 covers a manager's crypto-ETF exposure via /holdings/manager.", "attribution": "SEC EDGAR / Form 13F (US public domain); data.sec.gov + www.sec.gov"}` - Tags: 13f, institutional, holders, ownership, security, reverse-index, concentration, crypto-etf, ticker, cusip ### `GET /unlock/calendar` — $0.02 A one-call, forward-looking supply-shock calendar for a crypto token, built from DeFiLlama's public emissions dataset rather than a scraped calendar site. Supply a ticker, protocol name or DeFiLlama slug; the route resolves it to an emissions schedule, fetches the token's vesting file and returns a fused view: the next unlock with its date, on-schedule token amount, USD value and share of circulating supply; every upcoming cliff and linear unlock inside your forward window sorted by date; the allocation breakdown bucketed across team, investors, ecosystem, community, treasury and public; supply metrics including max supply, circulating and percent unlocked; and a deterministic zero-to-one-hundred supply-overhang score that aggregates upcoming unlocks as a percent of circulating supply weighted by how soon they land. Optionally it backtests the token's price response over the days after recent past unlocks. Circulating supply is derived from the documented vesting curve, so the response is self-contained; when a source block is missing it degrades to a partial answer rather than failing. Every figure is attributed to DeFiLlama. Informational, not investment advice. - Query params: `{"ticker": "ARB", "window_days": 365}` - Example response: `{"found": true, "token": {"slug": "arbitrum", "name": "Arbitrum", "symbol": "ARB", "token_id": "arbitrum:0x912ce59144191c1204e64559fe8253a0e49e6548"}, "price_usd": 0.4, "as_of": "2026-07-12", "window": {"window_days": 365, "horizon": "2027-07-12"}, "next_unlock": {"date_iso": "2026-11-15", "unix": 1784183604, "tokens": 56125000, "usd_value": 22450000, "pct_of_circulating": 1.42, "unlock_type": "cliff", "category": "insiders"}, "upcoming_returned": 16, "supply": {"max_supply": 10000000000, "circulating": 3950000000, "pct_unlocked": 39.5}, "allocation": {"by_bucket": {"team": 32.6, "investors": 21.2, "ecosystem": 19.9}}, "supply_overhang_score": 47, "attribution": "DeFiLlama public emissions dataset (defillama-datasets.llama.fi) + coins.llama.fi prices; reused with attribution."}` - Tags: crypto, token, unlock, vesting, emissions, tokenomics, supply, cliff, calendar, catalyst, supply-shock, overhang, defillama, ticker, trading ### `GET /unlock/next` — $0.008 The cheapest actionable unlock signal for a trading agent: just the single next scheduled token unlock, without the full calendar. Supply a ticker, protocol name or DeFiLlama slug; the route resolves it to an emissions schedule, reads the same cached vesting file the calendar route uses, and returns only the nearest upcoming unlock with its date, on-schedule token amount, USD value at the current price, share of circulating supply and unlock type, together with the token's recent emission velocity over twenty-four hours, seven days, thirty days and one year so an agent can gauge ongoing dilution. Ideal for a fast pre-trade check across many tokens where the full calendar would be more than you need. Every figure is attributed to DeFiLlama. Informational, not investment advice. - Query params: `{"ticker": "ARB"}` - Example response: `{"found": true, "token": {"slug": "arbitrum", "name": "Arbitrum", "symbol": "ARB"}, "price_usd": 0.4, "as_of": "2026-07-12", "next_unlock": {"date_iso": "2026-11-15", "unix": 1784183604, "tokens": 56125000, "usd_value": 22450000, "pct_of_circulating": 1.42, "unlock_type": "cliff", "category": "insiders"}, "emission_velocity": {"emission_24h": 3200000, "emission_7d": 22400000, "emission_30d": 96000000, "emissions_1y": 1150000000}, "attribution": "DeFiLlama public emissions dataset (defillama-datasets.llama.fi) + coins.llama.fi prices; reused with attribution."}` - Tags: crypto, token, unlock, vesting, emissions, next-unlock, tokenomics, supply, emission-rate, defillama, ticker, trading, signal ### `GET /unlock/upcoming` — $0.05 A market-wide screener for the biggest upcoming token unlocks instead of querying one token at a time. The route selects the most active emitters by projected one-year emission from DeFiLlama's emissions breakdown, fetches each one's vesting file under a hard fan-out cap and an aggressive cache, extracts the nearest upcoming unlock inside your forward window, prices it, and ranks the set by USD value or by percent of circulating supply. Each row carries the protocol, ticker, unlock date, on-schedule token amount, USD value and share of float. Because it fans out across many tokens it is bounded by design: a coverage note discloses the cap, the response is marked truncated, and for exhaustive coverage of a single token you should use the calendar route with a ticker. Every figure is attributed to DeFiLlama. Informational, not investment advice. - Query params: `{"window_days": 90, "rank_by": "usd_value"}` - Example response: `{"found": true, "as_of": "2026-07-12", "window": {"window_days": 90, "horizon": "2026-10-10"}, "rank_by": "usd_value", "results_returned": 1, "results": [{"slug": "arbitrum", "name": "Arbitrum", "symbol": "ARB", "price_usd": 0.4, "next_unlock": {"date_iso": "2026-11-15", "unix": 1784183604, "tokens": 56125000, "usd_value": 22450000, "pct_of_circulating": 1.42, "unlock_type": "cliff", "category": "insiders"}}], "truncated": true, "coverage_note": "Bounded market-wide screen of the most active emitters.", "attribution": "DeFiLlama public emissions dataset (defillama-datasets.llama.fi) + coins.llama.fi prices; reused with attribution."}` - Tags: crypto, token, unlock, vesting, emissions, screener, market-wide, supply-shock, tokenomics, calendar, defillama, trading, ranking ### `GET /cex/solvency` — $0.02 One-call counterparty-solvency verdict on a centralized crypto exchange as a CUSTODIAN, for trade/treasury agents deciding where to custody or trade. It is computed DETERMINISTICALLY (no LLM) from the keyless, open DefiLlama CEX Transparency reserve aggregate, whose cleanAssetsTvl EXCLUDES the exchange's own self-issued token — so a low clean-asset ratio is exactly the FTX/FTT own-token-heavy pattern that was visible before FTX collapsed. Given an exchange name/slug/CoinGecko id it returns: total on-chain reserves (currentTvl) and clean-of-own-token reserves (cleanAssetsTvl), the own-token symbol/USD value/concentration, the clean-asset ratio, the 24h/1w/1m USD netflow with each window as a percent of TVL (negative = outflow, a bank-run stress signal), leverage and spot/derivative volumes, a peer rank among all covered exchanges, and a 0-100 solvency_score (HIGHER = SAFER) with a rating of strong/adequate/watch/weak. The score fuses independent data-driven signals — clean-asset ratio (weighted highest), an own-token-concentration cliff penalty, sustained-outflow stress, leverage, a small-reserve-base floor and a public-reserves transparency bonus — and returns the fired risk_flags (high_own_token_concentration, sharp_outflow_1w, sustained_outflow_1m, high_leverage, no_public_reserves, thin_reserves) each with a human-readable reason plus a full score breakdown, so a caller can re-rank with its own policy. IMPORTANT: this is a reserve-quality PROXY, NOT a solvency guarantee — customer LIABILITIES and the quality/freshness of any proof-of-reserves attestation are NOT publicly visible, and the figures are a point-in-time snapshot. Unknown exchange -> 404 with the nearest candidates; upstream unreachable -> 502, never a 500. - Query params: `{"cex": "binance"}` - Example response: `{"exchange": "Binance", "slug": "Binance-CEX", "currentTvl": 137577394319.0, "cleanAssetsTvl": 117354259455.0, "own_token": {"symbol": "BNB", "concentration_pct": 14.7}, "clean_asset_ratio": 0.853, "netflow": {"w1_pct_of_tvl": 0.00056, "m1_pct_of_tvl": -0.01823}, "solvency_score": 85, "rating": "strong", "peer_rank": {"by_clean_tvl": 1, "of_total": 90}, "risk_flags": []}` - Tags: cex, exchange, solvency, proof-of-reserves, reserves, counterparty-risk, custody, netflow, own-token, ftx, crypto, risk-score ### `GET /cex/reserves` — $0.005 The cheap raw grain of the CEX-solvency family: a normalized reserve breakdown of a single centralized exchange with minimal derivation, computed from the keyless open DefiLlama CEX Transparency aggregate. It returns total on-chain reserves and clean-of-own-token reserves, the own-token symbol / USD value / concentration percent, the clean-asset ratio, spot and derivative volumes, leverage, the 24h/1w/1m USD netflow and the exchange's public wallets / proof-of-reserves URL, each figure cited to DefiLlama. Use it as the cheap first step before paying for the fuller /cex/solvency fused verdict + score. Reserves are a PROXY: customer liabilities and PoR-attestation quality are not visible. Unknown exchange -> 404 with nearest candidates; upstream unreachable -> 502. - Query params: `{"cex": "okx"}` - Example response: `{"exchange": "OKX", "slug": "okx", "currentTvl": 22220365978.0, "cleanAssetsTvl": 22213449158.0, "own_token": {"symbol": "OKB", "concentration_pct": 0.0311}, "clean_asset_ratio": 0.999689, "leverage": 0.298, "netflow": {"d24h": 13316579.0, "w1": -62839791.0, "m1": 107297925.0}, "reserves_url": "https://www.okx.com/proof-of-reserves", "limits": "reserves proxy; liabilities & PoR quality not visible"}` - Tags: cex, exchange, reserves, proof-of-reserves, tvl, own-token, netflow, crypto, custody ### `GET /cex/screen` — $0.03 A market-wide, ranked solvency screen across every centralized exchange covered by DefiLlama CEX Transparency (~90). It scores each exchange with the same deterministic engine as /cex/solvency and returns compact rows — exchange, slug, solvency_score, rating, clean-asset ratio, own-token concentration percent, 1-week netflow as a percent of TVL, currentTvl and the fired risk_flags. Filter with min_score, max_own_token_pct (drop own-token-heavy exchanges) and min_tvl, and sort by score (safest first), tvl (largest first) or outflow (worst weekly outflow first); the result count is hard-capped at 100. It answers cross-sell questions like which custodian is safer or which exchanges are bleeding reserves this week. Deterministic, no LLM. Reserves are a PROXY: customer liabilities and PoR-attestation quality are not visible; figures are a snapshot. Upstream unreachable -> 502, never a 500. - Query params: `{"sort": "score", "min_tvl": 1000000000, "limit": 10}` - Example response: `{"count": 1, "total_matched": 40, "total_covered": 90, "results": [{"exchange": "OKX", "slug": "okx", "solvency_score": 100, "rating": "strong", "own_token_concentration_pct": 0.031, "currentTvl": 22220365978.0, "risk_flags": []}]}` - Tags: cex, exchange, solvency, screen, ranking, reserves, own-token, netflow, custody, crypto, counterparty-risk ### `GET /funding/profile` — $0.03 A one-call, normalized view of the federal R&D funding an organization or researcher has actually received, built by fusing three authoritative public-domain sources rather than a single database. Supply a company name, an organization or awardee name, or a principal-investigator name. The route queries NIH RePORTER (biomedical and other federal research projects, including NIH SBIR/STTR grants), the NSF Award API (science and engineering grants) and, when its public API is available, the SBIR.gov awards feed (all SBIR/STTR awards since 1983). Results are resolved to your entity by fuzzy organization-name matching and principal-investigator disambiguation, de-duplicated across sources so an award listed in two feeds is counted once, and returned under one unified schema with the award identifier, title, abstract slice, agency and sub-agency, SBIR phase and program where applicable, principal investigators, organization and state, amount, fiscal year, start and end dates, active flag, technology terms and a citation link back to the source record. On top of the award list the route computes the aggregates that make this a profile rather than a lookup: total funding, total non-dilutive funding, a breakdown by agency, a by-year trend, the technology clusters the entity is funded in, and how many awards are active. When the SBIR public API is on maintenance the profile is built from NIH and NSF and the response says so honestly in sources_used and source_status. All three sources are US government public domain. Informational, not investment advice. - Query params: `{"company": "Moderna", "min_year": 2018}` - Example response: `{"found": true, "query": {"company": "Example Biosciences", "organization": null, "pi": null, "agencies": null, "min_year": null}, "award_count": 1, "aggregates": {"total_funding": 1998750.0, "non_dilutive_total": 1998750.0, "award_count": 1, "active_count": 1, "by_agency": {"NIH": 1998750.0}, "by_year": {"2024": 1998750.0}, "tech_clusters": [{"term": "Early Detection", "awards": 1}]}, "awards": [{"source": "nih", "id": "5R44CA224768-04", "core_id": "R44CA224768", "title": "A next-generation platform for early cancer detection", "abstract": "This SBIR Phase II project develops a blood-based assay for early…", "agency": "NIH", "sub_agency": "NCI", "phase": "II", "program": "SBIR", "pi": ["JANE Q RESEARCHER"], "organization": "EXAMPLE BIOSCIENCES, INC.", "org_state": "MA", "uei": "ABCD1234EFG5", "amount": 1998750.0, "fiscal_year": 2024, "start": "2021-09-01", "end": "2025-08-31", "is_active": true, "tech_terms": ["Early Detection", "Circulating Tumor DNA", "Assay"], "citation": {"source": "NIH RePORTER", "source_url": "https://reporter.nih.gov/project-details/5R44CA224768-04"}}], "sources_used": ["nih", "nsf"], "source_status": {"nih": {"available": true, "reason": null, "count": 1}, "nsf": {"available": true, "reason": null, "count": 0}, "sbir": {"available": false, "reason": "maintenance", "count": 0}}, "attribution": "NIH RePORTER (api.reporter.nih.gov) — US public domain. | NSF Award Search API (research.gov) — US public domain. | SBIR.gov Public API (sbir.gov) — US public domain."}` - Tags: funding, grants, rnd, r-and-d, nih, nsf, sbir, sttr, non-dilutive, biotech, venture-capital, due-diligence, competitive-intelligence, reporter, company, pi ### `GET /funding/search` — $0.02 Map who is being funded to work on a technology or research area instead of querying one entity at a time. Supply a keyword — a mechanism, target, disease area or technology — and the route runs a topic search over NIH RePORTER (title, abstract and terms) and the NSF Award API, normalizes and de-duplicates the matches into the unified award schema, and returns them ranked by recency and amount. Each result carries the recipient organization and state, principal investigator, agency and sub-agency, amount, fiscal year, technology terms, abstract slice and a citation link, so the list doubles as a competitor-landscape map and a lead list of funded organizations. Optional filters narrow to specific agencies, a fiscal year, or an SBIR phase. Because this fans out across the whole funding stream it is bounded by a hard result cap served from an aggressive cache; a coverage note discloses the bound and a truncated flag signals when more matched than were returned. For exhaustive coverage of one entity use /funding/profile. US public-domain sources; informational, not investment advice. - Query params: `{"keyword": "crispr gene editing", "limit": 15}` - Example response: `{"found": true, "keyword": "crispr gene editing", "filters": {"agencies": null, "year": null, "phase": null}, "results_returned": 1, "truncated": true, "coverage_note": "Bounded topic scan across NIH RePORTER + NSF.", "results": [{"source": "nih", "id": "5R44CA224768-04", "core_id": "R44CA224768", "title": "A next-generation platform for early cancer detection", "abstract": "This SBIR Phase II project develops a blood-based assay for early…", "agency": "NIH", "sub_agency": "NCI", "phase": "II", "program": "SBIR", "pi": ["JANE Q RESEARCHER"], "organization": "EXAMPLE BIOSCIENCES, INC.", "org_state": "MA", "uei": "ABCD1234EFG5", "amount": 1998750.0, "fiscal_year": 2024, "start": "2021-09-01", "end": "2025-08-31", "is_active": true, "tech_terms": ["Early Detection", "Circulating Tumor DNA", "Assay"], "citation": {"source": "NIH RePORTER", "source_url": "https://reporter.nih.gov/project-details/5R44CA224768-04"}}], "sources_used": ["nih", "nsf"], "attribution": "NIH RePORTER (api.reporter.nih.gov) — US public domain. | NSF Award Search API (research.gov) — US public domain. | SBIR.gov Public API (sbir.gov) — US public domain."}` - Tags: funding, grants, rnd, nih, nsf, sbir, topic, landscape, competitive-intelligence, lead-generation, technology, keyword, search, biotech ### `GET /funding/award` — $0.008 Pull a single federal R&D award in full. Supply the award identifier and the source it belongs to: an NIH project number resolved against NIH RePORTER (falling back from the full project number to the core project number), an NSF award id resolved against the NSF Award API, or an SBIR/STTR award resolved against SBIR.gov when its public API is available. The route returns the award under the unified schema with the complete unsliced abstract, the agency and sub-agency, amount, fiscal year, start and end dates, active flag, principal investigators, organization and state, technology terms and a citation link. For NIH awards it also returns the PubMed ids of publications the project reported, linking funding to output. This is the cheapest route because it reads one record. US public-domain sources; informational, not investment advice. - Query params: `{"id": "5R44CA224768-04", "source": "nih"}` - Example response: `{"found": true, "id": "5R44CA224768-04", "source": "nih", "award": {"source": "nih", "id": "5R44CA224768-04", "core_id": "R44CA224768", "title": "A next-generation platform for early cancer detection", "abstract": "This SBIR Phase II project develops a blood-based assay for early…", "agency": "NIH", "sub_agency": "NCI", "phase": "II", "program": "SBIR", "pi": ["JANE Q RESEARCHER"], "organization": "EXAMPLE BIOSCIENCES, INC.", "org_state": "MA", "uei": "ABCD1234EFG5", "amount": 1998750.0, "fiscal_year": 2024, "start": "2021-09-01", "end": "2025-08-31", "is_active": true, "tech_terms": ["Early Detection", "Circulating Tumor DNA", "Assay"], "citation": {"source": "NIH RePORTER", "source_url": "https://reporter.nih.gov/project-details/5R44CA224768-04"}, "related_pmids": [34567890, 35678901]}, "attribution": "NIH RePORTER (api.reporter.nih.gov) — US public domain. | NSF Award Search API (research.gov) — US public domain. | SBIR.gov Public API (sbir.gov) — US public domain."}` - Tags: funding, grants, rnd, nih, nsf, sbir, award, project-number, abstract, publications, pmid, lookup ### `GET /mining/hashprice` — $0.01 One-call Bitcoin hashprice intelligence for a mining, trading or research agent. Hashprice is the expected mining revenue per unit of hashrate per day, the single number that tells a miner or investor whether hashpower is worth deploying. This route computes it deterministically from free public network data: it takes the current network difficulty, the block subsidy for the current halving era, the average transaction fee per block over the last day and the spot BTC price, and returns the expected reward per petahash per second per day and per terahash per second per day, in both BTC and the chosen fiat. Alongside the headline number it returns the current network hashrate in exahashes per second, the current difficulty, the next difficulty-retarget forecast (the estimated change, the remaining blocks and the retarget height) and the split between the block subsidy and the fee component of the reward, so an agent can see what is driving the figure. The value-add is the deterministic derivation and the fusion into one cited shape, not a resale of raw data. Hashprice changes every block; this is an informational indicator, not advice and not a guarantee of profit. - Query params: `{"fiat": "USD"}` - Example response: `{"price_usd": 68000.0, "difficulty": 133869853540305.4, "network_hashrate_ehs": 907.29, "hashprice": {"hashprice_btc_per_ph_day": 0.00049, "hashprice_usd_per_th_day": 0.033}, "difficulty_adjustment": {"difficulty_change_percent": -3.79, "remaining_blocks": 445}, "sources": {"partial": false}}` - Tags: bitcoin, btc, mining, hashprice, difficulty, hashrate, reward, economics, hashrate-index ### `GET /mining/breakeven` — $0.01 One-call ASIC-miner profitability and break-even analysis for a miner, hosting provider, ASIC trader or lender. Supply either a miner model id from the free /mining/asics table (for example antminer-s21 or whatsminer-m60) or a raw hashrate in terahash per second and a wall power in watts, plus your electricity price in USD per kilowatt-hour (defaulting to five cents) and optionally a pool-fee percent and a hardware cost. The route fetches the live hashprice, then computes the daily and monthly mined BTC (net of the pool fee), the fiat revenue at the current BTC price, the electricity cost from the machine's power draw, and the resulting net profit and margin. It also returns the two figures a purchase or hosting decision turns on: the break-even electricity price, the tariff at which the machine stops being profitable, and the break-even BTC price, the price at which revenue exactly covers power. When a hardware cost is given it returns the simple payback period in days. The efficiency in joules per terahash is computed from the model specs. All ASIC specs are nominal manufacturer datasheet figures; the value-add is the deterministic computation and the fusion of live network data with the spec table, not a resale. Informational only, not advice and not a guarantee of profit. - Query params: `{"model": "antminer-s21", "electricity_usd_kwh": 0.05}` - Example response: `{"model": {"id": "antminer-s21", "th_s": 200, "watts": 3500}, "breakeven": {"revenue_usd_day": 6.6, "power_cost_usd_day": 4.2, "net_usd_day": 2.4, "profitable": true, "breakeven_electricity_usd_kwh": 0.078, "breakeven_btc_price_usd": 42000.0}, "sources": {"partial": false}}` - Tags: bitcoin, btc, mining, breakeven, asic, profitability, electricity, antminer, whatsminer ### `GET /mining/capitulation` — $0.008 One-call hash-ribbon indicator for a trading, research or risk agent. The hash ribbon is a well-known miner-capitulation signal built from the network hashrate: when the 30-day moving average of hashrate falls below the 60-day moving average, miners are switching machines off because mining has become unprofitable, which historically has marked periods of market stress; when the 30-day average crosses back above the 60-day average it signals a recovery. This route fetches a year of daily network-hashrate history, computes both moving averages, and returns whether the network is currently in capitulation, whether a recovery cross has just occurred, the two moving averages and the current hashrate in exahashes per second, and the 30-day percentage trend in hashrate. It also returns the current difficulty and the next-retarget context. The value-add is the deterministic computation of the signal from public data, not a resale. This is an informational indicator, not financial advice and not a trading recommendation. - Query params: `{}` - Example response: `{"hash_ribbon": {"sma_short_ehs": 890.1, "sma_long_ehs": 905.4, "in_capitulation": true, "recovery_cross": false, "signal": "capitulation", "hashrate_trend_30d_percent": -2.1}, "sources": {"partial": false}}` - Tags: bitcoin, btc, mining, hash-ribbon, capitulation, hashrate, signal, trend, trading ### `GET /derivs/funding` — $0.01 A single normalized view of perpetual funding for a crypto asset across decentralized perpetual protocols. Today the fusion base is Hyperliquid (its public Info API) and dYdX v4 (its public Indexer) — decentralized-protocol public state, normalized and combined by us, not a resold centralized-exchange feed. Pass a base ticker (BTC, ETH, SOL); a quote suffix like BTC-USD is normalized server-side. For each venue we return the raw funding rate, its funding interval, the interval-normalized hourly rate and the annualized APR. We then compute the open-interest-weighted aggregate funding (so a deep venue counts more than a thin one), the aggregate APR, the cross-venue spread in basis points (a funding-arbitrage and disagreement signal) and the dispersion. Coverage is data-driven: adding a venue or asset is a registry row. Each source venue is cited on every response with attribution. Bad input is a 400, an unlisted symbol is a 404, a total upstream failure is a 502, never a 500; a single venue failing is reported under errors with a partial flag. Hosts are fixed server-side, so there is no SSRF surface. This is market-structure intelligence, not trading advice. - Query params: `{"symbol": "BTC"}` - Example response: `{"symbol": "BTC", "venues": [{"venue": "hyperliquid", "funding_hourly": 1.25e-05, "apr": 0.1095, "oi_usd": 2400000000.0}], "aggregate": {"oi_weighted_funding_hourly": 1.1e-05, "apr": 0.096, "spread_bps": 0.21, "dispersion": 1e-06, "venue_count": 2}, "partial": false, "ts": 1752000000}` - Tags: funding-rate, perpetuals, derivatives, crypto, hyperliquid, dydx, defi, apr, carry, cross-venue, positioning, intelligence ### `GET /derivs/oi` — $0.01 Aggregate perpetual open interest for a crypto asset across decentralized protocols. For each venue we return open interest in the base coin and in USD notional (coins multiplied by the venue's mark price where available, otherwise its oracle price), plus the venue's mark and oracle. We then sum the USD open interest into a total and compute each venue's share, so you see where the leverage sits. Sources are Hyperliquid and dYdX v4 public read-only state (decentralized-protocol state, not a resold centralized feed); coverage is data-driven, so a new venue or asset is a registry row. Pass a base ticker; a quote suffix like ETH-USD is normalized server-side. Bad input is a 400, an unlisted symbol is a 404, a total upstream failure is a 502, never a 500; a single venue failing is reported under errors with a partial flag. Hosts are fixed server-side, so there is no SSRF surface. Market-structure intelligence, not trading advice. - Query params: `{"symbol": "ETH"}` - Example response: `{"symbol": "ETH", "venues": [{"venue": "hyperliquid", "oi_coins": 120000.0, "oi_usd": 360000000.0, "mark": 3000.0, "oracle": 3001.0}], "aggregate": {"total_oi_usd": 410000000.0, "venue_shares": {"hyperliquid": 0.88, "dydx": 0.12}, "venue_count": 2}, "partial": false, "ts": 1752000000}` - Tags: open-interest, perpetuals, derivatives, crypto, hyperliquid, dydx, defi, notional, leverage, cross-venue, liquidity, intelligence ### `GET /derivs/basis` — $0.008 The perpetual basis for a crypto asset: how far the perpetual mark price sits above or below the underlying oracle price. We report this for venues that publish a native mark price (Hyperliquid does; dYdX v4 exposes an oracle only, so it contributes no basis). For each such venue we return the mark, the oracle, the venue-native premium, the basis in basis points computed as (mark minus oracle) divided by oracle, and a naive annualized carry proxy that annualizes the instantaneous premium as an hourly carry (a proxy, not a realized return). A persistently positive basis means longs are paying up (froth); a negative basis means the perp trades below spot. Sources are decentralized-protocol public state, not a resold centralized feed. Pass a base ticker; a quote suffix like SOL-USD is normalized server-side. Bad input is a 400; an asset with no mark-publishing venue is a 404; never a 500. Hosts are fixed server-side, so there is no SSRF surface. Intelligence, not trading advice. - Query params: `{"symbol": "SOL"}` - Example response: `{"symbol": "SOL", "venues": [{"venue": "hyperliquid", "mark": 150.2, "oracle": 150.0, "basis_bps": 13.3, "annualized_carry_pct": 116.8}], "partial": false, "ts": 1752000000}` - Tags: basis, premium, perpetuals, derivatives, crypto, hyperliquid, carry, mark-price, oracle, defi, arbitrage, intelligence ### `GET /derivs/positioning` — $0.03 The moat route: a single normalized, cited positioning brief for a crypto perpetual that fuses what would otherwise be several protocol queries. From the decentralized venues (Hyperliquid, dYdX v4) we combine the open-interest weighted aggregate funding and its annualized APR, the aggregate USD open interest, the mark-versus-oracle basis, the cross-venue funding spread, and a funding-flip trend read from Hyperliquid funding history (has the sign flipped, how many periods since). From those we compute a deterministic 0-to-100 positioning score that blends funding intensity, basis extremity and cross-venue spread — each saturating at a documented reference, weights renormalized over the available signals — and a verdict of neutral, elevated or extreme positioning. We also report the crowding direction (are longs or shorts crowded), a squeeze bias (a crowded side flushing is that side's squeeze) and a reversal flag when funding has recently flipped. The whole score is a formula in code, with no model or LLM, so it is reproducible. Sources are decentralized-protocol public state, cited with attribution, not a resold centralized feed. Pass a base ticker; a quote suffix like BTC-USD is normalized server-side. Each dimension is best-effort: a failing venue or the funding history is reported under errors with a partial flag and the rest are returned; only a total failure is a 404 or 502, never a 500. Hosts are fixed server-side, so there is no SSRF surface. This is market-structure intelligence, not trading advice. - Query params: `{"symbol": "BTC"}` - Example response: `{"symbol": "BTC", "score": 58, "verdict": "elevated", "signals": {"direction": "longs_crowded", "squeeze_bias": "long_squeeze_risk", "reversal_flag": false, "aggregate_funding_apr": 0.28, "cross_venue_spread_bps": 0.6}, "components": {"funding": 0.56, "basis": 0.4, "spread": 0.3}, "venue_count": 2, "partial": false, "ts": 1752000000}` - Tags: positioning, squeeze, funding-rate, open-interest, basis, perpetuals, derivatives, crypto, hyperliquid, dydx, fusion, intelligence ### `GET /timing/ahr999` — $0.02 The AHR999 index is a Bitcoin accumulation indicator popular with DCA (dollar-cost averaging) investors. We compute it deterministically from DefiLlama's keyless daily price history: AHR999 = (spot / geometric_mean_of_last_200_daily_closes) * (spot / exp_valuation), where exp_valuation = 10 ** (5.84 * log10(days_since_genesis) - 17.01) using the Bitcoin genesis date 2009-01-03. The response returns the value, the accumulation zone (bottom < 0.45, dca 0.45-1.2, wait > 1.2), every component (spot, 200-day geometric mean, exponential valuation, days since genesis) and a short interpretation. AHR999 is Bitcoin-specific (the power-law fit is BTC's); other assets should use /timing/indicators for the asset-agnostic Mayer/200WMA/Pi-Cycle indicators. Source hosts are fixed server-side (you pass only an asset), so there is no SSRF surface; the DefiLlama attribution is carried on every response. Intelligence, not financial advice. - Query params: `{"asset": "btc"}` - Example response: `{"asset": "BTC", "indicator": "ahr999", "value": 0.335, "zone": "bottom", "components": {"spot": 63601.7, "geometric_mean_200d": 72722.0, "exp_valuation": 165943.0, "days_since_genesis": 6405.0}, "interpretation": "Deep-value accumulation zone.", "attribution": "Data by DefiLlama (coins.llama.fi)"}` - Tags: crypto, bitcoin, ahr999, dca, valuation, accumulation, market-timing, indicator, on-chain ### `GET /timing/indicators` — $0.05 A one-call Bitcoin valuation / market-timing dashboard for trading and research agents — the flagship route. It fuses four independent cycle indicators computed deterministically from DefiLlama's keyless price history: (1) AHR999 accumulation index (bottom/dca/wait), (2) the Mayer Multiple = spot / 200-day SMA (undervalued/fair/overheated), (3) the 200-week moving average with the spot deviation in percent (weekly bars, because long moving averages must use weekly resolution given the upstream chart-length cap), and (4) the Pi-Cycle Top proximity = 111-day MA / (2 * 350-day MA), whose cross has historically marked cycle tops. Each indicator carries its own value, zone and threshold set. MVRV / realized-cap is returned as an honest gated scaffold with available=false because there is no keyless, terms-clean on-chain realized-value source; a future extension flips it on. A single failing indicator degrades to available=false rather than failing the whole response (never a 500). Source hosts are fixed server-side; DefiLlama attribution is carried on every response. Intelligence, not financial advice. - Query params: `{"asset": "btc"}` - Example response: `{"asset": "BTC", "spot": 63601.7, "indicators": {"ahr999": {"value": 0.335, "zone": "bottom"}, "mayer": {"value": 0.868, "zone": "fair"}, "wma_200w": {"value": 58000.0, "pct_off": 9.6, "zone": "normal"}, "pi_cycle": {"ratio": 0.72, "zone": "far", "cross_flag": false}, "mvrv": {"available": false, "enabled": false}}, "partial": false, "attribution": "Data by DefiLlama (coins.llama.fi)"}` - Tags: crypto, bitcoin, valuation, mayer-multiple, pi-cycle, 200wma, ahr999, dashboard, market-timing, cycle ### `GET /timing/dca` — $0.03 A single actionable DCA (dollar-cost averaging) verdict for accumulation agents — the value-add fusion route. Instead of one raw indicator, it blends FOUR into a normalized accumulate / hold / reduce signal: AHR999, the Mayer Multiple, the Crypto Fear & Greed index and the 200-week MA deviation. Each component maps its live value to an accumulation score in the range minus-one to plus-one (plus-one = cheap / accumulate, minus-one = expensive / reduce) via tunable registry anchors; a weighted blend (weights renormalized over whatever components are available) yields a composite score, which crosses fixed thresholds into the verdict. The response returns the signal, a confidence in the range zero-to-one (blending the composite magnitude with how strongly the components agree), a human rationale, the composite and per-indicator scores, and every input component including the current Fear & Greed value — so the buyer can see exactly why. A component that is unavailable is dropped and the blend renormalizes rather than failing. Deterministic, formula in code, no LLM. Sources are attributed on every response. Intelligence, not financial advice. - Query params: `{"asset": "btc"}` - Example response: `{"asset": "BTC", "signal": "accumulate", "confidence": 0.86, "rationale": "The blended read of AHR999, Mayer, Fear&Greed and 200WMA favors accumulating.", "composite_score": 0.71, "component_scores": {"ahr999": 1.0, "mayer": 1.0, "fng": 0.46, "wma200": 0.33}, "components": {"ahr999": {"value": 0.335, "zone": "bottom"}, "fear_greed": 27}, "attribution": "Data by DefiLlama (coins.llama.fi); Data by alternative.me"}` - Tags: crypto, bitcoin, dca, signal, accumulate, market-timing, fusion, fear-greed, ahr999, verdict ### `GET /timing/fng` — $0.01 The canonical Crypto Fear & Greed index (0-100, market-wide, BTC-anchored) with a market-timing trend layered on top — for sentiment and contrarian-timing agents. We fetch the keyless alternative.me history and compute: the current value and its classification, the change over the last 7 and 30 days, the streak (how many consecutive days the index has stayed in the current classification), the 30-day min and max range, and a contrarian flag when the index is in extreme fear (25 or below) or extreme greed (75 or above) — the readings that historically precede reversals. This is distinct from the crypto-news sentiment route, which blends F&G into a news-headline composite; here it is the raw index plus timing analytics. Fear & Greed data is attributed to alternative.me per its terms. Intelligence, not financial advice. - Query params: `{"asset": "btc"}` - Example response: `{"index": "crypto_fear_greed", "value": 27, "classification": "Fear", "delta_7d": 5, "delta_30d": -12, "streak_days": 3, "min_30d": 18, "max_30d": 44, "contrarian_flag": null, "attribution": "Data by alternative.me"}` - Tags: crypto, bitcoin, fear-greed, sentiment, market-timing, index, contrarian, trend, mood ### `GET /lending/rates` — $0.01 Cross-protocol money-market rate intelligence for a DeFi lending asset, fused by us from DefiLlama's two keyless public feeds joined on the pool uuid — the same pattern as defillama.com/borrow. For an asset (USDC, ETH, WETH, cbBTC ...) on Base we return every money-market from Aave v3, Compound v3, Morpho Blue, Euler v2, Fluid, Moonwell and others, each normalized to supply APY (base + reward), borrow APY (base minus reward rebate), utilization (borrowed / supplied), LTV, total supplied/borrowed and available withdraw liquidity. On top we compute a best-safe-yield ranking: sorted by net APY but with safety flags (high utilization, thin liquidity, low supply depth) so safe markets rank ahead of a higher but riskier headline number. side selects the supply ranking, the borrow ranking, or both. Coverage grows by data (a new protocol or chain is one registry row). We publish the derived/fused signal with attribution, not a raw API resale. Unknown asset returns 404, bad input 400, upstream failure 502 — never 500. Not financial advice. - Query params: `{"asset": "USDC", "chain": "Base", "side": "both"}` - Example response: `{"query": {"asset": "USDC", "chains": ["Base"], "side": "both"}, "markets": [{"protocol": "aave-v3", "asset": "USDC", "supply_apy": 3.12, "borrow_apy": 4.16, "net_supply_apy": 3.12, "net_borrow_apy": 4.16, "ltv": 0.75, "utilization": 0.83, "total_supply_usd": 180000000.0, "available_liquidity_usd": 30000000.0}], "best_safe_yield": {"supply": [{"protocol": "aave-v3", "asset": "USDC", "net_supply_apy": 3.12, "safety_flags": {"safe": true}}]}, "market_count": 6, "source": "Source: DefiLlama free public API + Base on-chain"}` - Tags: defi, lending, money-market, rates, apy, supply, borrow, yield, aave, compound, morpho, utilization, onchain, base ### `GET /lending/markets` — $0.03 Protocol-health and solvency intelligence for a DeFi money-market, computed by us over DefiLlama's keyless pools+lendBorrow join. Give a protocol slug (aave-v3, compound-v3, morpho-blue, euler-v2, fluid-lending, moonwell-lending, spark ...) or an asset symbol, and we return every matching market on Base with utilization, available withdraw liquidity, TVL, total borrowed, debt ceiling and borrowable flag, each scored with a deterministic 0-100 health score and a verdict (healthy, tight-liquidity, elevated-risk) derived from utilization, liquidity depth and supply size. We also aggregate protocol-level totals with a supply-weighted average health score, and attach a rate/TVL trend for the deepest market from DefiLlama's per-pool history. The scoring is our own derived layer (not a resale). Coverage is data — a new protocol or chain is one registry row. Unknown protocol/asset returns 404, upstream failure 502 — never 500. Not financial advice. - Query params: `{"protocol": "aave-v3", "chain": "Base"}` - Example response: `{"query": {"protocol": "aave-v3", "asset": null, "chains": ["Base"]}, "protocol_aggregate": {"market_count": 14, "total_supply_usd": 900000000.0, "total_borrow_usd": 500000000.0, "utilization": 0.55, "health_score": 88}, "markets": [{"asset": "USDC", "utilization": 0.83, "available_liquidity_usd": 30000000.0, "health_score": 82, "verdict": "healthy"}], "trend": {"pool_id": "aa70268e-...", "trend": {"apy_change_7d": 0.12}}, "market_count": 14}` - Tags: defi, lending, protocol-health, solvency, risk, tvl, utilization, score, aave, morpho, base ### `GET /lending/liquidations` — $0.05 On-chain liquidation telemetry for DeFi money-markets on Base, decoded by us from the public Aave v3 LiquidationCall event logs (our own getLogs infra, no third-party API resold). Over a look-back window (1h/6h/12h, capped ~12h) we collect the liquidation events and return a summary: count, total debt repaid and collateral seized in USD (valued via our shared on-chain price oracle, best-effort for known reserve tokens), the estimated average liquidation bonus (seized over repaid), and per-protocol and per-collateral-asset breakdowns, plus the most recent events with the liquidated user, liquidator, collateral and debt assets and amounts. Liquidations on Base are rare, so an empty window is a valid count of zero, not an error. Timestamps are exact when the RPC returns them, otherwise estimated from block height. Coverage grows by data — a new liquidation source is one registry row. Bad input returns 400, upstream failure 502 — never 500. Not financial advice. - Query params: `{"protocol": "aave-v3", "window": "6h"}` - Example response: `{"query": {"protocol": "aave-v3", "window_blocks": 10800}, "summary": {"count": 2, "total_debt_repaid_usd": 41000.0, "total_collateral_seized_usd": 44050.0, "avg_liquidation_bonus": 0.074, "by_protocol": {"aave-v3": 2}, "by_collateral_asset": {"WETH": 2}}, "recent_events": [{"block": 47623000, "user": "0x...", "liquidator": "0x...", "collateral_symbol": "WETH", "debt_symbol": "USDC", "debt_repaid_usd": 20500.0, "collateral_seized_usd": 22025.0}], "truncated": false, "block": 47623156, "chain": "eip155:8453"}` - Tags: defi, lending, liquidation, risk, health-factor, aave, compound, morpho, onchain, base, telemetry ### `GET /bridge/screen` — $0.05 A single safe/caution/avoid verdict for a cross-chain bridge, built for routing and risk agents that must choose a bridge before moving funds. Pass a bridge by name, slug or alias (Stargate/LayerZero, Across, Hop, Wormhole/Portal, Axelar, Chainlink CCIP, Synapse, Celer cBridge, Circle CCTP, WBTC, and the canonical Arbitrum, Base, Optimism, zkSync Era, Linea, Polygon and Starknet bridges, among others). We fuse four dimensions into one deterministic 0-to-100 risk score (higher is riskier): the bridge's trust model and its base severity (canonical rollup escrow versus light client, optimistic, liquidity network, external validator/DVN set, multisig or custodial wrapped-mint); its exploit track record joined from DefiLlama's hack dataset, weighted by loss magnitude, recency and funds returned, with a repeat-offender bump; its TVL depth from DefiLlama as a liquidity-buffer signal; and governance/upgrade risk from upgradeable admin keys and missing exit windows. For canonical L2 bridges we also attach L2Beat's live risk rows (sequencer failure, state validation, data availability, exit window, proposer failure) and rollup stage. Every component, its weight and a plain-language reason list are returned, so the score is fully reproducible — a formula in code, no model or LLM. Coverage is data-driven: a new bridge is one registry row. Sources are open and keyless (DefiLlama free-tier, L2Beat MIT-licensed) and cited on every response; this is our own fusion, not a resold dashboard. Bad input is a 400, an unknown bridge is a 404, a total upstream failure is a 502, never a 500; a failing enrichment degrades to a partial flag. Hosts are fixed server-side, so there is no SSRF surface. Bridge-safety intelligence, not financial advice. - Query params: `{"bridge": "stargate"}` - Example response: `{"bridge": "Stargate / LayerZero", "risk_score": 47, "tier": "caution", "trust_model": "external-validator", "tvl_usd": 72000000.0, "exploit_summary": {"incidents": 0, "total_lost_usd": 0.0}, "components": {"trust": 0.55, "exploit": 0.0, "tvl": 0.86, "governance": 0.7}, "partial": false, "ts": 1752000000}` - Tags: bridge, cross-chain, safety, risk-score, trust-model, exploit-history, tvl, defi, routing, interoperability, l2beat, intelligence ### `GET /bridge/exploits` — $0.01 The exploit track record for cross-chain bridges — the single largest loss vector in crypto. Pass a bridge to get its own incident history: each hack with the date, USD lost, funds returned (if any), the attack technique and classification, and the chains involved, plus totals and the worst technique. Omit the bridge and you get a leaderboard of every incident flagged as a bridge hack in DefiLlama's dataset, ranked by USD lost, with the aggregate total — a fast way to see which bridges and which attack classes have cost the most. Incidents are joined to our covered bridge set by name and alias and normalized into a stable shape. This is the same exploit signal that feeds the /bridge/screen risk score, exposed on its own as a cheap lookup. The source is DefiLlama's keyless hack dataset, cited on every response and fused by us, not a resold feed. An unknown named bridge is a 404, a total upstream failure is a 502, never a 500. Hosts are fixed server-side, so there is no SSRF surface. Security intelligence, not financial advice. - Query params: `{"bridge": "wormhole"}` - Example response: `{"bridge": "Wormhole / Portal", "incidents": 1, "total_lost_usd": 326000000.0, "total_returned_usd": 326000000.0, "worst_technique": "Signature verification bug", "history": [{"name": "Wormhole", "amount_usd": 326000000.0, "date": 1644883200}], "ts": 1752000000}` - Tags: bridge, exploit, hack, security, cross-chain, post-mortem, loss, defi, track-record, leaderboard, risk, intelligence ### `GET /bridge/tvl` — $0.01 Total value locked and per-chain liquidity concentration for a cross-chain bridge. We return the bridge's TVL in USD from DefiLlama and, where DefiLlama exposes it, the TVL split across each chain the bridge secures, sorted largest first, plus a top-chain-concentration ratio (the largest single chain's share of TVL, where 1.0 means all liquidity sits on one chain). Deep, well-distributed liquidity is a healthier routing target than a thin or highly concentrated pool; this is the liquidity-depth signal that also feeds the /bridge/screen risk score, exposed on its own. Pass a bridge by name, slug or alias. The source is DefiLlama's keyless free-tier endpoints, cited on every response and normalized by us — not the Pro-gated bridges dataset and not a resale. An unknown bridge is a 404, a total upstream failure is a 502, never a 500; a missing per-chain breakdown degrades to a partial flag with the headline TVL still returned. Hosts are fixed server-side, so there is no SSRF surface. Intelligence, not financial advice. - Query params: `{"bridge": "across"}` - Example response: `{"bridge": "Across", "tvl_usd": 21000000.0, "per_chain_tvl_usd": {"Ethereum": 14000000.0, "Arbitrum": 4200000.0, "Base": 2800000.0}, "top_chain_concentration": 0.66, "partial": false, "ts": 1752000000}` - Tags: bridge, tvl, liquidity, cross-chain, concentration, defi, depth, routing, defillama, capital, risk, intelligence ### `GET /bridge/route` — $0.05 A safety ranking of the bridges that can move an asset across a specific corridor, for agents choosing how to route a cross-chain hop. Give a source chain and a destination chain (chain names and common aliases like eth, arb, op, matic, bnb are normalized), and optionally the asset and amount for context. We find every bridge in our registry that covers both endpoints of the corridor and score each with the same deterministic fusion as /bridge/screen — trust-model severity, exploit history, TVL depth and governance/upgrade risk — then sort them safe-first and name the recommended (lowest-risk) bridge, with the reasons for each. This turns 'which bridge should I use from Ethereum to Arbitrum for USDC' into one call over cited, open data. Coverage is registry-driven, so adding a bridge or a corridor is a data change, not code. Missing src or dst is a 400, a corridor with no covered bridge is a 404, a total upstream failure is a 502, never a 500; a failing enrichment degrades to a partial flag. Hosts are fixed server-side, so there is no SSRF surface. Routing intelligence, not financial advice. - Query params: `{"src": "ethereum", "dst": "arbitrum", "asset": "USDC"}` - Example response: `{"corridor": {"src": "ethereum", "dst": "arbitrum", "asset": "USDC"}, "bridge_count": 3, "recommended": {"bridge": "Arbitrum Bridge", "risk_score": 22, "tier": "safe"}, "bridges": [{"bridge": "Arbitrum Bridge", "risk_score": 22, "tier": "safe"}, {"bridge": "Across", "risk_score": 31, "tier": "safe"}], "partial": false, "ts": 1752000000}` - Tags: bridge, route, corridor, cross-chain, routing, safety, risk-score, recommendation, defi, interoperability, agent, intelligence ### `GET /ucc/debtor` — $0.03 Encumbrance and secured-lending due-diligence for a business borrower or counterparty — the mandatory pre-lending step of checking existing security interests and lien priority, delivered as one cited JSON call for an agentic underwriting or vendor-risk workflow. Input: a business/debtor name and a two-letter state code for the state UCC index to search. The service resolves the debtor name by fuzzy-clustering its filing variants (corporate suffixes, store numbers and punctuation normalized away), fetches its UCC and lien filings from the official state Secretary-of-State open-data portal, and returns: the matched entity clusters with a match score and filing count each; the normalized filings with the filing number, lien class (UCC-1 secured financing, federal or state or municipal tax lien, judgment, labor and more), the secured party holding the lien, the filed and lapse dates, and a COMPUTED effective status (active, lapsed, released or terminated) — computed because the raw record status is not reliable, so status is derived from the lapse date and any release or termination action; and a summary with the number of distinct active secured creditors, the total active liens, flags for present federal, state and municipal tax liens, judgment and labor liens, the earliest and latest lien dates, the filings lapsing within twelve months, and human-readable distress signals. Coverage is per-state and honestly labeled (Connecticut at launch, more states added as data adapters, never pretending to be national); the collateral description is surfaced only where the source publishes it. Every response is cited to the dataset and filing accession numbers and carries a public-record disclaimer. Deterministic, no LLM, keyless. Informational public UCC/lien records, not a credit decision and not legal advice. - Query params: `{"debtor": "STOP & SHOP", "state": "CT"}` - Example response: `{"query": {"debtor": "STOP & SHOP", "state": "CT"}, "match_count": 1, "filing_count": 3, "summary": {"active_secured_creditors": 1, "total_active_liens": 3, "has_federal_tax_lien": false, "has_municipal_tax_lien": true, "distress_signals": ["active municipal tax lien present"]}, "coverage": {"states": ["CT"], "license": "Public Domain"}, "disclaimer": "Informational public UCC/lien records; not a credit decision."}` - Tags: ucc, lien, secured-lending, encumbrance, underwriting, credit-risk, due-diligence, financing-statement, tax-lien, judgment-lien, business, kyb, b2b-credit ### `GET /ucc/creditor` — $0.02 The reverse lens on the same public UCC/lien data: given a secured party — a lender, bank, equipment financier or factor — return the business debtors on which that party currently holds ACTIVE liens in a given state, each with the count of active liens, the lien classes, the debtor city and the most recent filing date. This is a lender-portfolio and competitive-intelligence view for an agent mapping who a financier has lent to, or checking a counterparty's book of secured positions. The secured-party name is fuzzy-matched, the effective status is computed the same way as the debtor route so only genuinely active liens are counted, and the response is cited to the dataset and filing accession numbers with a public-record disclaimer. Coverage is per-state and honestly labeled. Deterministic, no LLM, keyless. Informational public record, not a credit decision. - Query params: `{"secured_party": "ALLY BANK", "state": "CT"}` - Example response: `{"query": {"secured_party": "ALLY BANK", "state": "CT"}, "debtor_count": 2, "active_lien_count": 2, "debtors": [{"debtor": "Safety Marking LLC", "active_lien_count": 1, "lien_classes": ["ucc_secured"], "latest_filed": "2023-08-03"}], "coverage": {"states": ["CT"], "license": "Public Domain"}, "disclaimer": "Informational public UCC/lien records; not a credit decision."}` - Tags: ucc, lien, secured-party, creditor, lender, portfolio, competitive-intelligence, financing-statement, business, b2b ### `GET /trader/perps` — $0.10 A normalized, cited brief of every open Hyperliquid perpetual position held by a single EVM address — the address/wallet axis of crypto-derivatives intelligence (what THIS trader is doing), the complement of market-wide funding/OI. Read from the Hyperliquid public Info API (clearinghouseState) — decentralized-protocol / on-chain state, public and keyless, not a resold centralized feed and not PII. For each position we return the coin, the direction (long or short, from the sign of the signed size), the size in coins, the USD notional, the leverage and its cross/isolated type, the entry price, an implied mark price, the unrealized PnL, the return on equity, the liquidation price and the percent distance from mark to that liquidation price. Across the account we compute the account leverage (total notional over account value), the aggregate unrealized PnL, the concentration (the largest position's share of gross notional) and a deterministic 0-to-100 liquidation-risk score that is the notional-weighted proximity of the positions to their liquidation prices — a formula in code, no model or LLM, so it is reproducible (documented in /trader/sources). Pass only a 0x EVM address; the upstream host is fixed server-side, so there is no SSRF surface. A bad address is a 400, an address with no positions returns an empty set, an upstream failure is a 502, never a 500. This is public-data intelligence, not financial advice. - Query params: `{"address": "0xf5d81a135f756ca16544e53c20fc20643ec3ad53"}` - Example response: `{"address": "0xf5d8...ad53", "account": {"account_value": 2159013.21, "total_notional": 1766794.28}, "positions": [{"coin": "BTC", "direction": "short", "notional_usd": 1640497.76, "leverage": 3.0, "unrealized_pnl": 6685.23, "distance_to_liq_pct": 127.5}], "num_positions": 19, "signals": {"account_leverage": 0.82, "aggregate_upnl": 12345.6, "concentration": 0.93, "liq_risk_score": 4, "liq_risk_verdict": "moderate"}, "partial": false, "ts": 1752000000}` - Tags: hyperliquid, perps, positions, wallet, address, liquidation, leverage, smart-money, defi, on-chain, intelligence ### `GET /trader/polymarket` — $0.10 A single fused wallet brief for a Polymarket trader by EVM address — the address/wallet axis of prediction-market intelligence (what THIS wallet is betting), the complement of market-wide event odds. We combine three public Polymarket data-api endpoints — positions, portfolio value and recent activity — which index the on-chain USDC prediction markets on Polygon (public on-chain state, keyless, not a resold centralized feed and not PII). For each open position we return the market title, the chosen outcome, the size, the average entry price versus the current price, the current value, the unrealized and realized PnL, the percent PnL and whether it is redeemable. We report the portfolio value, the recent trade activity (type, side, size, USDC, price, timestamp, market), the totals (aggregate realized and unrealized PnL and the open count) and derived signals — a size-weighted conviction (how decisive the average stakes are, away from a coin-flip), the concentration of the largest position and a realized-win proxy (the share of resolved positions in profit). Money is real on-chain USDC. Each of the three sources is best-effort: one failing is reported under errors with a partial flag and the rest are returned; only a total failure is a 502, never a 500. Pass only a 0x EVM address; the host is fixed server-side, so there is no SSRF surface. Public-data intelligence, not financial advice. - Query params: `{"address": "0xfcdc071df7080c214196bb0b3b751e5417f9d8e3"}` - Example response: `{"address": "0xfcdc...d8e3", "open_positions": [{"title": "Solana Up or Down", "outcome": "Up", "size": 1793.7, "avg_price": 0.076, "cur_price": 0.0, "current_value": 0.0, "unrealized": -136.34, "realized": 306.55, "redeemable": true}], "portfolio_value": 583.56, "totals": {"total_unrealized": -136.34, "total_realized": 306.55, "num_open": 10}, "signals": {"conviction": 0.41, "concentration": 0.5, "win_proxy": 0.6}, "money_type": "real", "partial": false, "ts": 1752000000}` - Tags: polymarket, wallet, positions, pnl, prediction-market, address, on-chain, portfolio, intelligence ### `GET /trader/vaults` — $0.10 Hyperliquid vault intelligence with two modes in a single route. In single-vault mode you pass a vault address and get an overview from the public Info API (vaultDetails): the name, the leader address, the TVL (summed from follower equity), the APR, the age in days, the maximum peak-to-trough drawdown over the all-time account-value history, the latest pnl trend, whether the vault is closed, the follower count and a deterministic 0-to-100 quality score that blends APR, TVL depth and drawdown control (each saturating at a documented reference, weights renormalized — a formula in code, no LLM). In discovery mode you omit the vault and get a ranked list of the top open vaults by TVL or APR, streamed out of the public vaults stats feed. That feed is large, so we stream-parse it into a bounded top-N (never loading it whole) and cache only the trimmed projection. Sources are decentralized-protocol public state, keyless, cited with attribution — not a resold centralized feed. A bad vault address is a 400, an unknown vault is a 404, an upstream failure is a 502, never a 500. Hosts are fixed server-side, so there is no SSRF surface. Public-data intelligence, not financial advice. - Query params: `{"sort": "tvl", "limit": 20}` - Example response: `{"mode": "list", "sort": "tvl", "count": 2, "vaults": [{"name": "Hyperliquidity Provider (HLP)", "vault_address": "0xdfc2...f303", "tvl": 164944875.21, "apr": -0.0001, "is_closed": false}], "partial": false, "ts": 1752000000}` - Tags: hyperliquid, vault, tvl, apr, yield, strategy, defi, on-chain, intelligence ### `GET /smartmoney/leaderboard` — $0.10 A ranked smart-money leaderboard from the Hyperliquid public leaderboard stats feed: the top traders by a chosen performance window (day, week, month or all-time) and metric (realized-and-unrealized PnL, ROI or volume). For each leader we return the address, the display name if any, the account value, the ranked metric value, the PnL/ROI/volume for that window and a consistency signal that is true only when the trader is profitable in every window present. The feed is large (tens of thousands of rows), so we stream-parse it into a bounded top-N (never loading it whole) and cache only the trimmed projection. Alongside the structured leaders[] we return a `summary` — a compact human-readable top-N of "rank. name/addr - AUM $X - PnL $Y - ROI Z%" lines (a presentation of the same projection, so ranking bots keep using leaders[] unchanged). With follow set to true we additionally dial the current open perpetual positions of the single top-ranked address (reusing the perps normalization) so you can literally follow the smart money — capped at one address to prevent abuse. Sources are decentralized-protocol public state, keyless, cited — not a resold centralized feed and not PII. A bad window or sort is a 400, an upstream failure is a 502, never a 500; the follow dial failing is reported under errors with a partial flag. Hosts are fixed server-side, so there is no SSRF surface. Public-data intelligence, not financial advice. - Query params: `{"window": "week", "sort": "pnl", "limit": 20}` - Example response: `{"window": "week", "sort": "pnl", "count": 1, "leaders": [{"address": "0x85ec...2052", "account_value": 62493139.51, "pnl": 693406.51, "roi": 0.0126, "consistency": false}], "summary": ["1. 0x85ec…2052 — AUM $62.5M — PnL $693.4K — ROI 1.26%"]}` - Tags: smart-money, leaderboard, top-traders, hyperliquid, pnl, roi, ranking, follow ### `GET /pkg/preflight` — $0.03 A one-call defensive screen a coding agent runs on a package name BEFORE it installs the dependency, to catch slopsquatting / package-hallucination and malicious-install attacks. The caller supplies only ecosystem + name; nothing arbitrary is fetched (fixed upstream hosts). Fuses five keyless public signals into one deterministic verdict: (1) existence in the official registry (npm / PyPI) — a non-existent name is an attacker-registrable slot; (2) OSV.dev malware flags, where a MAL- advisory is the OpenSSF malicious-packages feed; (3) typosquat distance — Damerau-Levenshtein plus homoglyph folding against a bundled top-N popularity list, so a name one edit from a popular package that itself does not exist or is young/low-download is flagged; (4) membership in a provenanced hallucination corpus of names LLMs are documented to invent; (5) freshness metadata (age in days, weekly downloads, single maintainer, npm install/postinstall scripts). Output is a safe / caution / block verdict with the per-dimension booleans, the nearest popular package and edit distance, and a reasons list. Coverage grows by DATA (a new ecosystem or a fresher list is a data swap). Unknown ecosystem -> 400. Supply-chain indicators, not a guarantee; a safe verdict is not an endorsement. - Query params: `{"ecosystem": "pypi", "name": "reqeusts"}` - Example response: `{"ecosystem": "pypi", "package": "reqeusts", "verdict": "block", "exists": false, "is_hallucinated": false, "is_typosquat": true, "is_malicious": false, "nearest_popular": "requests", "edit_distance": 1, "reasons": ["does not exist and is edit-distance 1 from popular 'requests'"], "disclaimer": "Automated supply-chain indicators, not a guarantee."}` - Tags: supply-chain, security, slopsquat, typosquat, malware, dependencies, npm, pypi, agent, preflight ### `POST /pkg/preflight/batch` — $0.15 The batch form of the install-safety preflight, for screening an entire dependency list or a parsed manifest in one paid call (the manifest-scan path). The body is a JSON array or a {ecosystem, packages:[...]} object; each entry may be a bare name, an 'npm:name' / 'pypi:name' prefixed string, or an object with name + ecosystem, so a caller can mix ecosystems. Each package gets the same deterministic five-signal verdict as the single route (existence, OSV malware, typosquat distance to a popular package, hallucination-corpus membership, freshness metadata), and the response adds a summary partitioning the input into blocked / caution / safe with counts, so an agent can gate an install step on a single field. Capped at 100 packages per call; entries with an unknown or missing ecosystem come back with verdict 'unknown' rather than failing the whole batch. Supply-chain indicators, not a guarantee. - Request body: `{"ecosystem": "npm", "packages": ["react", "unused-imports", "loadsh"]}` - Example response: `{"object": "batch", "count": 3, "summary": {"blocked": ["unused-imports", "loadsh"], "caution": [], "safe": ["react"], "block_count": 2, "caution_count": 0, "safe_count": 1}, "results": [{"ecosystem": "npm", "package": "react", "verdict": "safe"}], "disclaimer": "Automated supply-chain indicators, not a guarantee."}` - Tags: supply-chain, security, slopsquat, typosquat, malware, dependencies, manifest, batch, npm, pypi, agent ### `GET /license/check` — $0.03 One-call software-license due-diligence for a coding, SBOM or M&A-diligence agent about to add a dependency or ship a release. Supply an ecosystem (npm, PyPI, Go, Maven, Cargo, NuGet), a package name and optionally a version, plus your project's own target license and how you distribute (saas, binary or internal), and get back the full transitive dependency tree with the declared SPDX license of every node (from Google's deps.dev graph, with a ClearlyDefined fallback), the exact copyleft contamination points (GPL, AGPL, SSPL, LGPL, MPL), and a single overall verdict: safe, attribution-required, copyleft-risk or incompatible. The verdict is computed from an encoded FSF/OSI compatibility matrix that is target-license-aware and distribution-aware, so it captures the cases a bare license field misses: an AGPL or SSPL dependency triggers a source-disclosure obligation for a SaaS but not for an internal tool; a GPL dependency blocks closed-binary distribution while being fine for SaaS; the GPL-2.0-only and Apache-2.0 patent-clause incompatibility; LGPL and MPL dynamic-linking and file-scope obligations; and permissive attribution and NOTICE duties. Undetermined licenses (NOASSERTION) are flagged conservatively with a coverage block, the transitive node count is capped for the memory budget with a truncated flag, and a briefly-down upstream degrades a node to unknown rather than failing (never a 500). The moat is the transitive tree plus the target-and-distribution-aware verdict, not a license resale. These are automated indicators, not legal advice and not a guarantee; verify against the authoritative license texts before acting. - Query params: `{"ecosystem": "npm", "name": "express", "target_license": "MIT", "distribution": "saas"}` - Example response: `{"ecosystem": "npm", "package": "express", "version": "4.18.2", "target_license": "MIT", "distribution": "saas", "verdict": "safe", "dependency_count": 71, "license_summary": {"by_class": {"permissive": 70, "weak-copyleft": 1}}, "contamination_points": [], "coverage": {"licenses_resolved": 71, "complete": true, "truncated": false}, "disclaimer": "Automated indicators, not legal advice."}` - Tags: license, compliance, copyleft, spdx, open-source, gpl, agpl, lgpl, dependencies, sbom, attribution, due-diligence ### `POST /license/scan` — $0.15 The batch form of the license-compliance verdict, for screening a whole dependency set or a parsed manifest in one paid call. The JSON body carries a dependencies array plus your target_license and distribution; each entry may be a bare name, a name-at-version string, an ecosystem-prefixed string such as pypi-colon-name, or an object with name, version and ecosystem, and a parsed package.json object (name to version-spec) is accepted directly, so an agent can hand over exactly what it read from a lockfile. Every dependency is resolved to its declared SPDX license via deps.dev with a ClearlyDefined fallback and scored through the same encoded FSF/OSI matrix as the single-package route (target-license-aware and distribution-aware), and the response adds an aggregate verdict, a per-class and per-verdict summary, the worst contamination point and the list of undetermined licenses, so an agent can gate a merge or release on one field. Capped per call for the memory budget; entries whose ecosystem or version cannot be resolved come back marked unknown rather than failing the whole scan. Automated indicators, not legal advice and not a guarantee. - Request body: `{"ecosystem": "npm", "target_license": "Apache-2.0", "distribution": "binary", "dependencies": ["express@4.18.2", "left-pad@1.3.0"]}` - Example response: `{"target_license": "Apache-2.0", "distribution": "binary", "verdict": "safe", "dependency_count": 2, "license_summary": {"by_verdict": {"attribution-required": 2}}, "worst_contamination": null, "coverage": {"count": 2, "resolved": 2, "unknown": 0}, "disclaimer": "Automated indicators, not legal advice."}` - Tags: license, compliance, copyleft, spdx, manifest, sbom, gpl, agpl, dependencies, scan, attribution, due-diligence ### `GET /license/compat` — $0.01 The cheap, instant, high-margin core of the service: a pure-compute license-compatibility check with no network, no keys and no data fetched (canon #10). Supply either a list of SPDX license ids or a single SPDX expression using AND, OR and WITH and parentheses, together with your project's target license and a distribution model of saas, binary or internal, and get back the compatibility verdict of safe, attribution-required, copyleft-risk or incompatible, the concrete obligation (attribution or NOTICE, dynamic-link isolation, whole-work copyleft, network source disclosure, or replace-or-relicense) and human reasons. The evaluator understands SPDX expression semantics: AND takes the most restrictive term, OR the least restrictive choice, and a recognised GPL linking exception such as Classpath downgrades strong copyleft to file scope. It applies the same encoded FSF/OSI matrix the tree routes use, including the AGPL and SSPL network trigger for SaaS, GPL whole-work conveyance, and the explicit GPL-2.0-only and Apache-2.0 patent-clause incompatibility. Use it to settle a single compatibility question without paying for a dependency-tree crawl. Automated indicators, not legal advice and not a guarantee. - Query params: `{"licenses": ["GPL-3.0-only", "MIT"], "target_license": "Apache-2.0", "distribution": "binary"}` - Example response: `{"mode": "list", "licenses": ["GPL-3.0-only", "MIT"], "target_license": "Apache-2.0", "distribution": "binary", "verdict": "incompatible", "worst": {"license": "GPL-3.0-only", "verdict": "incompatible"}, "disclaimer": "Automated indicators, not legal advice."}` - Tags: license, compatibility, spdx, copyleft, compute, gpl, agpl, lgpl, matrix, attribution, compliance ### `GET /docs/library` — $0.01 The flagship route: one call returns the fresh, version-specific documentation a coding agent needs to generate correct code against a library or API, instead of hallucinating a stale or non-existent method. Supply an `ecosystem` (npm, pypi, crates or github; aliases pip/python, cargo/rust, node, gh are accepted) and a `name` (for github, owner/repo), optionally a `version` to pin and a `topic` to focus on. The route resolves the package's identity across the official keyless registries — latest version plus the requested version, SPDX license, repository, homepage and documentation URLs, and the recent version list — then returns the single README or llms.txt section whose markdown heading matches your topic (or the introduction when no topic is given), byte-capped with an honest `truncated` flag. Every slice carries a provenance citation (source URL, source and version) so the agent can trust and re-fetch it. When the package's documentation host publishes an llms.txt (the llmstxt.org agent convention) and is on our curated allowlist, a focused llms.txt section is added. It returns metadata and minimal provenance-cited example slices only — it never rehosts whole documents, respects robots and bypasses no paywall. Unknown ecosystem returns 400, a missing package returns 404, never 500. - Query params: `{"name": "requests", "ecosystem": "pypi", "topic": "authentication"}` - Example response: `{"found": true, "identity": {"ecosystem": "pypi", "name": "requests", "latest_version": "2.32.3", "resolved_version": "2.32.3", "license": "Apache-2.0", "repository": "https://github.com/psf/requests", "versions_count": 163}, "topic": "authentication", "doc": {"heading": "Authentication", "matched_topic": true, "content": "## Authentication\n\nrequests supports HTTP Basic Auth...", "truncated": false, "provenance": {"source_url": "https://pypi.org/project/requests/2.32.3/", "source": "pypi", "version": "2.32.3"}}, "license": "Apache-2.0", "attribution": ["PyPI (pypi.org) — Python Software Foundation."]}` - Tags: docs, documentation, library, api, coding-agent, version-pinned, npm, pypi, crates, github, context7, readme, reference ### `GET /docs/snippet` — $0.008 Return real, runnable code examples for a library so a coding agent grounds its output in actual usage rather than inventing an API. Supply an `ecosystem` and `name` (github as owner/repo), optionally a `version`, and a `topic` or `symbol` to focus the match. The route fetches the package README (and, for crates or when the registry README is empty, the version-pinned GitHub raw README), scans its fenced code blocks, and returns the ones whose language, code text or nearest markdown heading contains your topic keyword — or all blocks when no topic is given. Each snippet carries its detected language, the nearest heading for context, a provenance citation (source URL, source, version) and an honest `truncated` flag; the number of blocks and the size of each are capped for a bounded response. Snippets are minimal example slices under the package's own open-source license with attribution; whole documents are never rehosted. Unknown ecosystem returns 400, a missing package returns 404, never 500. - Query params: `{"name": "axios", "ecosystem": "npm", "topic": "request"}` - Example response: `{"found": true, "identity": {"ecosystem": "npm", "name": "axios", "resolved_version": "1.7.9"}, "topic": "request", "count": 2, "snippets": [{"language": "js", "code": "const res = await axios.get('/user?ID=12345')", "heading": "Example", "truncated": false, "provenance": {"source_url": "https://www.npmjs.com/package/axios", "source": "npm", "version": "1.7.9"}}], "capped": true, "attribution": ["npm public registry (registry.npmjs.org)."]}` - Tags: docs, code, snippet, example, coding-agent, usage, sample, npm, pypi, crates, github, reference ### `GET /docs/changelog` — $0.008 Answer the upgrade-safety question directly: what changed between two versions of a library. Supply an `ecosystem`, a `name` (github as owner/repo) and a `from_version` and `to_version`, and the route resolves the package's GitHub repository, pulls its published releases and returns the ones whose tag falls after from_version and up to and including to_version — each with its tag, name, publish date, release URL, the byte-capped release notes and any surfaced breaking-change markers (removed, deprecated, no longer, dropped support, migration and similar). It also lists the registry versions between the two and a top-level breaking_changes summary. This is a moat over topic-based docs tools that do not diff versions. When a package publishes no GitHub Releases the response is honest (available:false with the registry version list) rather than fabricated. Release notes are cited to their source and never rehosted wholesale. Unknown ecosystem returns 400, a missing package returns 404, never 500. - Query params: `{"name": "react", "ecosystem": "npm", "from_version": "18.0.0", "to_version": "19.0.0"}` - Example response: `{"found": true, "identity": {"ecosystem": "npm", "name": "react", "latest_version": "19.0.0"}, "from_version": "18.0.0", "to_version": "19.0.0", "versions_between": ["18.2.0", "18.3.1", "19.0.0"], "releases": [{"version": "v19.0.0", "published_at": "2024-12-05T00:00:00Z", "has_breaking": true, "breaking_markers": ["removed"], "notes": "React 19 release notes..."}], "breaking_changes": ["v19.0.0"], "available": true, "attribution": ["GitHub REST API (github.com)."]}` - Tags: docs, changelog, release-notes, version, upgrade, breaking-changes, coding-agent, diff, npm, pypi, crates, github ### `GET /answer` — $0.03 Cited retrieval-augmented answer for a natural-language question. The route runs a multi-engine web search, fetches and cleans the top pages (trafilatura, robots.txt-respecting, public content only), and synthesizes a concise answer that cites ONLY those retrieved sources with inline [n] markers — an anti-hallucination prompt forbids outside knowledge. Returns the answer, the source list (url+title), the sources actually used, and the model. Tunable `max_sources` (1-5), `timelimit` freshness and `region` locale. Always a valid 200: if nothing relevant is found it returns `insufficient:true`; if synthesis is momentarily unavailable it still returns the sources with `synthesis_available:false` (never a 5xx). - Query params: `{"query": "what is the x402 payment protocol"}` - Example response: `{"query": "what is the x402 payment protocol", "answer": "x402 is an open protocol for machine payments over HTTP 402 [1].", "sources": [{"url": "https://x402.org", "title": "x402"}], "used_sources": ["https://x402.org"], "model": "deepseek-v4-flash"}` - Tags: answer, cited, rag, research, question, synthesis, sources, web, citations ### `GET /news/brief` — $0.04 Topic situation brief built as RAG over fresh news. The route runs a keyword news search (dated headlines across web news engines), reads and cleans the top articles, and synthesizes a short brief of what is currently happening plus a list of key points — citing ONLY the retrieved articles with inline [n] markers (anti-hallucination prompt, no outside knowledge). Returns the brief, the key points, the dated source list (title/url/date/source) and the model. Tunable `max_sources` (1-10), `timelimit` freshness (default past week) and `region` locale. Always a valid 200: empty results return `insufficient:true`, a momentary synthesis outage returns the sources with `synthesis_available:false` (never a 5xx). - Query params: `{"topic": "ethereum etf flows", "timelimit": "w"}` - Example response: `{"topic": "ethereum etf flows", "brief": "Spot ETH ETFs saw net inflows this week [1].", "key_points": ["Inflows led by major issuers [1]"], "sources": [{"title": "ETH ETF weekly", "url": "https://example.com/eth", "date": "2026-07-15", "source": "Example"}], "model": "deepseek-v4-flash"}` - Tags: news, brief, situation, summary, analysis, current-events, research, synthesis, cited, fresh ### `GET /rwa/list` — $0.005 The discovery grain for tokenized real-world-asset intelligence. It returns the universe of RWA products DefiLlama tracks across the RWA, RWA Lending and Treasury Manager categories (roughly 180 products), each normalized to a compact record: the slug used as the join key by the product, yield and category routes, the full name, the token symbol when one is published, the NORMALIZED sub-category (tokenized treasury, private credit, tokenized fund, commodity, real estate or tokenized equity), the backing type (US treasuries, private-credit loans, physical gold, real estate, money market or mixed), the resolved issuer or manager, the total value locked, and the list of chains the product is deployed on. Results are ranked by TVL so the largest products come first. Narrow the set by sub-category to compare tokenized treasuries against private credit, by chain to see what is available where, or by issuer to list one manager's products. Coverage is data-driven so a newly listed RWA protocol is picked up automatically. Every response is attributed to the open-data source. An upstream failure returns 502, never a 500. The classification is a derived signal, not financial advice. - Query params: `{"category": "tokenized-treasury", "limit": 5}` - Example response: `{"count": 1, "total_matched": 1, "products": [{"slug": "blackrock-buidl", "name": "BlackRock BUIDL", "symbol": "BUIDL", "sub_category": "tokenized-treasury", "backing_type": "us-treasuries", "issuer": "BlackRock", "tvl": 3415141436.0, "chains": ["Ethereum"]}], "attribution": ["Source: DefiLlama (open data)"]}` - Tags: rwa, tokenized, real-world-asset, list, catalog, treasury, private-credit, tvl, issuer, defillama, crypto ### `GET /rwa/product` — $0.02 The flagship due-diligence object a treasury or allocator agent reads before it compares or holds a tokenized real-world asset. Give a DefiLlama slug, a curated token symbol such as BUIDL, PAXG, XAUt, USDY or OUSG, or an issuer paired with a product name, and it returns one fused profile. Identity resolves the issuer or manager, the token symbol, a short description and the product URL. Classification returns the normalized sub-category and backing type with a plain-language note, well beyond the raw platform's coarse RWA tag. The TVL facet returns total value locked and the per-chain distribution. The growth trend reports the absolute and percentage change in TVL over 7, 30 and 90 days, computed from the tail of the historical series. The yield facet returns pool-level APY, base and reward APY and the 30-day mean from the yields feed, plus a TVL-weighted average, or reports availability false when the product has no tracked pools. The on-chain facet reads the ERC-20 totalSupply of the curated token straight from chain state as an independent cross-check, and reports availability false for a product without a curated contract. Sources are cited per facet. Unknown product returns 404, an upstream failure 502, never a 500. Everything here is a derived signal over public open data, explicitly not financial advice. - Query params: `{"slug": "blackrock-buidl"}` - Example response: `{"identity": {"slug": "blackrock-buidl", "name": "BlackRock BUIDL", "symbol": "BUIDL", "issuer": "BlackRock"}, "classification": {"sub_category": "tokenized-treasury", "backing_type": "us-treasuries"}, "tvl": {"total": 3415141436.0}, "growth_trend": {"windows": {"30d": {"pct_change": 4.2}}}, "yield": {"available": true, "avg_apy": 4.5}, "onchain_verification": {"available": true, "onchain_total_supply": 191594864.6}, "citations": ["Source: DefiLlama (open data)"]}` - Tags: rwa, tokenized, real-world-asset, profile, tvl, yield, apy, backing, issuer, on-chain, verification, treasury, crypto ### `GET /rwa/yield` — $0.008 A focused yield read for a single tokenized real-world-asset product, ideal for comparing carry across treasuries and private credit. It resolves the product by slug or symbol, then returns the pools the yields feed tracks for it, each with the current APY, the base and reward APY split, the 30-day mean APY and the 30-day percentage change, alongside pool TVL. It also computes a TVL-weighted average APY across the product's pools as an honest single number. When the product has no tracked pools the yield facet reports availability false rather than inventing a figure. Values are attributed to the open-data source. Unknown product returns 404, an upstream failure 502, never a 500. The yield is a reported signal, not a guarantee and not financial advice. - Query params: `{"slug": "ondo-yield-assets"}` - Example response: `{"slug": "ondo-yield-assets", "name": "Ondo Yield Assets", "sub_category": "tokenized-treasury", "yield": {"available": true, "pool_count": 11, "avg_apy": 3.53, "pools": [{"symbol": "USDY", "chain": "Ethereum", "apy": 4.35}]}, "attribution": ["Source: DefiLlama Yields (open data)"]}` - Tags: rwa, tokenized, yield, apy, pools, treasury, private-credit, defillama, crypto ### `GET /rwa/category` — $0.01 The market lens over the tokenized real-world-asset landscape. Give a normalized sub-category such as tokenized treasury, private credit, tokenized fund, commodity, real estate or tokenized equity, and it aggregates every product in that class into a market picture: the summed TVL, the top products ranked with each one's share of the category TVL, an issuer-concentration read that names the largest issuer and its TVL share across a count of distinct issuers, and the growth trend of the leading product as a momentum proxy. Called with no category it returns a market-wide roll-up: every sub-category with its product count, total TVL and share of the whole RWA market. This is a fusion and aggregation, not a raw dump of one dashboard. Every response is attributed to the open-data source. An upstream failure returns 502, never a 500. The aggregates are derived signals over public data, not financial advice. - Query params: `{"category": "tokenized-treasury"}` - Example response: `{"category": "tokenized-treasury", "product_count": 20, "total_tvl": 12000000000.0, "top_products": [{"slug": "blackrock-buidl", "issuer": "BlackRock", "tvl": 3415141436.0, "tvl_share": 0.28}], "issuer_concentration": {"distinct_issuers": 12, "top_issuer": "BlackRock"}, "attribution": ["Source: DefiLlama (open data)"]}` - Tags: rwa, tokenized, category, market, aggregate, tvl, issuer, concentration, treasury, private-credit, defillama, crypto ### `GET /model/route` — $0.02 The flagship route and the core computational value: instead of hardcoding a model, an orchestrating or coding agent asks for the cheapest model that still passes its quality and capability bar for a given task, and routes sub-calls to it. Supply a `task` (coding, reasoning, vision, tool-use, long-context, cheap-chat or general) and any constraints — `min_context`, `needs_tools`, `needs_vision`, `needs_reasoning`, `max_input_price` and `max_output_price` (USD per million tokens), `min_benchmark` (Aider coding pass rate percent) and a `provider` filter. The route filters the fused index of roughly a thousand models to those passing every constraint, sorts them cheapest-first by a blended input and output price, and returns the ranked list with each model's normalized per-million prices, context window, capability tags, coding benchmark when known and per-source citations, plus a `recommended` top pick and a deterministic `rationale` string. Prices are normalized to per-million USD from both LiteLLM (per-token) and models dev (already per-million); on a divergence both values are kept, each cited, with no invented truth. When a source is unavailable the route degrades honestly and reflects it in `sources_used` and `degraded` rather than failing. No LLM runs; the result is fully deterministic and reproducible. - Query params: `{"task": "coding", "min_context": 200000, "needs_tools": true, "max_output_price": 10}` - Example response: `{"task": "coding", "recommended": {"id": "gpt-4.1-mini", "provider": "openai", "price_in": 0.4, "price_out": 1.6, "blended": 1.3, "context": 1047576, "caps": ["tools", "vision"], "benchmark": {"pass_rate": 32.4, "source": "aider_polyglot"}, "citations": [{"source": "litellm", "license": "MIT", "source_url": "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"}]}, "candidate_count": 41, "rationale": "Cheapest of 41 models passing [context >= 200,000; tool-use] for task 'coding'.", "sources_used": ["litellm", "modelsdev", "aider_polyglot", "aider_edit"], "attribution": ["LiteLLM (BerriAI) — MIT", "models.dev — MIT", "Aider — Apache-2.0"]}` - Tags: llm, model-routing, model-selection, pricing, benchmark, capabilities, cheapest, agent-infra, coding-agent, orchestration, litellm, aider ### `GET /model/lookup` — $0.008 One call resolves a model name or short alias to a single normalized, provider-neutral record fused across the open catalogs. Aliases such as sonnet, opus, 4o, flash, r1 and many families are seeded, and anything else is fuzzy-resolved to the closest catalog id. The record carries per-million input and output prices (kept from both LiteLLM and models dev, with both values retained on a divergence), context and maximum output tokens, a compact capability tag set (tools, parallel_tools, vision, reasoning, pdf, audio, web_search, prompt_caching, structured_output), input and output modalities, knowledge cutoff and release date where models dev provides them, the provider, the best Aider coding benchmark when the model appears on a leaderboard, and a citation for every contributing source with its license. Every unknown field is an honest null, never a guess. A name that matches nothing returns found false with the sources it searched, not a 404 error, so an agent can branch cleanly. - Query params: `{"name": "sonnet"}` - Example response: `{"found": true, "query": "sonnet", "id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5", "provider": "anthropic", "price_in": 3.0, "price_out": 15.0, "prices": {"input": {"litellm": 3.0, "modelsdev": 3.0}, "output": {"litellm": 15.0, "modelsdev": 15.0}}, "context": 1000000, "max_output": 128000, "caps": ["tools", "vision", "reasoning", "prompt_caching"], "knowledge_cutoff": "2025-07-31", "release_date": "2025-09-29", "benchmark": {"pass_rate": 77.3, "source": "aider_polyglot"}, "citations": [{"source": "litellm", "license": "MIT", "source_url": "https://..."}, {"source": "modelsdev", "license": "MIT", "source_url": "https://..."}]}` - Tags: llm, model, pricing, context-window, capabilities, benchmark, knowledge-cutoff, lookup, alias, litellm, models-dev, aider ### `GET /model/compare` — $0.01 A side-by-side normalization of two to five models so an agent or a human can pick between them without reconciling incompatible provider pages. Pass a comma separated list of names or aliases; each is resolved and normalized to per-million input and output prices, context and maximum output tokens, the compact capability tag set, knowledge cutoff and release date, and the best Aider coding benchmark when known, each with per-source citations and both price sources kept on a divergence. The response also computes convenience picks — the cheapest by input price, the best coding benchmark and the largest context — and lists any names that could not be resolved in `not_found` so the comparison is transparent about coverage. Deterministic, no LLM. - Query params: `{"models": "gpt-4o, claude-sonnet-4-5, gemini-2.5-flash"}` - Example response: `{"models": [{"query": "gpt-4o", "id": "gpt-4o", "provider": "openai", "price_in": 2.5, "price_out": 10.0, "context": 128000, "caps": ["tools", "vision"], "benchmark": {"pass_rate": 23.1, "source": "aider_polyglot"}}, {"query": "claude-sonnet-4-5", "id": "claude-sonnet-4-5", "provider": "anthropic", "price_in": 3.0, "price_out": 15.0, "context": 1000000, "caps": ["tools", "vision", "reasoning"], "benchmark": {"pass_rate": 77.3, "source": "aider_polyglot"}}], "not_found": [], "picks": {"cheapest": "gpt-4o", "best_benchmark": "claude-sonnet-4-5", "largest_context": "claude-sonnet-4-5"}, "attribution": ["LiteLLM (BerriAI) — MIT", "models.dev — MIT", "Aider — Apache-2.0"]}` - Tags: llm, model, compare, pricing, benchmark, context-window, capabilities, side-by-side, litellm, models-dev, aider ### `GET /personality/chart` — $0.08 The flagship route: a single call returns a person's birth chart computed across six independent systems, so a consumer app (an astrology or self-knowledge bot, a companion, a journaling or dating product) gets everything at once instead of stitching together many single-system endpoints. Supply a birth date (required) and, for the fullest chart, a birth time (HH:MM local), a birth place (free text, geocoded, or explicit lat and lon) and the timezone (IANA tz or a numeric utc_offset). Optionally add a name to unlock the numerology name numbers and an as_of date for the biorhythm cycles. The response has one section per framework: western gives tropical planet placements by sign and degree with retrograde flags, Whole-Sign houses, the Ascendant and Midheaven angles and the major Ptolemaic aspects; vedic gives sidereal (Lahiri ayanamsa) longitudes with rashi, nakshatra and pada including the janma (Moon) nakshatra; chinese gives the BaZi Four Pillars plus the zodiac animal and element from the sexagenary cycle and solar terms; numerology gives the Life Path and, with a name, Expression, Soul Urge and Personality numbers; bodygraph gives the I-Ching gate and line activations for the personality and design sets with the derived defined centers, channels, profile and a structural energy-type, in neutral terms; biorhythm gives the physical, emotional and intellectual cycles. Every value carries a provenance citation (the ephemeris series, the ayanamsa model, the gate-wheel anchor). Positions come from the pymeeus VSOP87 and ELP2000 series at arc-minute accuracy, finer than any framework's bin. When no birth time is given, planet longitudes use noon UT and the angle-dependent fields are honestly flagged unavailable rather than invented. Pure computation: no LLM, no API keys, no external paid service. For entertainment and self-reflection, not advice; the bodygraph is a neutral computed structure, not a branded system. - Query params: `{"date": "1990-05-15", "time": "12:00", "place": "New York, USA", "utc_offset": -4, "name": "Jane Doe"}` - Example response: `{"input": {"date": "1990-05-15", "has_time": true, "julian_day": 2448027.17}, "frameworks": ["western", "vedic", "chinese", "numerology", "bodygraph", "biorhythm"], "systems": {"western": {"sun": {"sign": "Taurus", "dms": "24°33'"}, "ascendant": {"sign": "Leo"}}, "chinese": {"zodiac": {"animal": "Horse", "element": "Metal"}}, "numerology": {"life_path": {"number": 3}}, "bodygraph": {"energy_type": "Generator", "profile": "1/3"}}}` - Tags: astrology, birth-chart, natal, horoscope, vedic, jyotish, bazi, chinese-zodiac, numerology, human-design, bodygraph, biorhythm, self-knowledge, personality, ephemeris, multi-system ### `GET /personality/western` — $0.02 A focused western natal chart for callers who only need the tropical system. Supply a birth date; add a birth time and a place (geocoded free text or explicit lat and lon) plus a timezone (IANA tz or numeric utc_offset) to unlock the houses and angles. The response lists every classical body (Sun through Pluto plus the lunar nodes) by zodiac sign, degree within the sign and exact degree-minute-second, with a retrograde flag from the computed daily motion, and, when a time and place are known, its Whole-Sign house. It includes the Ascendant and Midheaven longitudes derived from apparent sidereal time, obliquity and latitude, the twelve Whole-Sign house cusps, and the grid of major Ptolemaic aspects (conjunction, sextile, square, trine, opposition) with the exact orb of each. Positions come from the pymeeus VSOP87 and ELP2000 series at arc-minute accuracy. When no birth time is given the houses and angles are honestly flagged unavailable and the Moon degree is marked approximate, never fabricated. Pure computation: no LLM, no keys, no paid upstream. For entertainment and self-reflection, not advice. - Query params: `{"date": "1990-05-15", "time": "12:00", "place": "New York, USA", "utc_offset": -4}` - Example response: `{"western": {"planets": [{"body": "Sun", "sign": "Taurus", "dms": "24°33'", "house": 10, "retrograde": false}], "ascendant": {"sign": "Leo", "dms": "19°53'"}, "angles_available": true}}` - Tags: astrology, natal, western-astrology, horoscope, zodiac, planets, houses, aspects, ascendant, ephemeris ### `GET /personality/bodygraph` — $0.03 A neutral, computation-only bodygraph derived from planetary longitudes. Each body is mapped to one of the 64 I-Ching hexagrams (the gates, 5.625 degrees each) and one of its six lines (0.9375 degrees), for the personality set at birth and the design set when the Sun was 88 degrees of ecliptic arc earlier (about 88 days before birth). From the union of activated gates the route derives which of the 36 channels are defined, which of the 9 centers are therefore defined and which stay open, the profile (personality Sun line over design Sun line) and a structural energy-type classification (from whether the sacral and the motor-to-throat connections are defined). Every activation is listed with its body, gate and line. This returns ONLY the computed structure with neutral descriptive terms; it does not use the trademarked brand name of any commercial system, reproduces none of its proprietary interpretive text, and is neither affiliated with nor endorsed by it. The hexagram-to-zodiac mapping is astronomical fact. Positions come from the pymeeus ephemeris. Without a birth time, longitudes use noon UT and can shift a fast body across a line boundary. For entertainment and self-reflection, not advice. - Query params: `{"date": "1990-05-15", "time": "12:00", "place": "New York, USA", "utc_offset": -4}` - Example response: `{"bodygraph": {"profile": "1/3", "energy_type": "Generator", "inner_authority": "Emotional (Solar Plexus)", "defined_centers": ["Sacral", "Throat"], "activations": {"personality": [{"body": "Sun", "gate": 23, "line": 6}]}}}` - Tags: bodygraph, human-design, i-ching, gates, centers, channels, profile, energy-type, self-knowledge, ephemeris ### `POST /secret/scan` — $0.01 A defensive pre-commit check a coding agent runs on code it generated or is about to commit. Input is the caller's OWN code / config (one blob with an optional filename, or a files[] batch of path+content); nothing is fetched and no found key is ever probed at its provider (a deliberate non-goal — pure static, no network, no SSRF). Deterministic detection over a data-driven rule registry at gitleaks scale: cloud (AWS, GCP, Azure, DigitalOcean), VCS/CI (GitHub, GitLab, npm, PyPI, Docker), payment (Stripe, Square, Braintree), messaging (Slack, Discord, Twilio, SendGrid, Telegram), AI providers (OpenAI, Anthropic, HuggingFace, Groq), database and basic-auth URIs with inline passwords, PEM private keys, JWTs, and entropy-gated generic assignments. Anti-false-positive levers: a placeholder/example allowlist (AKIA…EXAMPLE, your-key-here, ${VAR}), Shannon-entropy gating, format validators, and a test-fixture path downgrade. Output: a verdict (pass on nothing or low-only, caution on medium, block on any high), a summary counting severities and providers, and findings with masked evidence (prefix…suffix, never the full key) plus file and line. Secret indicators, not a guarantee; a pass is not proof the code is clean. - Request body: `{"filename": "config.py", "content": "AWS_KEY = 'AKIA1234567890ABCDEF'\nDEBUG = True\n"}` - Example response: `{"object": "secret_scan", "verdict": "block", "worst_severity": "high", "files_scanned": 1, "summary": {"has_secrets": true, "total_findings": 1, "verdict": "block", "worst_severity": "high", "counts_by_severity": {"high": 1}, "counts_by_provider": {"AWS": 1}}, "findings": [{"rule_id": "aws-access-key-id", "provider": "AWS", "category": "cloud", "severity": "high", "file": "config.py", "line": 1, "evidence": "AWS_KEY = 'AKIA…CDEF'", "reason": "AWS access key id"}], "disclaimer": "Automated secret indicators, not a guarantee."}` - Tags: secrets, security, credentials, pre-commit, scanner, agent, code ### `POST /secret/diff` — $0.01 The git-diff form of the secret scan and the key anti-false-positive mode. Parses a unified diff, tracks the current file from its +++ header and each hunk's starting new-line number, and runs the same deterministic rule engine on ONLY the added ('+') lines — a credential sitting in unchanged or deleted code is not flagged, so an agent committing a change is warned only about credentials IT is introducing. Same registry, same placeholder allowlist, entropy gating and test-fixture downgrade as /secret/scan; output is a verdict plus findings with masked evidence and the file + new-line number. Pure local computation, no network, no key liveness-probe. Secret indicators, not a guarantee. - Request body: `{"diff": "--- a/config.py\n+++ b/config.py\n@@ -1,2 +1,3 @@\n DEBUG = True\n+TOKEN = 'ghp_012345678901234567890123456789abcdef'\n"}` - Example response: `{"object": "secret_diff", "verdict": "block", "worst_severity": "high", "added_lines_scanned": 1, "summary": {"has_secrets": true, "total_findings": 1, "verdict": "block", "worst_severity": "high", "counts_by_severity": {"high": 1}, "counts_by_provider": {"GitHub": 1}}, "findings": [{"rule_id": "github-pat", "provider": "GitHub", "category": "vcs", "severity": "high", "file": "config.py", "line": 3, "evidence": "TOKEN = 'ghp_…cdef'", "reason": "GitHub personal access token"}], "disclaimer": "Automated secret indicators, not a guarantee."}` - Tags: secrets, security, git-diff, pre-commit, scanner, agent ### `POST /iac/scan` — $0.02 A one-call defensive preflight a coding / platform agent runs on IaC it generated or is about to apply, BEFORE the change lands. Input is the caller's OWN config text plus an optional format hint (auto-detected otherwise); nothing is fetched, so there is no network side effect. Every supported format is normalised into a common resource model and evaluated by a deterministic, data-driven rule engine spanning AWS / GCP / Azure / Kubernetes / Docker: public object storage and missing public-access blocks; security groups, firewalls and NSGs open to the world on sensitive ports; data unencrypted at rest (S3, EBS, RDS, EFS, DynamoDB); publicly reachable databases; over-broad IAM (wildcard actions / resources); missing logging; privileged or root containers, allowed privilege escalation, host network / PID / IPC, hostPath mounts, dangerous Linux capabilities, missing resource limits and mutable :latest tags; Dockerfile USER root, remote ADD, curl-pipe-shell and credential-shaped ARG/ENV; docker-compose privileged, Docker -socket and host-root mounts. Cross-resource graph rules correlate a public-IP instance with an open security group. Output: a verdict (pass on clean or info -only, caution on a lone high/medium, block on any critical or a high aggregate score), a 0-100 risk score, counts by severity, and findings with the rule id, affected resource, location, a short fix hint and safe truncated evidence. Boundary: posture only — a hardcoded credential is flagged as a nit pointing at the secret scanner, not decoded here. Security indicators, not a guarantee; a pass is not proof the configuration is safe. - Request body: `{"format": "kubernetes", "content": "apiVersion: v1\nkind: Pod\nmetadata:\n name: web\nspec:\n containers:\n - name: app\n image: nginx:latest\n securityContext:\n privileged: true\n"}` - Example response: `{"object": "config", "format": "kubernetes", "verdict": "block", "risk_score": 40, "resource_count": 1, "findings": [{"rule_id": "k8s.privileged", "provider": "k8s", "dimension": "container_security", "severity": "critical", "resource": "Pod.web", "path": "doc[0] Pod/web", "reason": "Container runs in privileged mode (full host access).", "fix_hint": "Set securityContext.privileged = false.", "evidence": "pod.containers.0.securityContext.privileged = True"}], "counts_by_severity": {"critical": 1}, "coverage": {"rules_total": 52, "dimensions_flagged": ["container_security"], "resources_scanned": 1}, "config_hash": "sha256:…", "ruleset_version": "2026.07.16", "disclaimer": "Automated security indicators, not a guarantee."}` - Tags: iac, terraform, kubernetes, cloud, security, misconfiguration, devops, scanner, agent ### `POST /iac/inspect` — $0.006 The single-resource form of the IaC misconfiguration scan: pass one resource block or a small config snippet (with an optional format hint) and get the same deterministic static analysis as /iac/scan, restricted to per-resource rules (no cross-resource graph pass). Useful for an agent validating one block it just wrote. Output is a verdict, a risk score and findings with the rule id, severity, resource, location, a fix hint and safe truncated evidence. Pure local computation, no network, no keys. Security indicators, not a guarantee. - Request body: `{"kind": "terraform-plan", "resource": "{\"planned_values\":{\"root_module\":{\"resources\":[{\"type\":\"aws_s3_bucket\",\"name\":\"b\",\"values\":{\"acl\":\"public-read\"}}]}}}"}` - Example response: `{"object": "resource", "format": "terraform-plan", "verdict": "caution", "risk_score": 25, "resource_count": 1, "findings": [{"rule_id": "aws.s3.public_acl", "provider": "aws", "dimension": "data_exposure", "severity": "high", "resource": "aws_s3_bucket.b", "path": "aws_s3_bucket.b", "reason": "S3 bucket ACL grants public access (public-read / public-read-write).", "fix_hint": "Set acl to private and manage access via bucket policy / IAM.", "evidence": "acl = public-read"}], "counts_by_severity": {"high": 1}, "coverage": {"rules_total": 52, "dimensions_flagged": ["data_exposure"], "resources_scanned": 1}, "ruleset_version": "2026.07.16", "disclaimer": "Automated security indicators, not a guarantee."}` - Tags: iac, terraform, kubernetes, cloud, security, misconfiguration, scanner, agent ### `POST /code/scan` — $0.02 A defensive pre-commit SAST check a coding agent runs on application code it generated or is about to commit. Input is the caller's OWN code — either a unified git-diff (only newly ADDED lines are scored, the low-false-positive mode, with the file and new-line number tracked per hunk) or a files[] batch of path+content+optional language. Nothing is fetched or executed; there is no network, LLM, key or subprocess, so no SSRF surface and near-zero marginal cost. Deterministic detection over a data-driven registry of CWE Top-25 logic vulnerabilities: SQL injection (string-built queries versus parameterized statements), cross-site scripting, OS command injection, code and server-side template injection, server-side request forgery, path traversal, insecure deserialization, weak or broken cryptography, insecure randomness in a security context, open redirect and XML external entities — across Python, JavaScript, TypeScript, Java and Go (PHP and Ruby partially). False-positive reducers: parameterized-query recognition, a test/example/vendored path downgrade, inline suppression markers, and a security-context gate. Output: a verdict (block on any high, caution on medium, pass otherwise), a 0-100 risk score, findings grouped by CWE with safe truncated evidence, file and line, and a coverage summary. Static indicators, not a guarantee; a pass is not proof the code is secure. - Request body: `{"diff": "--- a/db.py\n+++ b/db.py\n@@ -1,2 +1,3 @@\n import sqlite3\n+def f(cur, uid):\n+ cur.execute(f\"SELECT * FROM users WHERE id = {uid}\")\n"}` - Example response: `{"object": "code_scan", "verdict": "block", "risk_score": 30, "files_scanned": 1, "added_lines_scanned": 2, "findings": [{"file": "db.py", "line": 3, "cwe": "CWE-89", "name": "SQL Injection", "dimension": "injection", "severity": "high", "confidence": "high", "evidence": "cur.execute(f\"SELECT * FROM users WHERE id = {uid}\")", "reason": "User-controlled data appears to be interpolated into a SQL query."}], "findings_by_cwe": {"CWE-89": 1}, "coverage": {"cwe_total": 12, "cwe_flagged": ["CWE-89"], "languages_scanned": ["python"]}, "ruleset_version": "2026.07.16", "disclaimer": "Automated static security indicators, not a guarantee."}` - Tags: sast, security, code, cwe, pre-commit, scanner, agent ### `POST /code/inspect` — $0.008 The single-blob form of the application-code SAST scan: pass one code snippet and its language and get the same deterministic static analysis (SQL injection, XSS, command / code / template injection, SSRF, path traversal, insecure deserialization, weak cryptography, insecure randomness, open redirect, XXE) as a verdict, a 0-100 risk score and a list of CWE-tagged findings with safe truncated evidence and line numbers. Pure local computation, no network, no execution. Static indicators, not a guarantee. - Request body: `{"language": "python", "code": "import hashlib\nh = hashlib.md5(data).hexdigest()\n"}` - Example response: `{"object": "code_inspect", "verdict": "caution", "risk_score": 14, "language": "python", "files_scanned": 1, "findings": [{"line": 2, "cwe": "CWE-327", "name": "Weak Cryptography", "dimension": "weak_crypto", "severity": "medium", "confidence": "high", "evidence": "h = hashlib.md5(data).hexdigest()", "reason": "A broken/weak cryptographic primitive is used (MD5)."}], "findings_by_cwe": {"CWE-327": 1}, "coverage": {"cwe_total": 12, "cwe_flagged": ["CWE-327"], "languages_scanned": ["python"]}, "ruleset_version": "2026.07.16", "disclaimer": "Automated static security indicators, not a guarantee."}` - Tags: sast, security, code, cwe, scanner, agent ### `POST /ci/scan` — $0.02 A one-call defensive preflight a coding / DevOps agent runs on CI/CD config it generated or is about to commit, BEFORE the change lands. Input is the caller's OWN workflow text plus an optional CI-system hint (auto-detected otherwise); nothing is fetched, so there is no network side effect. GitHub Actions, GitLab CI and CircleCI are normalised into a common workflow / job / step model and evaluated by a deterministic, data-driven rule engine covering the OWASP Top 10 CI/CD Security Risks: third-party actions / images / orbs pinned to a mutable tag instead of a commit digest (supply-chain); attacker-controlled expressions expanded into run scripts (template injection) and writes to the environment files (env injection); pull_request_target / workflow_run triggers that check out untrusted PR code with the target's secrets (poisoned pipeline execution); missing or write-all workflow-token permissions; secrets echoed to logs, secrets: inherit and CI_DEBUG_TRACE; cache poisoning; self-hosted runners on public repos; ACTIONS_ALLOW_UNSECURE_COMMANDS; curl-piped-to-shell and lockfile-less installs. Cross-object graph rules correlate a privileged trigger with an untrusted checkout. Output: a verdict (pass on clean or info-only, caution on a lone high/medium, block on any critical or a high aggregate score), a 0-100 risk score, counts by severity, and findings with the rule id, affected object, location, a concrete insertable fix hint (pin-to-SHA, quote-expr in env, least-privilege permissions block) and safe truncated evidence. Boundary: pipeline security only — cloud resources go to the IaC scanner, application code to the SAST scanner, secret values to the secret scanner. Security indicators, not a guarantee; a pass is not proof the pipeline is safe. - Request body: `{"format": "github-actions", "content": "name: ci\non: pull_request_target\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n ref: ${{ github.event.pull_request.head.ref }}\n - run: echo \"${{ github.event.issue.title }}\"\n"}` - Example response: `{"object": "ci_config", "format": "github-actions", "verdict": "block", "risk_score": 100, "object_count": 4, "findings": [{"rule_id": "gha.template_injection", "provider": "github-actions", "dimension": "injection", "severity": "critical", "resource": "build.step1", "path": "jobs.build.steps[1]", "reason": "An attacker-controllable expression is expanded inside a run: script — arbitrary code execution on the runner.", "fix_hint": "Bind it to an env var and quote the shell reference.", "evidence": "${{ github.event.issue.title }}"}], "counts_by_severity": {"critical": 2, "high": 1}, "coverage": {"rules_total": 27, "dimensions_flagged": ["injection", "triggers"], "objects_scanned": 4, "objects_by_kind": {"workflow": 1, "job": 1, "step": 2}}, "config_hash": "sha256:…", "ruleset_version": "2026.07.24", "disclaimer": "Automated security indicators, not a guarantee."}` - Tags: cicd, github-actions, gitlab, circleci, security, supply-chain, devops, pipeline, scanner, agent ### `POST /ci/inspect` — $0.008 The single-object form of the CI/CD pipeline scan: pass one job or step snippet (with an optional CI-system hint) and get the same deterministic static analysis as /ci/scan, restricted to per-object rules (no cross-object graph pass). Useful for an agent validating one step it just wrote. Output is a verdict, a risk score and findings with the rule id, severity, object, location, a concrete fix hint and safe truncated evidence. Pure local computation, no network, no keys. Security indicators, not a guarantee. - Request body: `{"kind": "github-actions", "resource": "- uses: actions/checkout@v4\n- run: curl -sSL https://example.com/i.sh | sh\n"}` - Example response: `{"object": "ci_object", "format": "github-actions", "verdict": "caution", "risk_score": 30, "object_count": 2, "findings": [{"rule_id": "gha.unpinned_uses", "provider": "github-actions", "dimension": "supply_chain", "severity": "high", "resource": "step0", "path": "step[0]", "reason": "Third-party action is pinned to a mutable tag instead of a full commit SHA (supply-chain).", "fix_hint": "Pin to the full 40-char commit SHA.", "evidence": "uses: actions/checkout@v4"}], "counts_by_severity": {"high": 2}, "coverage": {"rules_total": 27, "dimensions_flagged": ["supply_chain"], "objects_scanned": 2, "objects_by_kind": {"step": 2}}, "ruleset_version": "2026.07.24", "disclaimer": "Automated security indicators, not a guarantee."}` - Tags: cicd, github-actions, gitlab, circleci, security, pipeline, scanner, agent ### `POST /a11y/preflight` — $0.02 A defensive pre-commit accessibility check a coding agent runs on UI markup it generated or is about to ship. Input is the caller's OWN markup — a JSX, TSX, Vue, Angular or HTML fragment/component; nothing is rendered, fetched or executed, so there is no network, browser, key or LLM and near-zero marginal cost. The markup is normalised into a generic DOM (framework attribute maps and directive bindings are data-driven, so a present-but-dynamic attribute such as alt bound to an expression is correctly treated as present, not missing) and a deterministic WCAG 2.2 rule set is evaluated over it: image text alternatives (1.1.1), form-control labels (1.3.1 / 4.1.2), accessible names for buttons and links (2.4.4 / 4.1.2), heading order (1.3.1), ARIA role validity and required states (4.1.2), click handlers on non-interactive elements (2.1.1 / 4.1.2), duplicate ids (4.1.1), positive tabindex (2.4.3), a page-language attribute (3.1.1), data-table headers (1.3.1) and colour contrast (1.4.3). Contrast is computed only when both foreground and background resolve statically from inline styles or the supplied palette; the full CSS cascade is out of scope and such cases are reported honestly rather than flagged. Output: a verdict (block on a serious barrier, caution on a warning, pass otherwise), per-finding WCAG criterion, level, element and line, and a coverage summary that lists what needs a render. Accessibility indicators, not a legal compliance guarantee; a pass is not proof of conformance — always test with assistive technology. - Request body: `{"framework": "jsx", "markup": ""}` - Example response: `{"object": "a11y_preflight", "verdict": "block", "findings": [{"rule_id": "img-alt", "wcag_sc": "1.1.1", "wcag_level": "A", "severity": "block", "category": "text-alternatives", "element": "", "location": "line 1", "message": "Image has no alt attribute.", "remediation": "Add alt text, or alt=\"\" if decorative."}], "summary": {"by_severity": {"block": 1, "caution": 0}, "counts": {"findings": 1}}, "coverage": {"framework_detected": "jsx", "level": "AA", "rules_run": 13, "rules_total": 14, "skipped_needs_render": []}, "ruleset_version": "2026.07.16", "disclaimer": "Automated accessibility indicators, NOT a legal compliance guarantee."}` - Tags: accessibility, a11y, wcag, preflight, verdict, agent, ui ### `POST /a11y/batch` — $0.10 The multi-file form of the accessibility preflight: pass a list of files (each a filename plus optional framework plus markup, up to the batch cap) and get the same deterministic WCAG 2.2 analysis per file — a verdict, WCAG-tagged findings with element and line, and a per-file coverage note — plus a rollup carrying the worst verdict across the set and totals by severity, so an agent can gate an entire component tree or pull request in one call. Pure local computation over the caller's own markup, no render, no network, no key. Accessibility indicators, not a legal compliance guarantee. - Request body: `{"files": [{"filename": "Logo.jsx", "framework": "jsx", "markup": ""}, {"filename": "ok.html", "framework": "html", "markup": "\"A\""}]}` - Example response: `{"object": "a11y_batch", "worst_verdict": "block", "file_count": 2, "totals": {"by_severity": {"block": 1, "caution": 0}, "findings": 1}, "files": [{"filename": "Logo.jsx", "verdict": "block", "framework_detected": "jsx", "summary": {"by_severity": {"block": 1, "caution": 0}, "counts": {"findings": 1}}, "findings": ["…"]}, {"filename": "ok.html", "verdict": "pass", "framework_detected": "html", "summary": {"by_severity": {"block": 0, "caution": 0}, "counts": {"findings": 0}}, "findings": []}], "ruleset_version": "2026.07.16", "disclaimer": "Automated accessibility indicators, NOT a legal compliance guarantee."}` - Tags: accessibility, a11y, wcag, batch, verdict, agent, ui ### `POST /migrate/check` — $0.02 A defensive pre-apply check a coding or DevOps agent runs on a database migration it generated, to catch schema changes that lock a production table, rewrite it, or lose data before the change ships. Input is the caller's own migration text — raw SQL/DDL (Postgres or MySQL) or an Alembic change file; nothing is fetched or executed, so there is no network, key or LLM and near-zero marginal cost. The text is parsed into an ordered statement list and walked deterministically while tracking objects created in the same migration, so an operation on a brand-new table is correctly treated as safe rather than flagged. The rule set covers the well-known hazards: dropping a column or table, truncate, an in-place column type change, adding a NOT NULL column without a default, adding a column with a volatile default, building or dropping an index non-concurrently, adding a foreign key or check or unique or primary key without the deferred-validate pattern, setting NOT NULL on an existing column, renaming a column or table during a rolling deploy, a bulk backfill inside the migration, and heavyweight rewrites. Output is a verdict — block on a data-loss or exclusive-lock operation, caution on a lockable operation with a safe rewrite, pass otherwise — plus per-finding operation, severity, reason, a zero-downtime remediation and a docs link, and an honest coverage note when a statement could not be fully parsed. Migration-safety indicators, not a guarantee; a pass is not a promise of zero downtime — behaviour depends on engine version, table size and load. - Request body: `{"dialect": "postgres", "sql": "ALTER TABLE users ADD COLUMN nickname text"}` - Example response: `{"object": "dbmigrate_check", "dialect": "postgres", "verdict": "pass", "findings": [], "summary": {"block_count": 0, "caution_count": 0, "info_count": 0}, "coverage": {"statements_total": 1, "statements_parsed": 1, "parse_partial": false}, "disclaimer": "Automated migration-safety indicators, not a guarantee."}` - Tags: database, migration, schema, ddl, preflight, verdict, postgres, mysql, devops, agent ### `POST /migrate/batch` — $0.10 The multi-file form of the migration preflight: pass a list of migrations (each a name plus SQL, up to the batch cap) and get the same deterministic analysis per file — a verdict, findings with operation, severity, reason and a zero-downtime remediation, and a coverage note — plus a rollup carrying the worst verdict across the set and counts by outcome, so an agent can gate a whole pull request or release train of migrations in one call. Pure local computation over the caller's own migration text, no network, no key. Migration-safety indicators, not a guarantee. - Request body: `{"dialect": "postgres", "migrations": [{"name": "0001_add_nickname", "sql": "ALTER TABLE users ADD COLUMN nickname text"}]}` - Example response: `{"object": "dbmigrate_batch", "count": 1, "worst_verdict": "pass", "summary": {"blocked": [], "caution": [], "passed": ["0001_add_nickname"], "block_count": 0, "caution_count": 0, "pass_count": 1}, "results": [{"name": "0001_add_nickname", "verdict": "pass"}], "disclaimer": "Automated migration-safety indicators, not a guarantee."}` - Tags: database, migration, schema, ddl, batch, verdict, postgres, mysql, devops, agent ### `POST /sql/check` — $0.02 A defensive pre-run check a coding or data agent applies to a query it generated, to catch two classes of hazard before the query hits a production database. Input is the caller's own query text (SELECT, UPDATE or DELETE) for Postgres, MySQL or SQLite; nothing is fetched or executed, so there is no network, key or model and near-zero marginal cost. The text is parsed into an ordered statement list and walked deterministically. The first class is destructive and correctness safety, decided from the query text alone with no schema: an UPDATE or DELETE with no WHERE or an always-true WHERE that would touch every row, a TRUNCATE, a NOT IN sub-query that silently returns nothing on a stray null, and a grouped column that is neither aggregated nor grouped. The second class is performance heuristics: select-star, a cartesian join with no join condition, a function wrapped around an indexed column, a leading-wildcard search, a scan with no bound, deep-offset pagination, a heavy distinct count, and distinct used to hide join fan-out. Because the service has no schema or plan, performance findings are honest caution or info hints, never a block, with the one exception of an unfiltered cartesian product; an optional indexed-columns hint sharpens the sargability findings. Output is a verdict plus per-finding operation, severity, reason, a remediation and a docs link. Query-safety indicators, not a guarantee. - Request body: `{"dialect": "postgres", "sql": "SELECT id, name FROM users WHERE id = 1"}` - Example response: `{"object": "sqlscan_check", "dialect": "postgres", "verdict": "pass", "findings": [], "summary": {"block_count": 0, "caution_count": 0, "info_count": 0}, "coverage": {"statements_total": 1, "statements_parsed": 1, "parse_partial": false}, "disclaimer": "Automated query safety/performance indicators, not a guarantee."}` - Tags: database, sql, query, preflight, verdict, safety, performance, postgres, mysql, agent ### `POST /sql/batch` — $0.10 The multi-query form of the preflight: pass a list of queries (each a name plus text, up to the batch cap) and get the same deterministic analysis per query — a verdict, findings with operation, severity, reason and a remediation, and a coverage note — plus a rollup carrying the worst verdict across the set and counts by outcome, so an agent can gate a whole query log or migration of application queries in one call. Pure local computation over the caller's own query text, no network, no key. Query-safety indicators, not a guarantee. - Request body: `{"dialect": "postgres", "queries": [{"name": "q1", "sql": "SELECT id, name FROM users WHERE id = 1"}]}` - Example response: `{"object": "sqlscan_batch", "count": 1, "worst_verdict": "pass", "summary": {"blocked": [], "caution": [], "passed": ["q1"], "block_count": 0, "caution_count": 0, "pass_count": 1}, "results": [{"name": "q1", "verdict": "pass"}], "disclaimer": "Automated query safety/performance indicators, not a guarantee."}` - Tags: database, sql, query, batch, verdict, safety, performance, postgres, mysql, agent ### `POST /marketing/funnel` — $0.02 Builds a cross-channel conversion funnel from a normalized ad dataset. Returns per-transition conversion rate, drop-off count and loss-rate, the overall conversion rate, the bottleneck stage (largest relative drop), and the same breakdown per channel. Default stages are impressions then clicks then conversions; pass an ordered stages array for any funnel. Accepts a JSON array under rows or a raw CSV/TSV text blob under csv; columns are auto-mapped by alias. - Request body: `{"rows": [{"channel": "google", "impressions": 1000, "clicks": 100, "conversions": 10}, {"channel": "facebook", "impressions": 2000, "clicks": 100, "conversions": 20}]}` - Example response: `{"stages": ["impressions", "clicks", "conversions"], "totals": {"impressions": 3000, "clicks": 200, "conversions": 30}, "overall": {"entered": 3000, "converted": 30, "conversion_rate": 0.01}, "bottleneck": {"from": "impressions", "to": "clicks", "loss_rate": 0.933333}, "disclaimer": "computation only"}` - Tags: marketing, funnel, conversion, drop-off, analytics, attribution ### `POST /marketing/attribution` — $0.03 Distributes each conversion's credit across the touches on its path under five attribution models and sums the credit onto channels. first_touch and last_touch give all credit to the first or last touch; linear splits evenly; time_decay weights recent touches by 0.5 raised to days_before over the half-life; position_based is a U-shape of 40 percent first, 40 percent last, 20 percent across the middle. Per-model credit sums to 100 percent, and a comparison table shows each channel side by side. Supply days_before per touch for exact time-decay, otherwise touches are spaced evenly. Accepts a JSON array under rows or a raw CSV/TSV text blob under csv; columns are auto-mapped by alias. - Request body: `{"paths": [{"path": ["google", "facebook", "email"], "conversions": 1}, {"path": ["facebook", "email"], "conversions": 2}], "halflife_days": 7}` - Example response: `{"models": ["first_touch", "last_touch", "linear", "time_decay", "position_based"], "attribution_pct": {"first_touch": {"google": 100.0, "facebook": 0.0, "email": 0.0}}, "total_conversions": 1, "disclaimer": "computation only"}` - Tags: marketing, attribution, multi-touch, first-touch, time-decay, analytics ### `POST /marketing/spend` — $0.02 Computes per-channel unit economics: CPC, CPM, CPA, CAC (customers default to conversions), ROAS, ROI, conversion rate, and LTV to CAC when an LTV is supplied. Each metric appears only when its inputs are present, so a missing column is reported honestly rather than as a zero. Channels are ranked by ROAS (then CPA), and a marginal budget-reallocation hint shifts spend toward the highest-ROAS channel; without multiple spend points per channel the method is labelled roas_ranking rather than a fitted saturation curve. Accepts a JSON array under rows or a raw CSV/TSV text blob under csv; columns are auto-mapped by alias. - Request body: `{"rows": [{"channel": "google", "spend": 100, "clicks": 100, "impressions": 10000, "conversions": 10, "revenue": 500}, {"channel": "facebook", "spend": 200, "clicks": 100, "impressions": 20000, "conversions": 10, "revenue": 400}]}` - Example response: `{"channels": [{"channel": "google", "spend": 100.0, "cpa": 10.0, "roas": 5.0, "roi": 4.0}], "ranking": ["google", "facebook"], "reallocation": {"method": "roas_ranking", "shift_from": "facebook", "shift_to": "google"}, "totals": {"spend": 300.0, "revenue": 900.0, "blended_roas": 3.0}, "disclaimer": "computation only"}` - Tags: marketing, spend, roas, cac, unit-economics, budget ### `POST /marketing/experiment` — $0.02 Runs a pooled two-proportion z-test on control versus variant conversion. Returns the absolute and relative lift, the z-score, the two-sided p-value from the standard normal CDF, a confidence interval on the absolute lift, the minimum detectable effect at the current sample sizes, the sample size required per group to detect the observed effect at the requested alpha and power, whether the current sample is sufficient, and the significance flag and winner. Reference: control 100 of 1000, variant 140 of 1000 gives z near 2.75 and p near 0.006, significant at 0.05. Pure local computation. - Request body: `{"a": {"conversions": 100, "visitors": 1000}, "b": {"conversions": 140, "visitors": 1000}}` - Example response: `{"control": {"conversions": 100, "visitors": 1000, "rate": 0.1}, "variant": {"conversions": 140, "visitors": 1000, "rate": 0.14}, "absolute_lift": 0.04, "relative_lift": 0.4, "z_score": 2.752, "p_value": 0.005914, "significant": true, "winner": "variant", "disclaimer": "computation only"}` - Tags: marketing, experiment, ab-test, significance, p-value, statistics ### `GET /swap/quote` — $0.05 A non-custodial swap-calldata builder for Base. You pass the sell token, buy token, the sell amount in raw atomic units, a slippage tolerance in basis points and the recipient address; optionally a deadline in seconds. We read the public read-only state of permissionless DEX contracts with our own eth_call — the Aerodrome Router (getAmountsOut over volatile and stable pools, one and two hops through WETH/USDC/AERO connectors) and the Uniswap V3 QuoterV2 (quoteExactInputSingle across the 100/500/3000/10000 fee tiers plus capped two-hop paths). Every candidate is batched through one on-chain multicall, so a whole fan-out costs a single round-trip; reverting or empty pools are skipped. We pick the route with the maximum output (so thin or manipulated pools self-eliminate), compute amountOutMin from your slippage, estimate price impact with a tiny probe quote, and return the winning route, the full venuesCompared list, the ready-to-sign transaction (to / data / value), and a separate ERC-20 approval (spender is exactly the winning router; a plain allowance, no Permit2). tokenIn can be any ERC-20 by address — decimals and symbol are resolved on-chain. We are NON-CUSTODIAL: we never hold, sign, execute or submit; your own wallet signs the returned calldata. Nothing commercial (0x, 1inch, ParaSwap) is resold — we compute from permissionless on-chain data. A pair with no live route is a clean 400 with an honest reason, never a 500. This is not financial advice and not a claim of best or optimal execution; we compared Aerodrome and Uniswap V3 on Base. Native-ETH input (wrap) is not yet supported — pass WETH. - Query params: `{"tokenIn": "WETH", "tokenOut": "USDC", "amountIn": "1000000000000000000", "slippageBps": 50, "recipient": "0x1111111111111111111111111111111111111111"}` - Example response: `{"chain": "eip155:8453", "network": "base", "sellToken": {"symbol": "WETH", "decimals": 18}, "buyToken": {"symbol": "USDC", "decimals": 6}, "sellAmountRaw": "1000000000000000000", "quote": {"buyAmountRaw": "1840378178", "buyAmountMinRaw": "1831176287", "slippageBps": 50, "route": {"venue": "univ3", "hops": 1, "feeTier": 500}, "priceImpactPct": 0.02, "gasEstimate": 81662, "venuesCompared": [{"venue": "aerodrome", "buyAmountRaw": "1838425629"}, {"venue": "univ3", "buyAmountRaw": "1840378178"}]}, "transaction": {"to": "0x2626664c...", "data": "0x04e45aaf...", "value": "0"}, "approval": {"spender": "0x2626664c...", "amountRaw": "1000000000000000000", "data": "0x095ea7b3..."}, "deadline": null, "warnings": [], "disclaimer": "not financial advice; you sign; ..."}` - Tags: swap, dex, calldata, non-custodial, base, aerodrome, uniswap, defi, aggregator, on-chain, erc20, routing ### `GET /swap/price` — $0.01 The quote-only sibling of /swap/quote: the same dual-venue on-chain comparison across Aerodrome and Uniswap V3 (max-output route, amountOutMin from your slippage, price-impact probe, full venuesCompared), but WITHOUT building any transaction calldata or approval — so it is cheaper and needs no recipient. Use it to check price and route, then call /swap/quote to get the signable bytes. Sources are permissionless on-chain DEX state read with our own eth_call, nothing commercial resold. A pair with no live route is a clean 400. Not financial advice, not a claim of best execution. - Query params: `{"tokenIn": "WETH", "tokenOut": "USDC", "amountIn": "1000000000000000000", "slippageBps": 50}` - Example response: `{"chain": "eip155:8453", "network": "base", "sellToken": {"address": "0x4200000000000000000000000000000000000006", "symbol": "WETH", "decimals": 18}, "buyToken": {"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "symbol": "USDC", "decimals": 6}, "sellAmountRaw": "1000000000000000000", "quote": {"buyAmountRaw": "1840378178", "buyAmountMinRaw": "1831176287", "slippageBps": 50, "route": {"venue": "univ3", "hops": 1, "feeTier": 500}, "priceImpactPct": 0.02, "gasEstimate": 81662, "venuesCompared": [{"venue": "aerodrome", "buyAmountRaw": "1838425629"}, {"venue": "univ3", "buyAmountRaw": "1840378178"}]}, "warnings": [], "disclaimer": "not financial advice; ..."}` - Tags: swap, dex, quote, price, base, aerodrome, uniswap, defi, on-chain, routing, non-custodial ### `GET /etf/flows` — $0.01 A single normalized view of spot-crypto-ETF net flow. A spot BTC/ETH ETF's coin holdings change only through share creation and redemption, so the day-over-day change in units held IS the net primary-market flow. For each fund we difference consecutive daily disclosures: daily net flow in coin equals units today minus units the prior trading day, and net flow in USD equals that coin flow times the implied price (market value divided by units) from the same disclosure, so no external price feed is needed. We then sum across the funds of the requested asset and region into a total, and report a recent series and the window cumulative. Sources are each issuer's OWN first-party disclosure (BlackRock iShares holdings CSV, ARK and Bitwise fund data, Grayscale product-performance history), cited on every response; we do NOT resell an aggregator's compiled table. Coverage is data-driven — a new fund is a registry row — and the free sources route discloses exactly which funds are active. Some issuers publish only a current snapshot, so their series builds forward from the first poll while the dominant funds are backfilled; the coverage field states this. Pass asset (btc or eth) and region (us; hk is a scaffold). A bad enum is a 400, no data yet is a 404, a total upstream failure is a 502, never a 500; a single fund failing is reported under errors with a partial flag. Hosts are fixed server-side, so there is no SSRF surface. This is market-structure intelligence, not trading advice. - Query params: `{"asset": "btc", "region": "us"}` - Example response: `{"asset": "btc", "region": "us", "coin": "BTC", "latest": {"as_of_date": "2026-07-17", "total_flow_usd": 135049000.0, "total_flow_coin": 2129.5, "funds": ["IBIT", "ARKB"]}, "funds": [{"ticker": "IBIT", "latest_flow_usd": 135049000.0, "latest_flow_coin": 2129.5, "history_days": 10}], "cumulative_window_usd": 305120000.0, "series_days": 9, "partial": false}` - Tags: etf, flows, bitcoin, ethereum, spot-etf, inflows, outflows, institutional, ibit, crypto, fund-flows, intelligence ### `GET /etf/holdings` — $0.01 The latest disclosed holdings for the spot ETFs of a crypto asset. For each fund we return the coin units held (for issuers that disclose a coin quantity) or the shares outstanding, the market value or net assets, and the shares outstanding, each dated to the issuer's disclosure. We then sum the market values into a total AUM and report the largest fund's share of it, a concentration signal (the spot BTC/ETH ETF market is dominated by one or two funds). Sources are each issuer's own first-party disclosure, cited on every response — not a resold aggregator table. Coverage is data-driven, so a new fund is a registry row, and the free sources route discloses which funds are active. Pass asset (btc or eth) and region (us; hk is a scaffold). A bad enum is a 400, no data is a 404, a total upstream failure is a 502, never a 500; a single fund failing is reported under errors with a partial flag. Hosts are fixed server-side, so there is no SSRF surface. Intelligence, not trading advice. - Query params: `{"asset": "eth", "region": "us"}` - Example response: `{"asset": "eth", "region": "us", "coin": "ETH", "funds": [{"ticker": "ETHA", "units": 2836766.18, "market_value": 5190062306.59, "shares_outstanding": 373640000.0, "as_of_date": "2026-07-17"}], "aggregate": {"total_aum_usd": 6600000000.0, "largest_fund": "ETHA", "largest_fund_aum_share": 0.79, "fund_count": 3}, "partial": false}` - Tags: etf, holdings, aum, bitcoin, ethereum, spot-etf, shares-outstanding, assets-under-management, ibit, crypto, concentration, intelligence ### `GET /etf/brief` — $0.02 The moat route: a single normalized, cited flow brief for a crypto asset's spot ETFs that fuses what would otherwise be several issuer queries and derived calculations. From the per-fund daily flows (units differenced across disclosures) we compute the latest total net flow in USD and coin, the streak of consecutive days of net inflow or net outflow, the cumulative over the recent window, a momentum read comparing the sum of the last few days versus the prior few, the issuer concentration (the largest fund's share of total AUM), the total AUM, and a deterministic verdict of accumulation, distribution or neutral derived from the sign and persistence of recent net flow relative to AUM. The verdict is a formula in code, with no model or LLM, so it is reproducible. Sources are each issuer's own first-party disclosure, cited with attribution — not a resold aggregator table. Each dimension is best-effort: a failing fund is reported under errors with a partial flag and the rest are returned; only a total failure is a 404 or 502, never a 500. Pass asset (btc or eth) and region (us; hk is a scaffold). Hosts are fixed server-side, so there is no SSRF surface. This is market-structure intelligence, not trading advice. - Query params: `{"asset": "btc", "region": "us"}` - Example response: `{"asset": "btc", "region": "us", "coin": "BTC", "verdict": "accumulation", "latest_flow_usd": 135049000.0, "as_of": "2026-07-17", "streak": {"length": 3, "direction": "inflow"}, "cumulative_window_usd": 305120000.0, "momentum": {"recent_sum_usd": 210000000.0, "prior_sum_usd": 95000000.0, "accelerating": true}, "concentration": {"largest_fund": "IBIT", "aum_share": 0.55}, "total_aum_usd": 85000000000.0, "partial": false}` - Tags: etf, flows, brief, bitcoin, ethereum, spot-etf, streak, momentum, accumulation, distribution, fusion, intelligence ### `GET /contract/source` — $0.02 The flagship explorer route for coding, audit and security agents. Give a contract address and an EVM network and it queries Sourcify for the verified source, merging into one answer: the ABI, the compilation metadata (language, compiler version, optimizer, evm version), the NatSpec user and developer docs, the source files (bounded), and the proxy resolution. When the address is an upgradeable proxy it additionally fetches the implementation contract's ABI and returns it as impl_abi with the implementation address and name, so you get the REAL logic ABI rather than the thin proxy ABI. This fusion, and the proxy implementation pull, is the edge over calling Sourcify raw. If the contract is not verified the route says so honestly (verified:false) instead of guessing, and if Sourcify is briefly unreachable it degrades to status:unavailable rather than erroring. Every response carries attribution and a disclaimer. - Query params: `{"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "network": "base"}` - Example response: `{"network": "base", "chain_id": 8453, "verified": true, "compilation": {"language": "Solidity", "compiler_version": "0.6.12", "name": "FiatTokenProxy"}, "abi_len": 12, "source_file_count": 1, "proxy": {"is_proxy": true, "proxy_type": "ZeppelinOSProxy", "impl_address": "0x2Ce6311d...", "impl_name": "FiatTokenV2_2", "impl_abi_len": 72}, "attribution": "Verified source / ABI / NatSpec / proxy-resolution via Sourcify (https://sourcify.dev), a public decentralized verified-contract store."}` - Tags: evm, contract, source-code, abi, verified, sourcify, proxy, implementation, natspec, audit, solidity, base, ethereum ### `GET /contract/abi` — $0.008 The economical ABI-only counterpart to /contract/source. Give a contract address and network and get the verified ABI from Sourcify plus the compact compilation header. If the address is a proxy the implementation ABI is pulled and returned as impl_abi with its address and name, so a proxy still yields its real logic interface. Use this when you already have the source or only need the interface to build or decode calls. Unverified contracts return verified:false honestly; a Sourcify outage degrades to status:unavailable, never a 500. - Query params: `{"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "network": "base"}` - Example response: `{"network": "base", "chain_id": 8453, "verified": true, "abi_len": 12, "proxy": {"is_proxy": true, "impl_name": "FiatTokenV2_2", "impl_abi_len": 72}, "attribution": "Verified source / ABI / NatSpec / proxy-resolution via Sourcify (https://sourcify.dev), a public decentralized verified-contract store."}` - Tags: evm, contract, abi, verified, sourcify, proxy, implementation, interface, base, ethereum, arbitrum ### `GET /evm/logs` — $0.01 Pull a contract's recent event logs directly from public keyless RPC (eth_getLogs) over a bounded, most-recent block window and decode them. Supply an event signature to both filter (its keccak topic0) and decode the indexed and data parameters; or pass a topic0 to filter; or omit both to get all recent events. Decoding draws on your supplied event ABI, else the contract's verified ABI from Sourcify, else a best-effort topic-to-name lookup via 4byte when the contract is unverified. Raw topics and data are always included so nothing is lost, with decoded fields added where the ABI is known. The window is hard-capped because keyless RPC rejects wide archive ranges; an oversize result is chunked and split automatically, and overflow is flagged truncated with rows capped. Dynamic indexed parameters are only recoverable as their keccak hash, flagged honestly. Public on-chain data; attribution and disclaimer on every response. - Query params: `{"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "network": "base", "signature": "Transfer(address,address,uint256)", "blocks": 500}` - Example response: `{"network": "base", "chain_id": 8453, "window": {"blocks": 500, "from_block": 48878010, "to_block": 48878509}, "decode_source": "caller_abi", "log_count": 1, "decoded_count": 1, "logs": [{"block": 48878480, "tx_hash": "0x...", "decoded": {"name": "Transfer", "signature": "Transfer(address,address,uint256)", "args": [{"name": "from", "type": "address", "value": "0x4e..."}]}}], "attribution": "Raw event logs read directly from public keyless RPC (eth_getLogs)."}` - Tags: evm, event-logs, logs, getlogs, decode, events, topic, base, ethereum, arbitrum, optimism, polygon ### `GET /evm/decode-signature` — $0.003 Turn an opaque 4-byte function selector, a 32-byte event topic0, or a raw calldata blob (whose first four bytes are the selector) into the human-readable signature it corresponds to. The 4byte database contains COLLISIONS: multiple text signatures hash to the same selector, and attackers deliberately register misleading ones on top of a common function. This route resolves that by ranking the real signature first: the canonical entry is the oldest one registered (smallest id / earliest creation), with every other candidate returned and flagged so you can see the ambiguity rather than being handed a spam signature. Each candidate's parameter types are parsed out for convenience. Distinct from a forward hash route (signature to selector): this goes selector back to signature. Attribution and disclaimer on every response. - Query params: `{"selector": "0xa9059cbb"}` - Example response: `{"selector": "0xa9059cbb", "input_kind": "function_selector", "signature_type": "function", "found": true, "collision": true, "canonical": {"text_signature": "transfer(address,uint256)", "params": ["address", "uint256"], "id": 145, "canonical": true}, "candidate_count": 6, "attribution": "Function/event signature text via the 4byte.directory open signature database (https://www.4byte.directory)."}` - Tags: evm, selector, signature, 4byte, decode, calldata, topic, function, event, collision, abi ### `GET /evm/internal-tx` — $0.01 Expose the internal transactions of a transaction: the nested calls a contract makes to other contracts and the value moved on each, which a normal transaction receipt does not show. Give a transaction hash and network and the route reads Blockscout's internal-transaction trace, returning each entry's call type (call, delegatecall, staticcall, create), from and to, wei value, success and any error, plus a summary of how much value was transferred and how many transfers occurred. This is sourced from Blockscout because debug_traceTransaction is not available on keyless public RPC. Blockscout is rate-limited per IP, so when throttled or briefly down the route returns status:unavailable rather than failing, and an unknown hash returns found:false. Attribution and disclaimer on every response. - Query params: `{"tx": "0xe661f796c921f6fc1b366c9c62ef630ca1b33a7f61d433a4b4b6fc06ad84c86b", "network": "base"}` - Example response: `{"network": "base", "tx_hash": "0xe661...", "found": true, "internal_tx_count": 46, "value_transfers": 2, "total_value_transferred_wei": "0", "internal_transactions": [{"index": 0, "type": "call", "call_type": "staticcall", "from": "0x78...", "to": "0x42...", "value": "0", "success": true}], "attribution": "Internal-transaction traces via Blockscout (https://blockscout.com), a public-good open block explorer."}` - Tags: evm, internal-transactions, trace, value-flow, blockscout, transaction, calls, base, ethereum, arbitrum, polygon ### `GET /nft/floor` — $0.01 A compact, normalized NFT collection floor across EVM chains, Solana and Bitcoin Ordinals from ONE call — for trading, portfolio and floor-sweeping agents that would otherwise integrate three different marketplace APIs and their unit conventions. Input is EITHER {chain, contract} or {slug}: on EVM (ethereum/base/polygon/arbitrum/optimism/avalanche/bsc) we resolve via the keyless CoinGecko NFT API (a global CoinGecko slug works with no chain); on Solana and Bitcoin-Ordinals via the keyless Magic Eden stats API using the marketplace collection symbol as the slug. The floor is returned in the chain's native unit AND in USD (SOL lamports/1e9 and BTC sats/1e8 normalized, USD via DefiLlama spot), with the 24h floor change percent and market cap where the source provides them. Upstream hosts are fixed server-side (you pass only a chain and a contract/slug), so there is no SSRF surface; source attribution is carried on every response. Active floor is off-chain marketplace orderbook data, not an on-chain price. Intelligence, not financial advice. - Query params: `{"chain": "ethereum", "slug": "pudgy-penguins"}` - Example response: `{"chain": "ethereum", "collection": "Pudgy Penguins", "symbol": "PPG", "floor": {"native": 4.08, "native_symbol": "ETH", "usd": 7694.54}, "floor_24h_change_pct": -3.46, "market_cap_usd": 68389111, "source": "coingecko", "attribution": ["Powered by CoinGecko"]}` - Tags: nft, floor-price, floor, collection, ethereum, solana, bitcoin, ordinals, multichain, market-data ### `GET /nft/collection` — $0.03 The flagship, transformative route — one compact call that turns raw marketplace stats into a decision. It fuses collection identity (name / symbol / contract / chain), floor in native + USD, market cap, volume, total supply, unique holders and listed count, then COMPUTES the metrics an NFT agent actually reasons over: liquidity ratio (listed over supply, and 24h volume over market cap where the volume window is 24h), holder / supply distribution ratio, sales velocity (one-day sales, per-supply where supply is known) and floor momentum (24h percent). Those feed a deterministic, weighted blend of up-to-four sub-scores (liquidity, distribution, activity, momentum) — each mapped through registry anchors and renormalized over whatever is present — into a normalized market-health rating (hot / healthy / cooling / illiquid / thin) with a coverage-based confidence and a plain rationale list, plus per-source citations. It is a blend of signals, not a relabel of a single field, and it is deterministic (no LLM). Coverage differs by source: EVM (CoinGecko) carries floor/mcap/volume/holders/supply/sales in one call; Bitcoin-Ordinals (Magic Eden) carries floor/supply/owners/listed; Solana (Magic Eden) is thinner (floor/listed/avg/7d-volume) and is enriched best-effort from the live sales feed, so its verdict carries lower confidence — reported honestly, never faked. Upstream hosts are fixed server-side (SSRF-safe); attribution is on every response; there is no bulk/enumeration route. Intelligence, not financial advice. - Query params: `{"chain": "ethereum", "slug": "bored-ape-yacht-club"}` - Example response: `{"chain": "ethereum", "identity": {"name": "Bored Ape Yacht Club", "symbol": "BAYC"}, "floor": {"native": 8.6, "native_symbol": "ETH", "usd": 16268.38}, "total_supply": 9998, "holders": 5500, "metrics": {"holder_supply_ratio": 0.55, "floor_momentum_24h_pct": -1.2}, "market_health": {"rating": "healthy", "score": 0.61, "confidence": 1.0, "rationale": ["24h turnover 1.20% of market cap"]}, "citations": ["Powered by CoinGecko"], "source": "coingecko"}` - Tags: nft, collection, market-health, liquidity, holders, floor, intelligence, multichain, solana, ordinals ### `GET /nft/sales` — $0.02 Recent-sales intelligence for a collection — for agents gauging demand, exit liquidity and whether trades are clearing above or below floor. On Solana and Bitcoin-Ordinals we read the keyless Magic Eden activity feed, filter to real sales in the last 24 hours, and return the sale count, the average sale price in native + USD, momentum versus floor (how far the average clear sits above/below the floor, in percent), sales velocity (sales over supply where supply is known) and a short list of the most recent sales. On EVM chains CoinGecko exposes no itemized trade feed, so the route is honest: sales_feed_available is false and sales_24h / average come from CoinGecko's one-day aggregate, clearly labelled — it never invents individual trades. If a native feed is transiently unavailable the route degrades to the aggregate rather than failing. Upstream hosts are fixed server-side (SSRF-safe); attribution is on every response. Intelligence, not financial advice. - Query params: `{"chain": "solana", "slug": "okay_bears"}` - Example response: `{"chain": "solana", "collection": "okay_bears", "sales_feed_available": true, "window": "24h", "sales_24h": 12, "avg_sale_price": {"native": 1.31, "native_symbol": "SOL", "usd": 100.9}, "momentum_vs_floor_pct": 6.8, "source": "magiceden", "attribution": ["Data via Magic Eden", "USD via DefiLlama (coins.llama.fi)"]}` - Tags: nft, sales, trades, volume, velocity, momentum, solana, ordinals, multichain, market-data ### `GET /social/trending` — $0.02 A one-call cross-social crypto attention radar. The spine is the OPEN Farcaster protocol read keyless from a public Snapchain hub: we mine allowlisted cashtags ($BTC, $DEGEN, ...) from recent casts across a curated set of crypto channels (degen, base, memes, ethereum, solana, bitcoin, defi, trading, ...), count mentions, compute a recent-vs-prior velocity and score cast sentiment with the same crypto-tuned lexicon as our news service. We fuse that with crypto-news mention counts (majors) and a GDELT macro coverage-trend for context. Each row returns the symbol, an attention score (0-100, normalized within the result), the Farcaster/news mention split, a velocity percentage, the channels driving it and cast sentiment, so you see WHICH source and channels carry the signal. A symbol allowlist (seeded from our coin list + Base/Farcaster-native tokens) removes cashtag noise. HONESTY: velocity uses recency-rank windows (freshest vs older half of the fetched casts) rather than fixed clock-hours, so it is robust to hub lag and clock skew; the effective window spans and the data lag are reported. A source that fails is omitted with a partial flag (never a 500). Hosts are fixed server-side (you pass only limit), so there is no SSRF surface. Attribution on every response; we never rehost full cast/article text. ToS-clean by construction — this never scrapes or resells Twitter/X, Reddit, Instagram, TikTok or LinkedIn. - Query params: `{"limit": 15}` - Example response: `{"as_of": "2025-12-21T20:37:00Z", "data_lag_hours": 1.2, "casts_analyzed": 4200, "channels_ok": 12, "count": 1, "trending": [{"symbol": "DEGEN", "name": "Degen", "attention_score": 100.0, "farcaster_mentions": 41, "news_mentions": 0, "velocity_pct": 575.0, "channels": ["base", "degen"], "cast_sentiment": 0.31}], "macro_context": {"available": true, "metric": "coverage_volume", "trend": "rising"}, "partial": false, "red_line": "ToS-clean: never Twitter/X, Reddit, Instagram, TikTok, LinkedIn.", "attribution": ["Farcaster protocol (MIT) ...", "GDELT (public domain) ..."]}` - Tags: social, trending, crypto, farcaster, sentiment, attention, velocity, signal, memecoins, base, cashtags, fusion ### `GET /social/sentiment` — $0.012 A composite crypto sentiment read that fuses three independent ToS-clean sources into one honest signal. For a ticker (`sym`, e.g. BTC/ETH/SOL/DEGEN, or a coin name) or a free-text `query`, we combine: (1) Farcaster cast sentiment — recent casts mentioning the symbol across curated crypto channels, scored with our crypto-tuned lexicon; (2) our crypto-news composite (deduped headline sentiment + the keyless Fear&Greed index); and (3) GDELT's native multilingual world-tone over a one-week window. The response gives a normalized composite score (-1 bearish .. +1 bullish) with a label, a PER-SOURCE breakdown (so you see whether Farcaster, news or world-tone is carrying the signal), 24h (Farcaster recent-vs-prior shift) and 7d (GDELT tone trend) deltas, and a CONFIDENCE derived from how many data points sit under the signal — because a score from three casts is not a score from three hundred, and we say so. Majors get all three sources; Base/Farcaster-native memecoins (which world-news never covers) honestly report the news/GDELT facets as unavailable and lean on the social spine. Any source that fails is omitted with a partial flag — never a 500. Hosts are fixed server-side (you pass only sym/query), so there is no SSRF surface; attribution on every response; we never rehost full cast/article text. ToS-clean by construction — no Twitter/X, Reddit, Instagram, TikTok or LinkedIn. - Query params: `{"sym": "DEGEN"}` - Example response: `{"query": {"symbol": "DEGEN", "name": "Degen", "text": null}, "composite": {"score": 0.24, "label": "bullish", "confidence": "medium", "samples": 38, "sources_used": ["farcaster"]}, "deltas": {"24h": {"source": "farcaster", "shift": 0.05}, "7d": {"source": "gdelt", "direction": null}}, "source_breakdown": {"farcaster": {"available": true, "score": 0.24, "label": "bullish", "casts_scored": 38, "recent_vs_prior_shift": 0.05}, "cryptonews": {"available": false, "reason": "symbol has no crypto-news footprint"}, "gdelt": {"available": false, "reason": "no world-news query for this symbol"}}, "partial": true, "red_line": "ToS-clean: never Twitter/X, Reddit, Instagram, TikTok, LinkedIn.", "attribution": ["Farcaster protocol (MIT) ...", "Fear & Greed — alternative.me"]}` - Tags: sentiment, crypto, social, farcaster, news, gdelt, bullish, bearish, signal, fusion, confidence, composite ### `GET /yield/build` — $0.05 A non-custodial yield deposit/redeem calldata builder for Base. You pass the protocol (aave-v3, compound-v3 or erc4626), the asset (symbol or 0x address) for Aave/Compound or the vault (any Base ERC-4626 0x address, resolved on-chain) for erc4626, the raw amount, the action (deposit or redeem) and the recipient. We read the public read-only state of these permissionless protocols with our own eth_call: Aave V3 Pool getReserveData (active/frozen/paused + supply cap + aToken), Compound III Comet supply/withdraw pause flags and base asset, and ERC-4626 asset()/decimals()/previewDeposit/previewRedeem/maxDeposit/totalSupply. We return the ready-to-sign transaction (to / data / value), a separate ERC-20 approval for deposits (spender is exactly the pool/comet/vault; a plain allowance), and the expected shares or assets from the protocol's own preview. Aave and Compound supply/withdraw are 1:1 in the underlying so no min-out applies; ERC-4626 direct deposit/redeem has NO on-chain min-out parameter, so we return the current preview expected amount plus an honest warning — we do not invent a minimum that the ABI cannot enforce. Approval is present ONLY for deposit; redeem burns the caller's own shares/aTokens. amount accepts 'max' for redeem (full balance). We are NON-CUSTODIAL: we never hold, sign, execute or submit; your own wallet signs. Nothing commercial (Enso, Brahma, Portals) is resold — we compute from permissionless on-chain data. A paused/inactive market, unlisted asset or non-ERC-4626 vault is a clean 400, never a 500. Not financial advice. - Query params: `{"protocol": "aave-v3", "asset": "USDC", "amount": "1000000000", "action": "deposit", "recipient": "0x1111111111111111111111111111111111111111"}` - Example response: `{"chain": "eip155:8453", "network": "base", "custody": "non-custodial", "protocol": "aave-v3", "action": "deposit", "market": {"kind": "aave-v3", "pool": "0xA238Dd80...", "asset": {"symbol": "USDC", "decimals": 6}, "aToken": "0x4e65fE4D..."}, "transaction": {"to": "0xA238Dd80...", "data": "0x617ba037...", "value": "0"}, "approval": {"token": "0x833589fC...", "spender": "0xA238Dd80...", "amountRaw": "1000000000", "data": "0x095ea7b3..."}, "expected": {"aTokensRaw": "1000000000", "basis": "1:1 underlying (aToken)"}, "warnings": [], "disclaimer": "not financial advice; you sign; non-custodial; ..."}` - Tags: yield, defi, calldata, non-custodial, base, aave, compound, erc4626, vault, lending, deposit, redeem, on-chain ### `GET /yield/preview` — $0.01 The preview-only sibling of /yield/build: the same on-chain reads and expected shares/assets from the protocol's preview (Aave/Compound 1:1 underlying; ERC-4626 previewDeposit/previewRedeem), plus the same safety flags — Aave active/frozen/paused and supply cap, Compound III supply/withdraw pause, and the empty-vault inflation-attack warning for ERC-4626 — but WITHOUT building any transaction calldata or approval, so it is cheaper and needs no recipient (except erc4626 redeem 'max', which reads maxRedeem for the owner). Sources are permissionless on-chain state read with our own eth_call, nothing commercial resold. A paused/unlisted market or non-ERC-4626 vault is a clean 400. Not financial advice, not a claim of best execution. - Query params: `{"protocol": "erc4626", "vault": "0xeE8F4eC5672F09119b96Ab6fB59C27E1b7e44b61", "amount": "1000000", "action": "deposit"}` - Example response: `{"chain": "eip155:8453", "network": "base", "custody": "non-custodial", "protocol": "erc4626", "action": "deposit", "market": {"kind": "erc4626", "vault": "0xeE8F4eC5...", "vaultDecimals": 18, "asset": {"symbol": "USDC", "decimals": 6}}, "expected": {"sharesRaw": "905749200623242", "basis": "previewDeposit"}, "amountInterpretation": "assets (underlying)", "warnings": ["ERC-4626 direct deposit/redeem has NO on-chain min-out parameter; ..."], "disclaimer": "not financial advice; non-custodial; ..."}` - Tags: yield, defi, preview, base, aave, compound, erc4626, vault, lending, on-chain, non-custodial ### `GET /sol/token/verdict` — $0.03 The flagship route for a Solana trading / sniper / research agent deciding whether to buy a memecoin. It answers, in ONE call and as a normalized verdict, the questions that decide rug risk: is the mint authority still active (the issuer can print unlimited new supply)? is the freeze authority still active (the issuer can freeze your token account — a honeypot)? how concentrated is the REAL free float once the bonding-curve account, AMM/DEX pool vaults and the incinerator are labelled and excluded (so 'the curve holds 90%' is never mistaken for a whale)? where on the bonding curve is it (a brand-new curve can stall or be abandoned; a graduated token survived)? and, after graduation, is the LP burned? Each dimension carries a tunable weight; the fusion yields a 0-100 risk_score mapped to safe (<=25), caution (<=55) or danger, plus concrete flags, every component value and citations to the exact on-chain reads. All data is read from public Solana RPC and open keyless DefiLlama price data — NOT scraped from any launchpad frontend API — so it sidesteps launchpad ToS and is deterministic and exact. Any single source failing degrades that component honestly (partial) rather than failing the call. Intelligence, not financial advice. - Query params: `{"mint": "9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump"}` - Example response: `{"mint": "9BB6...pump", "launchpad": "pump.fun", "verdict": "caution", "risk_score": 37, "flags": ["mid_curve", "elevated"], "components": {"authorities": {"mint_authority_active": false, "freeze_authority_active": false}, "curve": {"graduated": false, "graduation_progress_pct": 55.8, "sol_in_curve": 21.06, "destination": "PumpSwap"}, "holders": {"top1_pct_of_circulating": 18.4, "low_float_warning": false}}, "attribution": "On-chain Solana RPC (public, keyless); Data by DefiLlama"}` - Tags: solana, memecoin, pumpfun, rug, risk, verdict, token-safety, bonding-curve, trenches, on-chain ### `GET /sol/curve` — $0.01 Decodes the on-chain bonding-curve account for a memecoin mint and returns its graduation state deterministically. Graduation progress = the fraction of the curve's sellable tokens sold (real token reserves deplete from 793.1e12 toward zero as roughly 85 SOL is raised); the response also gives the SOL currently in the curve, the SOL still needed to graduate, the complete flag, the marginal curve price and market cap (with USD via keyless DefiLlama), and the graduation destination — PumpSwap, not Raydium (pump.fun moved graduation to PumpSwap, and the LP is burned to the incinerator by design). Priced low ($0.01) so a sniper agent can poll it frequently. The layout and invariant constants were verified against live mainnet tokens (both pre- and post-graduation). If the mint has no live curve (already an AMM token) the route says so and returns the DefiLlama market price instead. Intelligence, not financial advice. - Query params: `{"mint": "9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump"}` - Example response: `{"mint": "CmHK...pump", "launchpad": "pump.fun", "on_bonding_curve": true, "graduation_progress_pct": 55.8, "complete": false, "sol_in_curve": 21.06, "sol_to_graduation": 63.94, "price_usd": 4.23e-06, "market_cap_usd": 4230.0, "destination": "PumpSwap", "attribution": "Data by DefiLlama (coins.llama.fi)"}` - Tags: solana, memecoin, pumpfun, bonding-curve, graduation, price, market-cap, trenches, on-chain, polling ### `GET /sol/token/holders` — $0.02 The cap-table a trader needs before buying, computed on-chain. It reads the top token accounts, resolves each account's owner, and labels the ones that are NOT real holders — the bonding-curve account, any AMM/DEX pool vault (Raydium, PumpSwap, Orca, Meteora and others, detected by the program that owns the vault) and the incinerator (burned) — then excludes them so concentration reflects the genuine free float rather than 'the curve holds 90%'. It returns every top holder with amount, percent of total supply and percent of circulating, plus the top1 / top5 / top10 share of circulating, a Herfindahl (HHI) concentration index, the circulating fraction of total supply and a low-float warning for brand-new tokens where nearly all supply is still on the curve (making concentration noisy). Keyless public RPC, no launchpad frontend scrape. Intelligence, not financial advice. - Query params: `{"mint": "9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump"}` - Example response: `{"mint": "9BB6...pump", "launchpad": "pump.fun", "top_n": 20, "circulating_pct_of_total": 44.2, "concentration": {"top1_pct_of_circulating": 18.4, "top5_pct_of_circulating": 41.2, "hhi_circulating": 512.3, "low_float_warning": false}, "attribution": "On-chain Solana RPC (public, keyless)"}` - Tags: solana, memecoin, holders, cap-table, concentration, distribution, whales, hhi, trenches, on-chain ### `GET /sol/lp/strategy` — $0.03 For an LP / market-making agent that wants to provide liquidity to a memecoin, this route finds the live Solana LP pools that actually hold the token (matched by the pool's underlying-token mints in the keyless DefiLlama yields dataset — covering Orca Whirlpools, Raydium AMM/CLMM, Kamino and other Solana venues), filters out dust pools, and ranks them by a fusion of TVL, fee-based APY and 24h volume. It returns the best pool and the alternatives, each with TVL, fee-APY, reward-APY, 24h/7d volume, the fee tier and the derived 24h fees (24h volume times fee tier), plus impermanent-loss risk. For a concentrated-liquidity position it suggests a plus/minus price range derived from the pool's return volatility (sigma) — tighter for stable pairs, wider for volatile memecoins — to balance fee capture against out-of-range risk. Sourced keyless with attribution; the deprecated Meteora DLMM public API is not depended on. If no material pool exists yet (a pre-graduation token) the route says so honestly. Intelligence, not financial advice. - Query params: `{"mint": "9BB6NFEcjBCtnNLFko2FqVQBq8HHM13kCyYcdQbgpump"}` - Example response: `{"mint": "9BB6...pump", "available": true, "best_pool": {"project": "raydium-amm", "symbol": "WSOL-FARTCOIN", "tvl_usd": 6251386.0, "apy_base_fees": 6.47, "fee_pct": 0.0025, "fees_24h_usd": 1107.6, "pool_meta": "Standard - 0.25%"}, "strategy": {"suggested_range_pct": 20.0}, "ranking": "fusion of TVL + fee-APY (apyBase) + 24h volume", "attribution": "Pool yields by DefiLlama (yields.llama.fi)"}` - Tags: solana, memecoin, lp, liquidity, meteora, orca, raydium, yield, strategy, concentrated-liquidity ### `GET /address/labels` — $0.02 The flagship label route for agents that must know WHO or WHAT is on the other side of a swap, transfer or signature. Give an address and an EVM network and it fuses, deterministically and keyless (no LLM): (1) identity from the Open Labels Initiative — an MIT, Ethereum-Foundation-funded open attestation pool — decoded into contract_name / owner_project / usage_category, de-spammed with our OWN consensus (aggregate by tag across attesters, weight a trusted-attester allowlist, drop revoked labels, band confidence high/medium); (2) the entity behind owner_project (display name, website, category) via growthepie; (3) authoritative on-chain truth — is_contract and code_hash from live RPC, which OVERRIDES the attested hint on disagreement; (4) reverse ENS/Basename for EOAs; (5) risk — a match against PUBLIC official sanctions lists (OFAC/UK/EU/UN) and a MIT scam-drainer darklist; (6) best-effort Blockscout heuristics (first-seen age, funder, CEX linkage). Every response carries per-source attribution, a confidence band and a disclaimer. Strongest on contracts/protocols; EOA/whale coverage is honestly thinner. Closed providers (Nansen/Arkham/Etherscan-scrape) are NOT resold. An unknown address returns labels:[] with on-chain truth and risk flags rather than a 404; an upstream outage degrades that dimension to a note rather than erroring. - Query params: `{"address": "0x2626664c2603336E57B271c5C0b26F421741e481", "network": "base"}` - Example response: `{"address": "0x2626664c2603336E57B271c5C0b26F421741e481", "network": "base", "is_contract": true, "labels": [{"category": "dex", "entity": "uniswap", "name": "SwapRouter02", "source": "OLI"}], "risk": {"sanctioned": false, "scam": false}, "confidence": "high"}` - Tags: address, labels, entity, identity, oli, sanctions, scam, screening, contract ### `GET /sellerops/audit` — $0.08 One-call settle-readiness AUDIT for the OWNER of an x402 route (the seller-side mirror of /preflight's buyer-side trust score). Input: the route URL (+ optional method and network hint). Output: a deterministic verdict — blocked if any settle-blocker fails, degraded if only warnings, ready if clean — plus a findings list where each item carries id / status / severity / summary and an APPLICABLE fix, an evidence block and a coverage summary. Table-stakes checks (reachable, 402 status, x402 v2 challenge, manifest present) sit alongside the settle-blocker moat a consistency-only tool misses: the empirical ~4400 B payment-required header ceiling (over it, CDP verify rejects the echoed payload and the route never settles); AWS-WAF SQLi-shape / pipe-alternation text that 403s verify; method honesty (a GET mirror that 402s while the real method 405s); canonical-USDC ground-truth and payTo/network consistency (manifest vs live 402); REAL index membership walked across the CDP and PayAI discovery catalogs (not self-declaration — this answers 'why is my route invisible'); and the on-chain settle fact (has payTo ever received USDC on the advertised chain). Best-effort per check (a source down degrades to unknown, never a 500). All fetches to the target are SSRF-guarded. Diagnostic indicators from observed public surfaces, not a guarantee the route will settle. Bad url returns 400. - Query params: `{"url": "https://api.example.com/some-paid-route", "network": "base"}` - Example response: `{"verdict": "blocked", "findings": [{"id": "header_size", "status": "fail", "severity": "blocker", "summary": "payment-required header 4592 B > ~4400 B ceiling.", "fix": "Shrink output_example ~192 B."}], "coverage": {"checks_total": 12, "evaluated": 11, "unknown": 1}, "disclaimer": "Diagnostic indicators, not a settle guarantee."}` - Tags: x402, seller, settle, diagnostics, bazaar, payments, audit, discovery, revenue ### `GET /sellerops/settle-check` — $0.02 The cheap iterate grain of /sellerops/audit: only the CDP settle-blocker checks that keep a live route from settling — the payment-required header byte size vs the empirical ~4400 B ceiling (canon #16), WAF-tripping SQLi-shape / pipe text (canon #15), and method honesty (canon #10) — from a single unpaid 402 probe. A seller trims the route's output_example and re-runs this to confirm the header is under the ceiling, without paying for the full audit each time. Deterministic, read-only, SSRF-guarded. Diagnostic indicators, not a guarantee the route will settle. - Query params: `{"url": "https://api.example.com/some-paid-route"}` - Example response: `{"verdict": "blocked", "findings": [{"id": "header_size", "status": "fail", "severity": "blocker", "summary": "payment-required header 4592 B > ~4400 B.", "fix": "Shrink output_example ~192 B."}], "coverage": {"checks_total": 5, "evaluated": 5, "unknown": 0}, "disclaimer": "Diagnostic indicators, not a settle guarantee."}` - Tags: x402, seller, settle, diagnostics, payments, header-size, waf ### `GET /humanverify/create` — $0.20 A human-in-the-loop verdict service for questions that need real human judgement — culturally-nuanced checks, subjective quality, contested moderation, real-world verification, translation nuance. You pay once here with a judgement question and optionally a CSV of allowed labels, a target number of answers (default 3, max 5) and a per-answer reward (default $0.03, clamped $0.02–0.05). We validate the question against a content policy (engagement/astroturf, captcha/anti-fraud, PII, professional medical/legal/financial advice and illegal/harmful tasks are refused, and never paid for), then post the task to an account-free human rail (WURK's agenttohuman on Base) for exactly responses×reward — no add-on fee, funding-gated so we never pay blind. You get back an opaque ticket and a resultToken immediately; the WURK secret is never exposed. Human answers are asynchronous, so you POLL the FREE /humanverify/result route: it returns pending until answers arrive, then ONE typed verdict with an honest confidence = agreement_ratio × min(1, received/target), with both components shown. With labels the verdict is a categorical majority vote; without, a free-text consensus with a dissent note. Zero answers in the best-effort window returns verdict 'no_human_responses' at confidence 0 — we never fabricate. This is orchestration + aggregation + confidence over a human rail, not a raw proxy; we are not affiliated with WURK and this is not professional advice. - Query params: `{"question": "Is this English tagline natural to a native speaker: 'Feel the freshness in every drop'?", "labels": "natural,awkward,wrong", "responses": 3, "reward": 0.03}` - Example response: `{"status": "created", "ticket": "hv_9f3c1a2b4d5e6f708192a3b4", "resultToken": "5b1e…(48 hex)", "provider": "wurk", "targetResponses": 3, "reward": 0.03, "poll": "https://api.agentstools.dev/humanverify/result?ticket=hv_…&resultToken=…", "bestEffortNote": "Human answers arrive asynchronously; poll the free result route."}` - Tags: human, hitl, judgement, consensus, verify, moderation, translation, subjective, crowdsource, verdict, confidence, async ### `GET /korea/disclosures` — $0.01 A structured feed of a Korean issuer's official regulatory disclosures for cross-border due-diligence and investment research. Supply a 6-digit ticker, an 8-digit DART corp code, or a company name (English or Korean); the route resolves it to the issuer and pulls the recent filings from the Korean FSS OPENDART English API. Each filing carries its receipt number, report title, filing date, submitter, market (KOSPI, KOSDAQ, KONEX) and a direct English viewer URL to the primary document. Optionally narrow to a look-back window or a single filing category. This is the official first source of Korean corporate disclosures, not a US-centric aggregator; company data only; the OPENDART source is public data under the Korea Public Data Act. - Query params: `{"ticker": "005930", "months": 6, "limit": 20}` - Example response: `{"found": true, "entity": {"name": "SAMSUNG ELECTRONICS CO,.LTD", "corp_code": "00126380", "stock_code": "005930", "market": "KOSPI"}, "count": 1, "filings": [{"rcept_no": "20230801000123", "report_nm": "Annual Report", "filing_date": "2023-08-01", "submitter": "Samsung Electronics", "market": "KOSPI", "viewer_url": "https://englishdart.fss.or.kr/dsbh001/main.do?rcpNo=20230801000123"}], "attribution": "Korea DART / FSS OPENDART (Public Data Act)"}` - Tags: korea, dart, disclosures, filings, due-diligence, kospi, kosdaq, opendart, fss, cross-border, non-us ### `GET /korea/financials` — $0.03 One-call normalized fundamentals for a Korean issuer, the non-US analogue of our SEC EDGAR financials route. Supply a ticker, DART corp code or name plus a fiscal year; the route resolves the entity and pulls the full financial statements from the Korean FSS OPENDART English API, then maps each account onto a single canonical schema for the income statement, balance sheet and cash-flow statement. The value is the normalization plus traceability: raw Korean statements are heterogeneous and account-tagged, while this returns a compact JSON where every figure carries its language-independent XBRL account id, English label, statement division, up to three periods of amounts in Korean won, and the filing it came from (receipt number and English viewer URL) so an agent can trace any number back to the source. Pick the report period (annual, half, Q1, Q3) and basis (consolidated or separate), and optionally filter which statements you want. Unmapped custom lines are surfaced as cited other entries, never a raw page dump. Company data only; the OPENDART source is public data under the Korea Public Data Act. Not investment advice. - Query params: `{"ticker": "005930", "year": 2023, "report": "annual", "basis": "consolidated"}` - Example response: `{"found": true, "entity": {"name": "SAMSUNG ELECTRONICS CO,.LTD", "corp_code": "00126380", "stock_code": "005930", "market": "KOSPI"}, "year": 2023, "report": "annual", "basis": "consolidated", "filing": {"rcept_no": "20240312000736", "viewer_url": "https://englishdart.fss.or.kr/dsbh001/main.do?rcpNo=20240312000736"}, "statements": {"income": [{"line": "revenue", "sourceTag": "ifrs-full_Revenue", "label": "Revenue", "sj_div": "CIS", "unit": "KRW", "periods": [{"period": "current", "fy": 2023, "amount": 258935494000000, "unit": "KRW"}, {"period": "prior", "fy": 2022, "amount": 302231360000000, "unit": "KRW"}], "filing": {"rcept_no": "20240312000736", "viewer_url": "https://englishdart.fss.or.kr/dsbh001/main.do?rcpNo=20240312000736"}}]}, "attribution": "Korea DART / FSS OPENDART (Public Data Act)"}` - Tags: korea, dart, financials, xbrl, fundamentals, income-statement, balance-sheet, cash-flow, due-diligence, kospi, kosdaq, opendart ### `GET /korea/ratios` — $0.02 Ready-to-use financial ratios derived from a Korean issuer's DART fundamentals, so an agent does not have to pull raw lines and do the arithmetic. Supply a ticker, DART corp code or name plus a fiscal year; the route computes profitability margins (gross, operating, net), returns on assets and equity, liquidity (current ratio), leverage (debt to equity and debt to assets), and period-over-period growth in revenue, net income and operating income. Every computed number carries a derived_from list naming the exact source accounts and filing receipt it was built from, so the math is auditable, plus simple red-flag anomalies such as negative equity, a net loss or a current ratio below one. Pick the report period and basis. A metric with insufficient data is skipped rather than guessed. These are indicators, not investment advice; company data only; the OPENDART source is public data under the Korea Public Data Act. - Query params: `{"ticker": "005930", "year": 2023, "report": "annual"}` - Example response: `{"found": true, "entity": {"name": "SAMSUNG ELECTRONICS CO,.LTD", "corp_code": "00126380", "stock_code": "005930", "market": "KOSPI"}, "year": 2023, "report": "annual", "basis": "consolidated", "ratios": [{"name": "netMargin", "value": 0.058, "derived_from": [{"line": "netIncome", "sourceTag": "ifrs-full_ProfitLoss", "rcept_no": "20240312000736"}, {"line": "revenue", "sourceTag": "ifrs-full_Revenue", "rcept_no": "20240312000736"}]}], "anomalies": [], "attribution": "Korea DART / FSS OPENDART (Public Data Act)"}` - Tags: korea, dart, ratios, margins, liquidity, leverage, growth, fundamentals, due-diligence, kospi, kosdaq, opendart ### `POST /provenance/verify` — $0.02 A verdict-before-trust check a media-handling agent runs on an image, video, audio clip or PDF it received or is about to publish. Input is the caller's OWN media bytes (base64) plus the format; nothing is fetched and no remote or soft-binding manifest is resolved (remote_manifest_fetch is off — pure offline, SSRF-free). The engine is the official contentauth c2pa-rs library: it parses the embedded JUMBF Content-Credentials manifest, checks the asset hash-binding (detecting any edit after signing) and verifies the signing certificate chain against two bundled trust snapshots — the official C2PA production conformance trust list and the frozen Interim Trust List for content signed before 2026. Verdict: authentic-provenance (signer chains to a trusted anchor and the asset is intact; trust_source names production or interim-legacy), untrusted-signer (valid but self-signed / unknown issuer), tampered (manifest present but validation failed — hash mismatch or broken claim signature), or unsigned (no manifest). The response distils the SIGNED claims an agent needs for go/no-go: the signer certificate (issuer, common name, algorithm, serial, signing time), the claim generator, an AI-source flag read from the signed IPTC digitalSourceType (generative-AI, composite, camera capture) plus any CAWG training-mining constraint, the edit-action history and the ingredient graph. This is a cryptographic-provenance verdict, not a deepfake or AI-pixel detector; a pass verifies a signed credential's integrity and trust, not the real-world truth of the content. - Request body: `{"media": "/9j/4AAQSkZJRgABAQAAAQABAAD/2Q==", "format": "image/jpeg"}` - Example response: `{"object": "provenance_verdict", "verdict": "authentic-provenance", "trusted": true, "trust_source": "production", "signed": true, "validation_state": "Trusted", "format": "image/jpeg", "claims": {"signer": {"issuer": "Truepic", "alg": "Es256"}, "ai": {"ai_generated": false, "ai_composite": false}, "manifest_chain": 1}, "pack_version": "2026.07.24"}` - Tags: c2pa, provenance, content-credentials, media, authenticity, ai-disclosure, verdict, agent ### `POST /provenance/inspect` — $0.008 The detailed form of the provenance read. Same offline engine and input as /provenance/verify (the caller's media bytes plus format), but instead of a collapsed verdict it returns the whole manifest store: for each manifest in the chain the claim generator, the signer certificate metadata, the list of assertion labels, the parsed edit actions, the AI-source classification and the ingredient graph (title, format, relationship of each source component), plus the granular validation success and failure codes and the active-manifest pointer. Useful for an agent building its own provenance policy or audit trail over the raw tree. Heavy binary assertion payloads (thumbnails, hashed-URI byte blobs) are omitted — only metadata. Pure local computation, no network, no remote-manifest fetch. A cryptographic-provenance read, not a deepfake detector. - Request body: `{"media": "/9j/4AAQSkZJRgABAQAAAQABAAD/2Q==", "format": "image/jpeg"}` - Example response: `{"object": "provenance_inspect", "signed": true, "media_bytes": 183901, "format": "image/jpeg", "validation_state": "Valid", "active_manifest": "urn:c2pa:...", "manifest_chain": 1, "manifests": {"urn:c2pa:...": {"claim_generator": {"raw": "cai-helper 0.4.8", "tools": []}, "title": "cloud.jpg", "format": "image/jpeg", "signer": {"issuer": "C2PA Test", "common_name": "C2PA Signer", "alg": "Ps256"}, "assertions": [{"label": "c2pa.actions", "kind": null}], "actions": [], "ai": {"ai_generated": false, "ai_composite": false, "source_types": []}, "ingredients": {"count": 2, "items": [{"title": "earth.jpg", "format": "image/jpeg", "relationship": "componentOf"}]}}}, "pack_version": "2026.07.24", "disclaimer": "C2PA cryptographic-provenance verdict, not a deepfake / AI-pixel detector; a pass verifies a signed credential's integrity and trust chain, not the real-world truth of the content."}` - Tags: c2pa, provenance, content-credentials, manifest, inspect, media, agent ### `POST /cost/estimate` — $0.04 A one-call FinOps preflight a coding / platform agent runs on IaC it generated, BEFORE terraform apply. Input is the caller's OWN config text plus an optional format hint (auto-detected otherwise), a region, an optional monthly budget and optional usage hints; nothing is fetched (prices come from a bundled curated on-demand snapshot built offline from the public AWS Price List and Azure Retail Prices APIs). Every resource is normalised (the parser is shared with the IaC misconfiguration scanner) and priced: EC2 / EBS / RDS / NAT gateway / ELB / S3 / Lambda / data-transfer on AWS, and virtual machines / managed disks / public IP on Azure. Output: total monthly USD, a per-resource breakdown with unit price, quantity, unit and the documented assumptions behind each usage-based figure; FinOps policy findings (an instance over $500/mo, a forgotten NAT gateway, provisioned-IOPS volumes, an idle public IP, an S3 bucket with no lifecycle, a Multi-AZ database); and a verdict — block when the total exceeds the budget or a critical policy fires, caution on a high/medium policy or near-budget, pass otherwise. A resource with no cost mapping (Kubernetes, a Dockerfile, a compose service) is returned priced:false with an honest reason, never zeroed. Boundary: this estimates money, not security posture (that is the IaC scanner). Cost ESTIMATE, not a bill: an on-demand list-price floor that excludes savings plans, reserved instances, spot, free tier, taxes and support. - Request body: `{"format": "terraform-plan", "region": "us-east-1", "budget_monthly": 200, "content": "{\"planned_values\":{\"root_module\":{\"resources\":[{\"type\":\"aws_instance\",\"name\":\"web\",\"values\":{\"instance_type\":\"m5.large\"}}]}}}"}` - Example response: `{"object": "cost_estimate", "format": "terraform-plan", "region": "us-east-1", "currency": "USD", "total_monthly": 70.08, "verdict": "pass", "budget_monthly": 200, "budget_headroom": 129.92, "breakdown": [{"resource_id": "aws_instance.web", "provider": "aws", "kind": "ec2_instance", "region": "us-east-1", "monthly_cost": 70.08, "unit_price": 0.096, "quantity": 730, "unit": "instance-hour", "priced": true, "assumptions": ["on-demand Linux, shared tenancy, 730h/mo"]}], "policy_findings": [], "counts_by_severity": {}, "coverage": {"resources_total": 1, "priced": 1, "unpriced": 0, "unpriced_kinds": []}, "as_of": "2026-07-24", "snapshot_version": "2026.07.24", "config_hash": "sha256:…", "disclaimer": "Cost estimate, not a bill. On-demand list-price floor; usage assumptions apply."}` - Tags: cost, finops, cloud, aws, azure, terraform, budget, devops, estimate, agent ### `POST /cost/diff` — $0.05 The cost-delta form of the estimator, for an agent that wants to know what a change costs before applying it. Two honest inputs: a terraform plan JSON (the resource_changes array with each resource's before/after — the cleanest one-file diff) OR a baseline plus a proposed config. Output: total monthly USD before and after, the monthly delta, and added / removed / modified per-resource line items each with its before, after and delta; plus the FinOps policy findings and a budget verdict against the proposed total (block over budget or on a critical policy, caution on a high/medium policy or near budget, pass otherwise). Prices come from the same bundled offline snapshot as /cost/estimate (AWS Price List + Azure Retail Prices); nothing is fetched. Boundary: money, not security. Cost ESTIMATE, not a bill — an on-demand list-price floor; usage-based items carry documented assumptions. - Request body: `{"format": "terraform-plan", "region": "us-east-1", "budget_monthly": 500, "plan_json": "{\"resource_changes\":[{\"address\":\"aws_instance.web\",\"type\":\"aws_instance\",\"name\":\"web\",\"change\":{\"actions\":[\"update\"],\"before\":{\"instance_type\":\"t3.medium\"},\"after\":{\"instance_type\":\"m5.large\"}}}]}"}` - Example response: `{"object": "cost_diff", "format": "terraform-plan", "region": "us-east-1", "currency": "USD", "total_before": 30.37, "total_after": 70.08, "delta_monthly": 39.71, "verdict": "pass", "budget_monthly": 500, "budget_headroom": 429.92, "added": [], "removed": [], "modified": [{"resource_id": "aws_instance.web", "provider": "aws", "kind": "ec2_instance", "before_monthly": 30.37, "after_monthly": 70.08, "delta": 39.71}], "policy_findings": [], "counts_by_severity": {}, "coverage": {"resources_total": 1, "priced": 1, "unpriced": 0, "unpriced_kinds": []}, "as_of": "2026-07-24", "snapshot_version": "2026.07.24", "config_hash": "sha256:…", "disclaimer": "Cost estimate, not a bill. On-demand list-price floor; usage assumptions apply."}` - Tags: cost, finops, cloud, aws, azure, terraform, diff, budget, devops, agent ### `GET /approvals/wallet` — $0.02 Address-in, ranked-revoke-out wallet hygiene for autonomous agents that hold funds — the exact population drainers target. Reads the WHOLE approval history from an indexed keyless Blockscout getLogs (fromBlock=0, one request), dedups to the last grant per (token, spender), then confirms each is still LIVE with an eth_call allowance read (an event is not state — transferFrom spends an allowance with no new log and a revoke zeroes it, so only a live read is trustworthy). Each live approval is enriched: unlimited (max-uint or Permit2 max), stale (long forgotten), spender on a public scam/drainer blocklist, spender a canonical allowlisted router (Permit2 — suppressed), and a best-effort money-at-risk USD for priceable tokens. Every item carries non-custodial revoke calldata (approve(spender,0)) you sign yourself, and the list is sorted by a deterministic weighted priority (scam, then unlimited-to-unknown, then money-at-risk, then stale). Multi-chain EVM only (Base, Ethereum, Arbitrum, Optimism, Polygon). Blockscout unreachable returns status unavailable, never a 500. Automated risk indicators, not advice. Bad input returns 4xx. - Query params: `{"network": "base", "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}` - Example response: `{"kind": "wallet-approvals", "network": "base", "address": "0xd8dA…6045", "status": "ok", "verdict": "warn", "risk_score": 55, "summary": {"live_approvals": 2, "unlimited": 1, "scam_spenders": 0, "stale": 1}, "approvals": [{"token": "0x8335…2913", "token_symbol": "USDC", "spender": "0x1111…1111", "allowance": "1157920…9935", "unlimited": true, "stale": false, "spender_allowlisted": false, "scam_spender": false, "money_at_risk_usd": 812.4, "priority_score": 55, "flags": ["unlimited"], "revoke": {"to": "0x8335…2913", "data": "0x095ea7b3…", "value": "0x0"}}], "disclaimer": "Automated on-chain risk indicators, not advice."}` - Tags: security, approval, allowance, revoke, wallet, erc20, drainer, onchain, audit ### `GET /approvals/nft` — $0.01 The NFT sibling of /approvals/wallet — a frequent drainer vector is a lingering setApprovalForAll granting an operator full control of a whole collection. Reads every ApprovalForAll the address ever emitted from indexed keyless Blockscout getLogs, dedups to the last event per (collection, operator), and confirms each operator is still live with an isApprovedForAll eth_call (a later revoke flips it off with no positive log, so only the live read is trustworthy). Flags operators on a public scam blocklist, stale grants, and canonical allowlisted operators (suppressed), ranks by a deterministic weighted priority, and hands back ready non-custodial setApprovalForAll(operator,false) calldata per collection. Multi-chain EVM only (Base, Ethereum, Arbitrum, Optimism, Polygon). Blockscout unreachable returns status unavailable, never a 500. Automated risk indicators, not advice. Bad input returns 4xx. - Query params: `{"network": "ethereum", "address": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}` - Example response: `{"kind": "nft-approvals", "network": "ethereum", "address": "0xd8dA…6045", "status": "ok", "verdict": "warn", "risk_score": 30, "summary": {"live_approvals": 1, "unlimited": 1, "scam_spenders": 0, "stale": 0}, "approvals": [{"collection": "0xBC4C…f13d", "operator": "0x2222…2222", "approved_for_all": true, "stale": false, "spender_allowlisted": false, "scam_spender": false, "priority_score": 30, "flags": ["unlimited"], "revoke": {"to": "0xBC4C…f13d", "data": "0xa22cb465…", "value": "0x0"}}], "disclaimer": "Automated on-chain risk indicators, not advice."}` - Tags: security, approval, nft, erc721, erc1155, revoke, wallet, drainer, onchain ## Reference - [Service info](https://api.agentstools.dev/): live JSON listing of endpoints, prices and the receiver wallet. - [OpenAPI](https://api.agentstools.dev/openapi.json): machine-readable API schema. - [Discovery manifest](https://api.agentstools.dev/.well-known/x402): x402 bazaar discovery manifest.