{"demo":true,"note":"Free fixed-input sample of real output. The paid route accepts your own input: /api/extract ($0.015 per call, x402 USDC on Base, no signup or API key).","paid_endpoint":"https://horizonpulse.dev/api/extract","price":"$0.015","fixed_input":"url=https://horizonpulse.dev, fields={\"heading\":\"h1\",\"links\":{\"selector\":\"a\",\"attr\":\"href\",\"all\":true,\"limit\":5}} (fixed)","sample_status":200,"sample":{"ok":true,"url":"https://horizonpulse.dev/","title":"Horizon Pulse","description":"Pay-per-call APIs for AI agents via x402 on Base: web fetch, HTTP proxy, page extract, and crypto market data.","language":"en","links":[{"href":"https://horizonpulse.dev/","text":"Horizon Pulse"},{"href":"https://horizonpulse.dev/#catalog","text":"Catalog"},{"href":"https://horizonpulse.dev/#how","text":"How it works"},{"href":"https://horizonpulse.dev/#agents","text":"For agents"},{"href":"https://horizonpulse.dev/status","text":"Status"},{"href":"https://horizonpulse.dev/openapi.json","text":"OpenAPI"},{"href":"https://horizonpulse.dev/llms.txt","text":"llms.txt"},{"href":"https://github.com/horizon-pulse/horizon-pulse","text":"GitHub"},{"href":"https://horizonpulse.dev/api/demo/pulse","text":"Try free"},{"href":"https://horizonpulse.dev/api/demo/pulse","text":"Try a free sample"},{"href":"#catalog","text":"See all 13 routes"},{"href":"https://api.cdp.coinbase.com/platform/v2/x402/discovery/merchant?payTo=0x5b32c973596078a967562ca652761404f19be0e9","text":"Listed in Coinbase's x402 Bazaar ↗"},{"href":"https://horizonpulse.dev/.well-known/x402","text":"/.well-known/x402"},{"href":"https://basescan.org/tx/0x833d0f7252da2a31ced91256227106189e12548b31aaaa0ea78f877811d74402","text":"View tx 0x833d…4402 ↗"},{"href":"https://horizonpulse.dev/api/demo/pulse","text":"Free sample →"},{"href":"https://horizonpulse.dev/api/demo/fetch","text":"Free sample →"},{"href":"https://horizonpulse.dev/api/demo/extract","text":"Free sample →"},{"href":"https://horizonpulse.dev/api/demo/pulse","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/signals","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/yield","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/portfolio","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/gas","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/funding","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/fetch","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/http","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/extract","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/screenshot","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/search","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/pdf","text":"Sample →"},{"href":"https://horizonpulse.dev/api/demo/x402-check","text":"Sample →"},{"href":"https://horizonpulse.dev/llms.txt","text":"/llms.txt"},{"href":"https://horizonpulse.dev/openapi.json","text":"/openapi.json"},{"href":"https://horizonpulse.dev/.well-known/x402","text":"/.well-known/x402"},{"href":"https://github.com/horizon-pulse/horizon-pulse/blob/main/examples/reference-agent.mjs","text":"reference-agent.mjs"},{"href":"https://horizonpulse.dev/status","text":"/status"},{"href":"https://horizonpulse.dev/api/demo/pulse","text":"Try /api/demo/pulse"},{"href":"https://horizonpulse.dev/llms.txt","text":"Read llms.txt"},{"href":"https://horizonpulse.dev/llms.txt","text":"/llms.txt"},{"href":"https://horizonpulse.dev/openapi.json","text":"/openapi.json"},{"href":"https://horizonpulse.dev/.well-known/x402","text":"/.well-known/x402"}],"headings":[{"level":1,"text":"Pay-per-call APIs built for agents."},{"level":2,"text":"Thirteen routes. One protocol."},{"level":3,"text":"/api/pulse"},{"level":3,"text":"/api/fetch"},{"level":3,"text":"/api/extract"},{"level":2,"text":"Plain HTTP. Standard x402 v2."},{"level":3,"text":"Call the route"},{"level":3,"text":"Read the 402"},{"level":3,"text":"Sign and retry"},{"level":3,"text":"Get JSON"},{"level":2,"text":"Everything an agent needs to find and pay us."},{"level":3,"text":"For agents"},{"level":3,"text":"Payment"},{"level":2,"text":"Start with a free sample."},{"level":4,"text":"Horizon Pulse"},{"level":4,"text":"For agents"},{"level":4,"text":"Project"},{"level":4,"text":"Network"}],"textSample":"# Horizon Pulse\n\nLive on Base · x402 v2\n# Pay-per-call APIs\n built for agents.\n\n13 routes for market data, the web and documents. No API keys, no signup. Your agent pays $0.005 – $0.04 in USDC per call and gets JSON back.\n\n Try a free sample See all 13 routes\n\n $ curl https://horizonpulse.dev/api/demo/pulse Copy\n\n Listed in Coinbase's x402 Bazaar ↗ · /.well-known/x402\n\n Recorded call curl Node Python MCP\n agent → horizonpulse.dev\n\n$ curl -i https://horizonpulse.dev/api/pulse\n\nHTTP/2 402 Payment Required\n\npayment-required: eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQYXltZW50…\n\n scheme=exact network=eip155:8453\n\n amount=5000 (USDC, 6 dp = $0.005) payTo=0x5b32…e0e9\n\n$ agent: sign EIP-3009 transfer, retry with PAYMENT-SIGNATURE\n\n→ facilitator verify ✓ settle ✓ (1099 ms)\n\nHTTP/2 200 OK\n\n{ \"BTC\": 83627.69, \"ETH\": 2679.19, \"SOL\": 118.09, … }\n\ntx 0x833d…4402 on Base\n\n Recorded test call, 2026-09-30 , paid from our own test wallet (not a customer). View tx 0x833d…4402 ↗\n\nPaid routes\n\n13\n\n6 crypto · 6 web · 1 agent\n\nPrice per call\n\n$0.005 – $0.04\n\nUSDC, exact amount in the 402\n\nFree samples\n\n13\n\na free twin for every route\n\nDiscovery\n\n15\n\nendpoints in /.well-known/x402\n\nCatalog\n\n## Thirteen routes. One protocol.\n\nEvery route works the same way: request, get a 402, pay in USDC, get JSON. Each one has a free twin at /api/demo/<route> with real output on a fixed input.\n\nStart here\n\n### /api/pulse\n\nBTC, ETH and SOL spot prices with 24h momentum (CoinGecko)\n\n $0.005 Free sample →\n\n### /api/fetch\n\nAny public URL as clean text or markdown\n\n $0.02 Free sample →\n\n### /api/extract\n\nPage to structured fields, or your own CSS selectors\n\n $0.015 Free sample →\n\n Route Method Returns Per call\n\n Crypto market data\n\n /api/pulse GET BTC, ETH and SOL spot prices with 24h momentum (CoinGecko) $0.005 Sample →\n\n /api/signals GET RSI, MACD and Bollinger bands plus perpetual funding (CoinGecko, OKX) $0.015 Sample →\n\n /api/yield GET Ranked DeFi yields, pools with TVL of $10M or more (DefiLlama) $0.02 Sample …","fields":{"heading":"Pay-per-call APIsbuilt for agents.","links":["https://horizonpulse.dev/","https://horizonpulse.dev/#catalog","https://horizonpulse.dev/#how","https://horizonpulse.dev/#agents","https://horizonpulse.dev/status"]},"fieldErrors":{},"matchedFields":2,"requestedFields":2,"bytesRead":48059,"finalUrl":"https://horizonpulse.dev/","elapsedMs":70,"source":"extract","priced":{"amountUsd":"$0.015","amountAtomic":"15000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"base","payTo":"0x5b32c973596078a967562ca652761404f19be0e9"},"asOf":"2026-10-01T02:34:13.476Z","methodology":{"purpose":"Extract structured page fields (title, description, links, images, headings, json-ld, text sample) from a public URL or provided HTML for agents","priceChoice":"$0.015 USDC (15000 atomic) — between /api/http ($0.01) and /api/fetch ($0.02). Same payTo + Base USDC stack.","caps":{"maxHtmlBytes":200000,"timeoutMs":8000,"maxRedirects":3,"textSampleChars":2000},"allowedSchemes":["http:","https:"],"ssrf":"When fetching url: blocks localhost, private, link-local, and metadata IPs; re-checks each redirect hop (shared assertSafePublicUrl with /api/fetch)","parsing":"Lightweight regex extraction (no cheerio). Best-effort; omit empty fields. Not a full browser DOM.","fields":"Optional fields = {name: \"css selector\" | {selector, attr?: text|html|<attribute>, all?, limit?: 1-50}}, max 20, parsed with htmlparser2 + css-select on the served HTML (no JavaScript). Each field returns a value or null with fieldErrors[name] (bad_selector, no_match, attr_missing, time_budget, document_too_deep, eval_failed). Hard 2s selector budget; :has() at most once per selector; pages nested deeper than 256 levels are refused for fields. href/src are made absolute. Billed only when at least one field matches; zero matches return 422 no_fields_matched, not charged.","cookies":"No cookie jar; outbound fetch never sends Cookie."}}}