{"openapi":"3.1.0","info":{"title":"neuroterminal — web facts for agents","version":"1.0.0","description":"Paid HTTP endpoints for AI agents, settled in USDC on Base via the x402 protocol. Five families: commerce facts (store profiling, product extraction, fetch preflight); browser-as-a-service (rendered HTML, clean page text, CSS-selector extraction, post-JavaScript schema.org, link surface, and technology detection watched in a real browser rather than guessed from HTML); SEC company financials (Apple's 3.6MB filing distilled to about 7KB); quantitative maths (Black-Scholes and Greeks, portfolio risk, Kelly sizing); and prediction-market consensus across Polymarket and Kalshi. No account, no API key — pay per call.","contact":{"url":"https://api.neuroterminal.xyz"}},"servers":[{"url":"https://api.neuroterminal.xyz"}],"x-payment-protocols":["x402"],"paths":{"/v1/test":{"get":{"operationId":"test","summary":"Health-check paid endpoint","description":"Health-check paid endpoint. Returns {ok:true} plus server time. Use to verify your x402 client works end-to-end before calling the real endpoints.","parameters":[],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"ok":true,"ts":"2026-08-03T12:00:00Z"}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/store-profile":{"get":{"operationId":"storeProfile","summary":"E-commerce domain intelligence in one call","description":"E-commerce domain intelligence in one call. Input: domain. Output: platform (shopify/woocommerce/magento/wix/...), theme, whether product pages carry valid schema.org markup and which fields are missing or broken, whether the store needs JavaScript rendering (checked with a real browser), policy pages present (shipping/returns/privacy/contact), estimated product count. Replaces 5-10 fetches. Example: ?domain=allbirds.com","tags":["ecommerce","domain-intelligence","shopify"],"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string"},"example":"allbirds.com"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"domain":"allbirds.com","platform":"shopify","structuredData":{"product":{"hasProductSchema":true,"missing":[]}},"policyPages":{"hasShippingPolicy":true,"hasReturnPolicy":true,"hasContactPage":true},"productCountEstimate":{"estimate":312,"capped":false}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/product-facts":{"get":{"operationId":"productFacts","summary":"Normalized product facts from any product-page URL - works even when the page has NO schema","description":"Normalized product facts from any product-page URL - works even when the page has NO schema.org markup (a third of live Shopify stores). Output: name, brand, sku, price, currency, availability, image, description, plus source (json-ld or meta) and schema-health report. One call instead of fetching+parsing the page yourself. Example: ?url=https://shop.com/products/item","tags":["ecommerce","product-data","extraction"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://www.allbirds.com/products/mens-cruiser-shadow-blue-natural-white-sole"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"found":true,"source":"json-ld+meta","product":{"name":"Men's Cruiser - Shadow Blue (Natural White Sole)","price":"105","currency":"USD","availability":"InStock","image":"https://..."},"schema":{"kind":"ld-product","productCount":1},"renderedWithBrowser":false,"redirected":false}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/fetch-preflight":{"get":{"operationId":"fetchPreflight","summary":"Check a URL BEFORE you burn tokens fetching it: will it 403/429 (bot protection: cloudflare, datadome, perimeterx)? Does","description":"Check a URL BEFORE you burn tokens fetching it: will it 403/429 (bot protection: cloudflare, datadome, perimeterx)? Does it need JavaScript to render? Is it paywalled? Also returns content type/length, schema.org types present, and robots.txt policy for AI crawlers (GPTBot, ClaudeBot, CCBot, Google-Extended). Example: ?url=https://example.com/article","tags":["crawling","preflight","robots"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://www.nytimes.com/section/technology"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"status":200,"blocked":false,"blockedReason":null,"jsRequired":true,"paywall":true,"robots":{"GPTBot":false,"ClaudeBot":false,"*":true}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/render":{"get":{"operationId":"render","summary":"Fully rendered HTML after JavaScript executes, from a real headless Chrome","description":"Fully rendered HTML after JavaScript executes, from a real headless Chrome. Use when a plain fetch returns an empty shell - React/Vue/Next SPAs, lazy-loaded content, client-side pricing. You get the DOM as a browser sees it, not the source. Returns ok, url, html, length and truncated (html is capped at 900,000 chars). Only public hosts are fetched. Example: ?url=https://spa-site.com/page","tags":["browser","rendering","javascript","spa"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://example.com/spa-page"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"ok":true,"url":"https://example.com/spa-page","length":84210,"truncated":false,"html":"<html>...rendered...</html>"}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/page-text":{"get":{"operationId":"pageText","summary":"Cut a page down to the words that matter and stop paying for markup","description":"Cut a page down to the words that matter and stop paying for markup. Measured: a 653KB page returned 812 bytes of clean text - about 160,000 tokens you did not have to buy. JavaScript is rendered first, so this works on React/Vue/Next pages that a plain fetch cannot read at all. Returns the text, title, language, word count, and exactly how much you saved. Example: ?url=https://news-site.com/article","tags":["browser","text-extraction","readability"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://example.com/article"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"title":"Article title","words":812,"chars":4903,"text":"The actual readable content..."}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/extract":{"get":{"operationId":"extract","summary":"Run your own CSS selectors against a JavaScript-rendered page and get back exactly the values you asked for: text, href,","description":"Run your own CSS selectors against a JavaScript-rendered page and get back exactly the values you asked for: text, href, src, or any attribute. Pass selectors comma-separated. Precise scraping without pulling a whole page through your context window. Example: ?url=https://shop.com/item&selectors=.price,.stock-status","tags":["browser","scraping","css-selector"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://example.com/item"},{"name":"selectors","in":"query","required":true,"schema":{"type":"string"},"example":".price,.title"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"results":{".price":[{"text":"$49.00"}],".title":[{"text":"Product name"}]}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/rendered-schema":{"get":{"operationId":"renderedSchema","summary":"Schema","description":"Schema.org structured data as it exists AFTER JavaScript runs. Many stores inject Product and Article markup client-side, so a plain fetch finds nothing - measured on a third of live Shopify stores. Returns all JSON-LD nodes, the types found, and whether the markup was static or JS-injected. Example: ?url=https://shop.com/products/x","tags":["browser","schema.org","json-ld","structured-data"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://example.com/products/item"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"types":["Product"],"jsInjected":true,"staticHadSchema":false,"nodes":[{"@type":"Product","name":"Item"}]}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/links":{"get":{"operationId":"links","summary":"Every link on a page, split into internal and external and labelled by where it sits: nav, footer, or main content","description":"Every link on a page, split into internal and external and labelled by where it sits: nav, footer, or main content. Content links are the ones worth crawling; nav and footer are boilerplate you already know. Optionally JavaScript-rendered. Use to plan a crawl without fetching the page yourself. Example: ?url=https://example.com&render=true","tags":["browser","crawling","links","sitemap"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://example.com"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"counts":{"internal":42,"external":8,"nav":12,"footer":15,"content":15},"internal":[{"url":"https://example.com/a","text":"About","zone":"content"}]}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/tech-stack":{"get":{"operationId":"techStack","summary":"Which technologies a site ACTUALLY runs, watched in a real browser instead of guessed from HTML","description":"Which technologies a site ACTUALLY runs, watched in a real browser instead of guessed from HTML. Measured: static tools miss ~9 runtime-loaded services per site (Elevar, Algolia, tag-manager pixels) and over-report by 2.5x - allbirds.com names 49 third-party hosts but contacts 18. Every technology and the platform is labelled network (observed) or markup (matched). If no third-party traffic is observed, accuracy returns available:false, never zeros. Example: ?url=https://www.allbirds.com","tags":["browser","technology-detection","tech-stack","competitive-intelligence"],"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"example":"https://www.allbirds.com"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"url":"https://www.allbirds.com","platform":"shopify","platformEvidence":"network","technologies":[{"name":"Google Tag Manager","category":"tag-manager","evidence":"network","domain":"www.googletagmanager.com"},{"name":"Elevar","category":"analytics","evidence":"network","domain":"shopify-gtm-suite.getelevar.com"}],"accuracy":{"namedInSource":49,"actuallyContacted":18,"hiddenFromStaticAnalysis":9,"falsePositivesAvoided":39},"evidenceCounts":{"network":6,"markup":1},"renderedWithBrowser":true,"fullPageLoad":true}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/company-financials":{"get":{"operationId":"companyFinancials","summary":"The SEC publishes Apple financials as a 3","description":"The SEC publishes Apple financials as a 3.6MB document - roughly 950,000 tokens, more than any context window holds. This returns the same figures in about 7KB: revenue, margins, net income, EPS, assets, debt, cash, operating cash flow and R&D as 5-year series, plus computed margins, ROE, ROA and free cash flow. Restatements handled. Annual 10-K US-GAAP filers only: 20-F filers (ADRs like BABA) return 404, not an empty answer. Example: ?ticker=AAPL","tags":["finance","sec","fundamentals","stocks","xbrl"],"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"AAPL"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"ticker":"AAPL","companyName":"Apple Inc.","derived":{"grossMargin":0.4691,"netMargin":0.2692,"returnOnEquity":1.5191,"revenueGrowthYoY":0.0645},"metrics":{"revenue":{"series":[{"periodEnd":"2025-09-27","value":416161000000}]}}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/filing-history":{"get":{"operationId":"filingHistory","summary":"Every recent SEC filing for a US-listed company with direct document links: 10-K, 10-Q, 8-K, S-1 and the rest, with fili","description":"Every recent SEC filing for a US-listed company with direct document links: 10-K, 10-Q, 8-K, S-1 and the rest, with filing and report dates. Also returns the SIC industry code and listed exchanges. Filter by form type. Saves crawling EDGAR yourself. Example: ?ticker=TSLA&forms=10-K,8-K","tags":["finance","sec","filings","edgar"],"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"TSLA"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"ticker":"TSLA","sicDescription":"Motor Vehicles","filings":[{"form":"10-K","filed":"2026-01-29","url":"https://www.sec.gov/Archives/..."}]}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/filing-changes":{"get":{"operationId":"filingChanges","summary":"What actually changed in a company financials since a date","description":"What actually changed in a company financials since a date. Compares every metric across annual filings and returns direction, absolute and relative change, ranked by size, with the biggest mover highlighted. Answers \"did anything material change?\" without you diffing filings by hand. Annual 10-K US-GAAP filers only, same as company-financials: 20-F filers return 404. Example: ?ticker=NVDA&since=2024-01-01","tags":["finance","sec","change-detection","fundamentals"],"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"type":"string"},"example":"NVDA"},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"example":"2024-01-01"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"ticker":"NVDA","biggestMover":{"metric":"revenue","relativeChange":1.14,"direction":"up"}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/option-price":{"get":{"operationId":"optionPrice","summary":"Black-Scholes option price and full Greeks - delta, gamma, vega, theta, rho - with continuous dividend yield","description":"Black-Scholes option price and full Greeks - delta, gamma, vega, theta, rho - with continuous dividend yield. Or pass price= instead of vol= to solve for implied volatility. Exact closed-form maths, verified against the standard reference (S=100 K=100 r=5% vol=20% T=1 gives 10.4506). Language models get this wrong; this does not. Example: ?spot=100&strike=100&rate=0.05&vol=0.2&years=1","tags":["quant","options","black-scholes","greeks","finance"],"parameters":[{"name":"spot","in":"query","required":false,"schema":{"type":"string"},"example":"100"},{"name":"strike","in":"query","required":false,"schema":{"type":"string"},"example":"100"},{"name":"rate","in":"query","required":false,"schema":{"type":"string"},"example":"0.05"},{"name":"vol","in":"query","required":false,"schema":{"type":"string"},"example":"0.2"},{"name":"years","in":"query","required":false,"schema":{"type":"string"},"example":"1"},{"name":"type","in":"query","required":false,"schema":{"type":"string"},"example":"call"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"price":10.4506,"delta":0.636831,"gamma":0.018762,"vega":0.37524,"theta":-0.017573}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/portfolio-risk":{"get":{"operationId":"portfolioRisk","summary":"Risk and performance statistics from a return series: Sharpe, Sortino, Calmar, annualised return and volatility, maximum","description":"Risk and performance statistics from a return series: Sharpe, Sortino, Calmar, annualised return and volatility, maximum drawdown with its start and end index, VaR, CVaR, win rate, best and worst period. Pass returns as comma-separated decimals (0.01 = 1%). Exact arithmetic on up to 10,000 points. Example: ?returns=0.01,-0.02,0.03,0.015&periodsPerYear=252","tags":["quant","risk","sharpe","drawdown","portfolio"],"parameters":[{"name":"returns","in":"query","required":false,"schema":{"type":"string"},"example":"0.01,-0.02,0.03,0.015,-0.005"},{"name":"periodsPerYear","in":"query","required":false,"schema":{"type":"string"},"example":"252"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"periods":5,"sharpe":4.9685,"sortino":6.5339,"calmar":167.6353,"maxDrawdown":-0.02,"cagr":3.352706,"var":-0.02,"cvar":-0.02,"winRate":0.6}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/position-size":{"get":{"operationId":"positionSize","summary":"Kelly criterion position sizing: optimal fraction, fractional Kelly (full Kelly is too aggressive in practice), expected","description":"Kelly criterion position sizing: optimal fraction, fractional Kelly (full Kelly is too aggressive in practice), expected value per unit, edge, payoff ratio and the break-even win rate you would need. Pass capital= to get a concrete stake. Tells you plainly when there is no edge. Example: ?winProbability=0.6&winAmount=1&lossAmount=1&capital=10000","tags":["quant","kelly","position-sizing","risk"],"parameters":[{"name":"winProbability","in":"query","required":false,"schema":{"type":"string"},"example":"0.6"},{"name":"winAmount","in":"query","required":false,"schema":{"type":"string"},"example":"1"},{"name":"lossAmount","in":"query","required":false,"schema":{"type":"string"},"example":"1"},{"name":"capital","in":"query","required":false,"schema":{"type":"string"},"example":"10000"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"kellyFraction":0.2,"fractionalKelly":0.1,"suggestedStake":1000,"breakEvenWinRate":0.5,"verdict":"positive edge"}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/market-consensus":{"get":{"operationId":"marketConsensus","summary":"What prediction markets currently price for an event, from Polymarket and Kalshi in one call","description":"What prediction markets currently price for an event, from Polymarket and Kalshi in one call. Returns implied probability, volume, liquidity and close date per venue, plus a cross-venue comparison when the two questions genuinely match. Each result carries a match score so you can judge it. Real forecasting signal, not an opinion. Example: ?q=government shutdown","tags":["prediction-markets","polymarket","kalshi","forecasting","probability"],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"example":"government shutdown"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.020000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"query":"government shutdown","found":true,"bestMatch":{"venue":"polymarket","question":"Government shutdown by October 1?","probability":0.21,"match":0.667}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/v1/market-movers":{"get":{"operationId":"marketMovers","summary":"Scan of live prediction markets: which liquid markets sit closest to a coin flip (35-65%) - the genuinely undecided ones","description":"Scan of live prediction markets: which liquid markets sit closest to a coin flip (35-65%) - the genuinely undecided ones - plus any event where Polymarket and Kalshi price the SAME question differently. Cross-venue gaps need a genuine question match, so that list is often empty; the uncertain-markets list is the part that always returns. Returns what was scanned per venue. Example: ?minVolume=10000&top=10","tags":["prediction-markets","polymarket","kalshi","scanner"],"parameters":[{"name":"minVolume","in":"query","required":false,"schema":{"type":"string"},"example":"10000"},{"name":"top","in":"query","required":false,"schema":{"type":"string"},"example":"10"}],"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"x402":{"scheme":"exact","network":"eip155:8453","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0x6d4Fb0556d87087Ca0B7114a90bE9f99df7D0fEB","maxTimeoutSeconds":300}},"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object"},"example":{"venuesAvailable":{"polymarket":true,"kalshi":true},"biggestCrossVenueGaps":[],"mostUncertainLiquidMarkets":[{"probability":0.46,"venue":"polymarket","question":"...","volumeUsd":51200}],"scanned":{"polymarket":100,"kalshi":1496,"liquidAfterFilter":256}}}}},"400":{"description":"Invalid or missing parameter"},"402":{"description":"Payment Required — x402 challenge in the payment-required header","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}