{"openapi":"3.1.0","info":{"title":"ISHOB (testnet)","version":"1.0.0","description":"A growing machine-readable archive of structured knowledge resources, normalized to structured JSON with full license/attribution metadata. Discovery and search are free; document content is paid per request via the x402 HTTP payment protocol (USDC)."},"servers":[{"url":"https://ai-data-archive.health-womens01.workers.dev"}],"paths":{"/v1/datasets":{"get":{"summary":"Static Knowledge Base catalogue (free)","responses":{"200":{"description":"Datasets with licence, size, filters"}}}},"/v1/extract":{"post":{"summary":"Live web page -> clean Markdown (paid)","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0005"},"responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"}}}}}}}},"/v1/search":{"post":{"summary":"Full-text + technical-spec search (paid)","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.001"},"responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"category":{"type":"string","enum":["general","tech_specs"]}}}}}}}},"/v1/specs":{"post":{"summary":"Structured specification table (paid)","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.001"},"responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"quantity":{"type":"string"},"family":{"type":"string"},"unit":{"type":"string"},"min":{"type":"number"},"max":{"type":"number"}}}}}}}},"/v1/metadata":{"get":{"operationId":"site_metadata","summary":"Extract a page's title, meta tags, OpenGraph, Twitter card, canonical/icons/feeds and JSON-LD from the <head> only (no full DOM download, robots.txt respected, nothing stored). (paid)","description":"Extract a page's title, meta tags, OpenGraph, Twitter card, canonical/icons/feeds and JSON-LD from the <head> only (no full DOM download, robots.txt respected, nothing stored).","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0002"},"x-mcp-tool":"site_metadata","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","maxLength":2048,"description":"Public http(s) page URL"},"description":"Public http(s) page URL"}]}},"/v1/dataset/{key}":{"get":{"operationId":"get_dataset","summary":"Static Knowledge Base: open, commercially reusable datasets (world cities, countries, ISHOB topics) by page, by id or by facet filter, with licence and attribution (paid)","description":"Static Knowledge Base: open, commercially reusable datasets (world cities, countries, ISHOB topics) by page, by id or by facet filter, with licence and attribution. Free catalogue: /v1/datasets.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0001"},"x-mcp-tool":"get_dataset","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Dataset key from /v1/datasets, e.g. world-cities, countries, archive-topics"},"description":"Dataset key from /v1/datasets, e.g. world-cities, countries, archive-topics"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page number (default 0)"},"description":"Page number (default 0)"},{"name":"id","in":"query","required":false,"schema":{"type":"string","maxLength":64,"description":"Return one record by id"},"description":"Return one record by id"},{"name":"country_code","in":"query","required":false,"schema":{"type":"string","description":"Facet filter (world-cities), e.g. FR"},"description":"Facet filter (world-cities), e.g. FR"},{"name":"continent","in":"query","required":false,"schema":{"type":"string","description":"Facet filter (countries), e.g. Europe"},"description":"Facet filter (countries), e.g. Europe"}]}},"/v1/weather":{"get":{"operationId":"weather_risk","summary":"Current weather and hourly forecast (MET Norway, CC BY 4.0) for a lat/lon, plus decision flags: drone_safe, event_risk (low/moderate/high), rain_expected, frost_risk, high_wind — with the thresholds used (paid)","description":"Current weather and hourly forecast (MET Norway, CC BY 4.0) for a lat/lon, plus decision flags: drone_safe, event_risk (low/moderate/high), rain_expected, frost_risk, high_wind — with the thresholds used. Heuristics, not aviation or safety advice.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0003"},"x-mcp-tool":"weather_risk","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":true,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":48,"default":6,"description":"Forecast window the flags cover"},"description":"Forecast window the flags cover"}]}},"/v1/domain":{"post":{"operationId":"domain_intel","summary":"Domain intelligence: registration via RDAP (registrar, created/expiry dates, status, nameservers, DNSSEC; unregistered = likely available), DNS (A/AAAA/NS/MX/SPF/DMARC, email and DNS providers) and the homepage tech stack (CDN, hosting, server, CMS, frameworks, analytics, payments) with evidence. (paid)","description":"Domain intelligence: registration via RDAP (registrar, created/expiry dates, status, nameservers, DNSSEC; unregistered = likely available), DNS (A/AAAA/NS/MX/SPF/DMARC, email and DNS providers) and the homepage tech stack (CDN, hosting, server, CMS, frameworks, analytics, payments) with evidence.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0004"},"x-mcp-tool":"domain_intel","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","maxLength":253,"description":"Domain or URL, e.g. example.com"},"checks":{"type":"array","items":{"type":"string","enum":["registration","dns","tech"]},"description":"Default: all three"}}},"example":{"domain":"example.com"}}}}}},"/v1/geocode":{"get":{"operationId":"geocode","summary":"Offline geocoding (GeoNames + DB-IP, CC BY 4.0): exactly one of ip (IPv4/IPv6 -> country/region/city/lat,lon), q (place name, e.g (paid)","description":"Offline geocoding (GeoNames + DB-IP, CC BY 4.0): exactly one of ip (IPv4/IPv6 -> country/region/city/lat,lon), q (place name, e.g. 'Springfield, IL, US', optional country filter), postcode (+country), or lat+lon (reverse: nearest places). City/place level; no street addresses.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0002"},"x-mcp-tool":"geocode","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"ip","in":"query","required":false,"schema":{"type":"string","description":"Public IPv4/IPv6 address"},"description":"Public IPv4/IPv6 address"},{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200,"description":"Place name; qualifiers after commas (region, country)"},"description":"Place name; qualifiers after commas (region, country)"},{"name":"postcode","in":"query","required":false,"schema":{"type":"string","maxLength":16}},{"name":"country","in":"query","required":false,"schema":{"type":"string","maxLength":64,"description":"ISO alpha-2/3 or English name"},"description":"ISO alpha-2/3 or English name"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"lon","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10,"default":5}}]}},"/v1/pdf-tables":{"post":{"operationId":"extract_tables","summary":"Extract tables as structured JSON (rows, header, records keyed by column) from a public PDF (multi-column / ruled tables, up to 30 pages, 10 MB) or an HTML page (colspan/rowspan expanded) (paid)","description":"Extract tables as structured JSON (rows, header, records keyed by column) from a public PDF (multi-column / ruled tables, up to 30 pages, 10 MB) or an HTML page (colspan/rowspan expanded). robots.txt respected; nothing stored. No OCR.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0008"},"x-mcp-tool":"extract_tables","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"Public URL of a PDF or HTML page"},"pages":{"type":"string","maxLength":64,"description":"PDF pages, e.g. '1-3,7' (default: first 30)"}}},"example":{"url":"https://example.org/report.pdf","pages":"1-2"}}}}}},"/v1/finance":{"get":{"operationId":"finance_snapshot","summary":"Fundamentals and ratios for a US-listed company from its latest annual SEC filing (10-K/20-F, public domain): revenue, net income, EPS, cash flow, debt, equity; debt-to-equity, current/quick ratio, margins, ROE/ROA, growth (paid)","description":"Fundamentals and ratios for a US-listed company from its latest annual SEC filing (10-K/20-F, public domain): revenue, net income, EPS, cash flow, debt, equity; debt-to-equity, current/quick ratio, margins, ROE/ROA, growth. P/E and market cap are null (no licensed price feed); EPS and shares outstanding are included to compute them.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0005"},"x-mcp-tool":"finance_snapshot","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string","maxLength":10,"description":"Ticker of an SEC-registered company, e.g. AAPL, MSFT, BRK-B"},"description":"Ticker of an SEC-registered company, e.g. AAPL, MSFT, BRK-B"}]}},"/v1/screenshot":{"post":{"operationId":"screenshot","summary":"Render a public web page in headless Chromium (Cloudflare Browser Rendering) and return a screenshot (PNG/JPEG/WebP, base64) for vision models: viewport up to 1920x1920 (default 1920x1080) or full page up to 8000 px (paid)","description":"Render a public web page in headless Chromium (Cloudflare Browser Rendering) and return a screenshot (PNG/JPEG/WebP, base64) for vision models: viewport up to 1920x1920 (default 1920x1080) or full page up to 8000 px. robots.txt respected; every page request is SSRF-guarded; nothing stored.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.001"},"x-mcp-tool":"screenshot","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048},"width":{"type":"integer","minimum":320,"maximum":1920,"default":1920},"height":{"type":"integer","minimum":240,"maximum":1920,"default":1080},"full_page":{"type":"boolean","default":false},"format":{"type":"string","enum":["png","jpeg","webp"],"default":"png"},"quality":{"type":"integer","minimum":30,"maximum":100,"description":"jpeg/webp only (default 80)"},"wait_until":{"type":"string","enum":["load","domcontentloaded","networkidle0","networkidle2"],"default":"networkidle2"},"delay_ms":{"type":"integer","minimum":0,"maximum":5000,"default":0}}},"example":{"url":"https://example.org/","width":1920,"height":1080,"format":"png"}}}}}},"/v1/ping-status":{"post":{"operationId":"ping_status","summary":"Uptime / API health check: is a URL up, HTTP status, response time, redirect chain, headers and security headers (edge), plus the TLS certificate (issuer, expiry date, days remaining, SAN, verification errors) (paid)","description":"Uptime / API health check: is a URL up, HTTP status, response time, redirect chain, headers and security headers (edge), plus the TLS certificate (issuer, expiry date, days remaining, SAN, verification errors). A down target is a valid answer.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0002"},"x-mcp-tool":"ping_status","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","maxLength":2048},"method":{"type":"string","enum":["HEAD","GET"],"default":"HEAD"},"check_ssl":{"type":"boolean","default":true},"follow_redirects":{"type":"boolean","default":true}}},"example":{"url":"https://api.example.com/health"}}}}}},"/v1/feed-reader":{"get":{"operationId":"read_feed","summary":"Read a published RSS 2.0 / RSS 1.0 / Atom / JSON Feed (blogs, news, podcasts, Reddit, Mastodon, YouTube channel feeds) as clean JSON items: title, link, ISO dates, author, plain-text summary/content, categories, enclosures (paid)","description":"Read a published RSS 2.0 / RSS 1.0 / Atom / JSON Feed (blogs, news, podcasts, Reddit, Mastodon, YouTube channel feeds) as clean JSON items: title, link, ISO dates, author, plain-text summary/content, categories, enclosures. An HTML page URL is followed to its advertised feed. robots.txt respected; nothing stored; social networks are not scraped.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0003"},"x-mcp-tool":"read_feed","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","maxLength":2048,"description":"Feed URL, or a page that advertises a feed"},"description":"Feed URL, or a page that advertises a feed"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}]}},"/v1/embed":{"post":{"operationId":"embed_text","summary":"Text embeddings for RAG / semantic search: one string or up to 100 strings -> L2-normalised vectors with open BAAI models on Cloudflare GPUs: bge-small-en-v1.5 (384-d, English, default) or bge-m3 (1024-d, multilingual) (paid)","description":"Text embeddings for RAG / semantic search: one string or up to 100 strings -> L2-normalised vectors with open BAAI models on Cloudflare GPUs: bge-small-en-v1.5 (384-d, English, default) or bge-m3 (1024-d, multilingual). Up to 24,000 characters per call.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0002"},"x-mcp-tool":"embed_text","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["input"],"properties":{"input":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Text or list of texts (a single string is also accepted)"},"model":{"type":"string","enum":["bge-small-en-v1.5","bge-m3"],"default":"bge-small-en-v1.5"}}},"example":{"input":["torque sensor calibration","laser wavelength stability"],"model":"bge-small-en-v1.5"}}}}}},"/v1/site-speed":{"get":{"operationId":"site_speed","summary":"Page speed & Core Web Vitals from a real headless-Chromium load (mobile or desktop): LCP, CLS, FCP, TTFB, total blocking time with good/needs-improvement/poor ratings, load timings, request count and page weight by resource type (paid)","description":"Page speed & Core Web Vitals from a real headless-Chromium load (mobile or desktop): LCP, CLS, FCP, TTFB, total blocking time with good/needs-improvement/poor ratings, load timings, request count and page weight by resource type. Unthrottled lab run from Cloudflare's network (not Lighthouse, not field data). robots.txt respected.","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.0008"},"x-mcp-tool":"site_speed","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","maxLength":2048}},{"name":"device","in":"query","required":false,"schema":{"type":"string","enum":["mobile","desktop"],"default":"mobile"}}]}},"/v1/render-doc":{"post":{"operationId":"render_document","summary":"Render Markdown (tables, code, lists, headings) into a styled PDF (custom CSS, A4/Letter/Legal, page numbers), a Word DOCX or standalone HTML; returns a private download link valid for 24 hours (paid)","description":"Render Markdown (tables, code, lists, headings) into a styled PDF (custom CSS, A4/Letter/Legal, page numbers), a Word DOCX or standalone HTML; returns a private download link valid for 24 hours. External resources are never fetched (inline data: images only).","x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.001"},"x-mcp-tool":"render_document","responses":{"200":{"description":"Result (JSON); PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid input (no payment requested)"},"402":{"description":"Payment required: PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"403":{"description":"robots.txt disallows the target (no payment requested)"},"404":{"description":"Not found (no payment requested)"},"503":{"description":"Backend temporarily unavailable (no payment requested)"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["markdown"],"properties":{"markdown":{"type":"string","maxLength":200000},"format":{"type":"string","enum":["pdf","docx","html"],"default":"pdf"},"css":{"type":"string","maxLength":50000,"description":"Extra CSS (pdf/html)"},"title":{"type":"string","maxLength":200},"page_size":{"type":"string","enum":["A4","Letter","Legal"],"default":"A4"},"filename":{"type":"string","maxLength":60}}},"example":{"markdown":"# Report\n\n| a | b |\n|---|---|\n| 1 | 2 |","format":"pdf","title":"Report"}}}}}},"/api/catalog":{"get":{"summary":"Catalog (free, 100 per page)","parameters":[{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Catalog page"}}}},"/api/topics":{"get":{"summary":"Topics (free)","responses":{"200":{"description":"Topics"}}}},"/api/search":{"get":{"summary":"Search (free)","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"topic","in":"query","required":false,"schema":{"type":"string"}},{"name":"year_from","in":"query","required":false,"schema":{"type":"integer"}},{"name":"year_to","in":"query","required":false,"schema":{"type":"integer"}},{"name":"license","in":"query","required":false,"schema":{"type":"string"}},{"name":"fulltext","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Results"},"400":{"description":"Invalid query"}}}},"/api/stats":{"get":{"summary":"Totals (free)","responses":{"200":{"description":"Stats"}}}},"/api/document/{id}":{"get":{"summary":"Document metadata + abstract + rights (paid)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^(?:pmc-\\d{1,12}|pmid-\\d{1,12}|doi-[0-9a-f]{20}|oa-w\\d{1,15}|arxiv-[a-z0-9][a-z0-9.\\-]{3,40}|doaj-[0-9a-f]{32})$"}}],"x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.001"},"responses":{"200":{"description":"Content (JSON) with license + attribution; PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid id"},"402":{"description":"Payment required. PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"404":{"description":"Not found (no payment requested)"}}}},"/api/document/{id}/fulltext":{"get":{"summary":"Structured full text (paid)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^(?:pmc-\\d{1,12}|pmid-\\d{1,12}|doi-[0-9a-f]{20}|oa-w\\d{1,15}|arxiv-[a-z0-9][a-z0-9.\\-]{3,40}|doaj-[0-9a-f]{32})$"}}],"x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.01"},"responses":{"200":{"description":"Content (JSON) with license + attribution; PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid id"},"402":{"description":"Payment required. PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"404":{"description":"Not found (no payment requested)"}}}},"/api/document/{id}/references":{"get":{"summary":"References (paid)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^(?:pmc-\\d{1,12}|pmid-\\d{1,12}|doi-[0-9a-f]{20}|oa-w\\d{1,15}|arxiv-[a-z0-9][a-z0-9.\\-]{3,40}|doaj-[0-9a-f]{32})$"}}],"x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.002"},"responses":{"200":{"description":"Content (JSON) with license + attribution; PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid id"},"402":{"description":"Payment required. PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"404":{"description":"Not found (no payment requested)"}}}},"/api/topic/{slug}/content":{"get":{"summary":"Topic JSONL bundle (paid)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,64}$"}},{"name":"part","in":"query","required":false,"schema":{"type":"integer","minimum":1}}],"x-payment":{"protocol":"x402","version":2,"scheme":"exact","network":"eip155:84532","asset":"USDC","price_usd":"0.5"},"responses":{"200":{"description":"Content (JSON) with license + attribution; PAYMENT-RESPONSE header carries the settlement receipt"},"400":{"description":"Invalid id"},"402":{"description":"Payment required. PAYMENT-REQUIRED header (base64 JSON) lists accepted payment requirements"},"404":{"description":"Not found (no payment requested)"}}}}}}