{"openapi":"3.1.0","info":{"title":"WebLens API","version":"2.0.0","description":"# WebLens - Web Intelligence API, pay per call\n\nScrape, crawl, map and extract the web. No account, no API key, no monthly\nminimum — you pay for the calls you make and nothing else.\n\n## Pricing\nPage fetching starts at **$0.002**, whole-site crawling at\n**$0.0015/page**, and sitemap discovery at **$0.004**.\nComparable services bill $0.007-0.008 per request, or reach a lower per-page\nrate only on a $99/month commitment. WebLens has no commitment to reach.\n\n## Payment Protocol\nAll paid endpoints use the [x402 protocol](https://x402.org) for HTTP-native\nmicropayments (USDC on Base or Solana).\n\n## Cache Discount\nCached responses are **70% cheaper** than fresh fetches.","x-guidance":"WebLens is a pay-per-call web intelligence API for AI agents — no accounts, API keys, or monthly minimum. Every paid operation is a POST with a JSON body, paid via x402 (USDC on Base or Solana): call it, read the PAYMENT-REQUIRED response header from the 402, sign, and retry with Payment-Signature. Cheapest and most capable at getting pages: POST /fetch/basic {\"url\": \"...\"} scrapes to markdown for $0.002, POST /crawl {\"url\": \"...\"} crawls a whole site for $0.0015/page, and POST /map {\"url\": \"...\"} lists a site's URLs from its sitemap for $0.004. Use POST /fetch/pro for JavaScript-rendered pages and POST /extract to pull structured JSON from any page. Also available: POST /search for web search and POST /research for search + fetch + AI summary. Not sure an endpoint is worth its price? POST /preview {\"endpoint\": \"/answer\"} is free and returns the live price plus a real sample of the response shape before you pay. Free, unauthenticated tries: GET /r/{url} and GET /s/{query} (rate limited).","contact":{"name":"WebLens Support","url":"https://api.weblens.dev","email":"vassilistotskas@msn.com"},"license":{"name":"MIT","url":"https://opensource.org/licenses/MIT"}},"servers":[{"url":"https://api.weblens.dev","description":"Production"},{"url":"http://localhost:8787","description":"Local Development"}],"tags":[{"name":"Free","description":"Free tier endpoints — no payment required"},{"name":"Core","description":"Core web fetching and screenshot endpoints"},{"name":"Search","description":"Web search capabilities"},{"name":"Social","description":"Social platform data (YouTube transcripts)"},{"name":"Extraction","description":"Data extraction endpoints"},{"name":"Research","description":"AI-powered research tools"},{"name":"Intelligence","description":"Premium AI-powered intelligence products"},{"name":"Monitoring","description":"URL change monitoring"},{"name":"Memory","description":"Persistent key-value storage for agents"},{"name":"System","description":"Health and documentation endpoints"},{"name":"Discovery","description":"Free evaluation and ERC-8004 off-chain surfaces — previews, receipts, feedback"},{"name":"Credits","description":"Prepaid credit system"}],"paths":{"/":{"get":{"tags":["System"],"summary":"API Info","operationId":"getApiInfo","security":[],"responses":{"200":{"description":"API info"}}}},"/health":{"get":{"tags":["System"],"summary":"Health Check","operationId":"healthCheck","security":[],"responses":{"200":{"description":"Health status"}}}},"/discovery":{"get":{"tags":["System"],"summary":"Service Discovery","operationId":"getDiscovery","security":[],"description":"Machine-readable service catalog optimized for AI agent discovery. Returns all available endpoints, pricing, capabilities, and integration options.","responses":{"200":{"description":"Service catalog with endpoints, pricing, and capabilities"}}}},"/.well-known/x402":{"get":{"tags":["System"],"summary":"x402 Discovery","operationId":"getWellKnownX402","security":[],"description":"Standard x402 discovery endpoint. Returns x402-compatible service information for Bazaar indexing.","responses":{"200":{"description":"x402 service information"}}}},"/r/{url}":{"get":{"tags":["Free"],"summary":"Reader Mode (Zero-Friction)","operationId":"readerFetch","security":[],"description":"Fetch any webpage as markdown with a single GET request. No auth, no payment, no POST body. Just append a URL. Rate limited to 10/hour, content truncated to 2000 chars. Inspired by Jina Reader.","parameters":[{"name":"url","in":"path","required":true,"schema":{"type":"string"},"description":"Full URL to fetch (e.g. https://example.com/article)","example":"https://example.com"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text"]},"description":"Response format: json (default) or text (plain markdown)"}],"responses":{"200":{"description":"Page content as markdown (JSON or plain text)"},"400":{"description":"Invalid or missing URL"},"429":{"description":"Rate limit exceeded (10/hour)"},"502":{"description":"Target URL timeout"}}}},"/s/{query}":{"get":{"tags":["Free"],"summary":"Search Reader (Zero-Friction)","operationId":"searchReader","security":[],"description":"Search the web with a single GET request. No auth, no payment, no POST body. Just append a query. Rate limited to 10/hour, max 3 results. Upgrade to POST /search for up to 20 results.","parameters":[{"name":"query","in":"path","required":true,"schema":{"type":"string"},"description":"Search query (use + for spaces)","example":"cloudflare+workers"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","text"]},"description":"Response format: json (default) or text"}],"responses":{"200":{"description":"Search results (JSON or plain text)"},"400":{"description":"Missing or invalid query"},"429":{"description":"Rate limit exceeded (10/hour)"},"502":{"description":"Search provider failure"}}}},"/screenshot":{"post":{"tags":["Core"],"summary":"Capture Screenshot","operationId":"captureScreenshot","description":"Capture webpage screenshot as PNG. Price: $0.008","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.008000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenshotRequest"},"example":{"url":"https://example.com","fullPage":false}}}},"responses":{"200":{"description":"Screenshot captured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenshotResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/fetch/basic":{"post":{"tags":["Core"],"summary":"Fetch Page (Basic)","operationId":"fetchBasic","description":"Fetch webpage without JS rendering. Price: $0.002 (70% off on cache hits)","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.000600","max":"0.002000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchRequest"},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Page fetched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/fetch/pro":{"post":{"tags":["Core"],"summary":"Fetch Page (Pro)","operationId":"fetchPro","description":"Fetch webpage with full JS rendering. Price: $0.006 base — up to 3x for high-complexity domains, 70% off on cache hits","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.001800","max":"0.018000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchRequest"},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Page fetched","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FetchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search":{"post":{"tags":["Search"],"summary":"Web Search","operationId":"searchWeb","description":"Real-time web search. Price: $0.015 base; set includeContent to also fetch the top result pages as markdown in the same call (+$0.0015 per fetched result, up to 10)","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.015000","max":"0.030000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"},"example":{"query":"x402 payment protocol","limit":10}}}},"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/news":{"post":{"tags":["Search"],"summary":"News Search","operationId":"searchNews","description":"Real-time news search via Google News. Returns ranked articles with source, date, and thumbnail. Price: $0.015","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalSearchRequest"},"example":{"query":"artificial intelligence","limit":10}}}},"responses":{"200":{"description":"News results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewsSearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/images":{"post":{"tags":["Search"],"summary":"Image Search","operationId":"searchImages","description":"Google Images search. Returns direct image URLs with dimensions, thumbnails, and source pages. Price: $0.015","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalSearchRequest"},"example":{"query":"golden gate bridge","limit":10}}}},"responses":{"200":{"description":"Image results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImageSearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/places":{"post":{"tags":["Search"],"summary":"Places Search","operationId":"searchPlaces","description":"Local business search via Google Local. Returns names, addresses, ratings, reviews, phone numbers, websites, and coordinates. Price: $0.045","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.045000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacesSearchRequest"},"example":{"query":"coffee shops","location":"Austin, Texas","limit":10}}}},"responses":{"200":{"description":"Place results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacesSearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/shopping":{"post":{"tags":["Search"],"summary":"Shopping Search","operationId":"searchShopping","description":"Google Shopping product search. Returns products with prices, sellers, ratings, and links. Price: $0.015","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalSearchRequest"},"example":{"query":"mechanical keyboard","limit":10}}}},"responses":{"200":{"description":"Product results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShoppingSearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/scholar":{"post":{"tags":["Search"],"summary":"Scholar Search","operationId":"searchScholar","description":"Google Scholar academic search. Returns papers with snippets, publication info, and citation counts. Price: $0.015","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalSearchRequest"},"example":{"query":"transformer attention mechanisms","limit":10}}}},"responses":{"200":{"description":"Paper results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScholarSearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/autocomplete":{"post":{"tags":["Search"],"summary":"Autocomplete","operationId":"searchAutocomplete","description":"Google Autocomplete suggestions for a partial query. Useful for keyword research and intent discovery. Price: $0.015","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerticalSearchRequest"},"example":{"query":"how to deploy cloudf","limit":10}}}},"responses":{"200":{"description":"Suggestions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutocompleteResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/search/trends":{"post":{"tags":["Search"],"summary":"Trends","operationId":"searchTrends","description":"Google Trends interest-over-time for a query. Returns a timeline of relative search interest. Price: $0.015","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.015000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsRequest"},"example":{"query":"cloudflare workers"}}}},"responses":{"200":{"description":"Trend timeline","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendsResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/social/youtube/transcript":{"post":{"tags":["Social"],"summary":"YouTube Transcript","operationId":"youtubeTranscript","description":"Full transcript of any YouTube video with timestamps. Accepts a video ID or any YouTube URL (watch, shorts, youtu.be). Price: $0.03","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.030000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/YoutubeTranscriptRequest"},"example":{"videoId":"dQw4w9WgXcQ"}}}},"responses":{"200":{"description":"Transcript","content":{"application/json":{"schema":{"$ref":"#/components/schemas/YoutubeTranscriptResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/contents":{"post":{"tags":["Core"],"summary":"Bulk Page Contents","operationId":"getContents","description":"Cheap bulk page text: fetch 1-20 URLs and get clean markdown, truncated to a per-page cap. Price: $0.0015/URL","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.001500","max":"0.030000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentsRequest"},"example":{"urls":["https://example.com/article"],"maxChars":20000}}}},"responses":{"200":{"description":"Per-URL contents","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentsResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/answer":{"post":{"tags":["Research"],"summary":"Grounded Answer","operationId":"answerQuestion","description":"Grounded answer with inline [n] citations: searches the web, fetches sources, and answers strictly from them. Price: $0.05","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnswerRequest"},"example":{"query":"What is the x402 payment protocol?","sources":3}}}},"responses":{"200":{"description":"Cited answer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnswerResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/extract":{"post":{"tags":["Extraction"],"summary":"Extract Structured Data","operationId":"extractData","description":"Extract structured data using JSON schema. Price: $0.03 base — up to 3x for high-complexity domains","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.030000","max":"0.090000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractRequest"},"example":{"url":"https://example.com/product","schema":{"name":{"type":"string"},"price":{"type":"number"}}}}}},"responses":{"200":{"description":"Data extracted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtractResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/extract/smart":{"post":{"tags":["Extraction"],"summary":"Smart Extract","operationId":"smartExtract","description":"AI-powered extraction with natural language. Price: $0.035","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.035000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartExtractRequest"},"example":{"url":"https://example.com/contact","query":"find all email addresses"}}}},"responses":{"200":{"description":"Data extracted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SmartExtractResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/batch/fetch":{"post":{"tags":["Core"],"summary":"Batch Fetch","operationId":"batchFetch","description":"Fetch 2-20 URLs in parallel. Price: $0.0015/URL","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.003000","max":"0.030000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchFetchRequest"},"example":{"urls":["https://example.com/1","https://example.com/2"]}}}},"responses":{"200":{"description":"Batch results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchFetchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/fetch/resilient":{"post":{"tags":["Core"],"summary":"Resilient Fetch (Agent Prime)","operationId":"resilientFetch","description":"Resilient fetch with automatic fallback: plain fetch first, then headless Chromium for client-rendered pages and sites that refuse bare HTTP clients. Price: $0.008 (70% off on cache hits)","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.002400","max":"0.008000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResilientFetchRequest"},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Fetch results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResilientFetchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/map":{"post":{"tags":["Core"],"summary":"Map Site URLs","operationId":"mapSite","description":"Discover a site's URLs without fetching page content: robots.txt Sitemap: directives, then sitemap.xml and nested sitemap indexes, falling back to homepage link extraction. Price: $0.004","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapRequest"},"example":{"url":"https://example.com","limit":1000}}}},"responses":{"200":{"description":"Discovered URLs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/domain":{"post":{"tags":["Core"],"summary":"Domain Intelligence","operationId":"domainIntel","description":"Everything about a domain in one call: RDAP registration (registrar, age, expiry, status codes, nameservers), live DNS (A/AAAA/MX/NS/TXT), the mail and DNS providers those records identify, the SaaS vendors the domain's TXT verification tokens reveal, SPF/DMARC posture, and risk signals (newly-registered, expiring-soon, no-registrar-lock, no-spf, no-dmarc, dmarc-monitor-only). Everyone else sells this by the month — WhoisXML from $30/mo, BuiltWith's API from $495/mo. Price: $0.005 per call, no account. Free preview available: POST /preview {\"endpoint\": \"/domain\", \"domain\": \"...\"}","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRequest"},"example":{"domain":"stripe.com"}}}},"responses":{"200":{"description":"Domain intelligence report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/package":{"post":{"tags":["Core"],"summary":"Package Intelligence","operationId":"packageIntel","description":"Should you depend on this package? Version, license, deprecation status with the maintainer's own reason, weekly and monthly downloads, last release date, maintainer count, npm's quality/popularity/maintenance scores, and health signals — npm or PyPI, one call. Note: PyPI reports metadata and maintenance only; the sole free download-count source (pypistats.org) rate-limits anonymous callers, and a field that works intermittently is worse than one documented as absent. Price: $0.003","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.003000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageRequest"},"example":{"name":"express","registry":"npm"}}}},"responses":{"200":{"description":"Package report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"description":"No such package in that registry","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/tech":{"post":{"tags":["Core"],"summary":"Detect Website Technologies","operationId":"detectTech","description":"What a site is built and run on, from a single fetch: framework, CMS, ecommerce platform, CDN, analytics, payments, support widgets and web server. Every detection carries the response header or HTML marker that produced it, so a caller can judge the heuristic rather than trust it blindly. Pairs with /domain, which reads the organisation's SaaS stack out of DNS instead. Price: $0.005. Free preview available: POST /preview {\"endpoint\": \"/tech\", \"url\": \"...\"}","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.005000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechRequest"},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Detected technologies","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TechResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/discussions":{"post":{"tags":["Core"],"summary":"Hacker News Discussions","operationId":"searchDiscussions","description":"What Hacker News said about a topic: matching stories with points, comment counts and links to the threads, plus aggregates — total matches, points and comments over the returned set, most-submitted domains, and the first and last time it came up. Price: $0.004","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscussionsRequest"},"example":{"query":"cloudflare workers","limit":10}}}},"responses":{"200":{"description":"Matching discussions and aggregates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscussionsResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/crawl":{"post":{"tags":["Core"],"summary":"Crawl Site","operationId":"crawlSite","description":"Bounded same-host BFS crawl returning clean markdown for every page in ONE synchronous call — no async job, no polling. robots.txt is honoured by default. Price: $0.0015 per requested page (1-25) — you are charged for the page budget you request (limit), not for the pages actually returned.","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.001500","max":"0.037500"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"},"example":{"url":"https://example.com","limit":10,"maxDepth":2}}}},"responses":{"200":{"description":"Crawled pages as markdown","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"description":"robots.txt disallows crawling the start URL. Set respectRobots=false only for sites you control.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/dashboard":{"get":{"tags":["System"],"summary":"Agent Dashboard","operationId":"getDashboard","description":"HTML dashboard for connecting wallet, viewing balance, and transaction history.","security":[],"responses":{"200":{"description":"HTML Dashboard"}}}},"/credits/buy":{"post":{"tags":["Credits"],"summary":"Buy Credits","operationId":"buyCredits","description":"Purchase agent credits with x402. Pay $2-$1000; deposit bonuses: 20% at $10+, 30% at $50+, 40% at $100+.","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"2.000000","max":"1000.000000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount"],"properties":{"amount":{"type":"number","minimum":2,"maximum":1000,"example":10,"description":"Amount in USD to purchase ($2-$1000)"}}},"example":{"amount":10}}}},"responses":{"200":{"description":"Credits purchased"},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/credits/balance":{"get":{"tags":["Credits"],"summary":"Get Balance","operationId":"getCreditsBalance","description":"Get current credit balance. Requires X-CREDIT-WALLET and X-CREDIT-SIGNATURE headers.","security":[],"parameters":[{"name":"X-CREDIT-WALLET","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-CREDIT-SIGNATURE","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-CREDIT-TIMESTAMP","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Balance info"},"401":{"description":"Invalid signature"}}}},"/credits/history":{"get":{"tags":["Credits"],"summary":"Get History","operationId":"getCreditsHistory","description":"Get credit transaction history. Requires X-CREDIT-WALLET and X-CREDIT-SIGNATURE headers.","security":[],"parameters":[{"name":"X-CREDIT-WALLET","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-CREDIT-SIGNATURE","in":"header","required":true,"schema":{"type":"string"}},{"name":"X-CREDIT-TIMESTAMP","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transaction history"},"401":{"description":"Invalid signature"}}}},"/research":{"post":{"tags":["Research"],"summary":"Research Topic","operationId":"research","description":"Search + fetch + AI summarize. Price: $0.08","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.080000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchRequest"},"example":{"query":"x402 payment protocol benefits","resultCount":5}}}},"responses":{"200":{"description":"Research results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/research/deep":{"post":{"tags":["Research"],"summary":"Deep Research (Cited)","operationId":"deepResearch","description":"Multi-step cited research in ONE synchronous call — no async job, no polling. Plans sub-questions from your query, runs a web search per sub-question, fetches and dedupes the sources across them, then synthesizes an answer with inline [n] citations, key findings, and gaps. Price: $0.20 standard (3 sub-questions, 8 sources) / $0.35 deep (5 sub-questions, 12 sources). LATENCY: this is a long-running call — a standard run typically takes 30-60 seconds and deep takes longer, so set a generous HTTP client timeout (120s recommended). Differs from POST /research ($0.08, a single search + AI summary) by decomposing the question into sub-questions and citing every claim inline.","x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.200000","max":"0.350000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeepResearchRequest"},"example":{"query":"How are AI agents using micropayments in 2026?","depth":"standard"}}}},"responses":{"200":{"description":"Cited research report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeepResearchResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"description":"No web sources found for this query — nothing was charged for a failed run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"502":{"description":"Research failed or timed out before completing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"AI service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/pdf":{"post":{"tags":["Extraction"],"summary":"Extract PDF","operationId":"extractPdf","description":"Extract text from PDF documents. Price: $0.004","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.004000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PdfExtractRequest"},"example":{"url":"https://example.com/document.pdf"}}}},"responses":{"200":{"description":"PDF extracted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PdfExtractResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/compare":{"post":{"tags":["Research"],"summary":"Compare URLs","operationId":"compareUrls","description":"Compare 2-3 URLs with AI analysis. Price: $0.05","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"},"example":{"urls":["https://product-a.com","https://product-b.com"]}}}},"responses":{"200":{"description":"Comparison results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/monitor/create":{"post":{"tags":["Monitoring"],"summary":"Create Monitor","operationId":"createMonitor","description":"Create URL change monitor. Price: $0.01","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.010000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreateRequest"},"example":{"url":"https://example.com/status","webhookUrl":"https://your-app.com/webhook"}}}},"responses":{"200":{"description":"Monitor created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonitorCreateResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/monitor/{id}":{"get":{"tags":["Monitoring"],"summary":"Get Monitor","operationId":"getMonitor","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Monitor status"},"404":{"description":"Not found"}}},"delete":{"tags":["Monitoring"],"summary":"Delete Monitor","operationId":"deleteMonitor","security":[],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"404":{"description":"Not found"}}}},"/free/fetch":{"post":{"tags":["Free"],"summary":"Free Fetch","operationId":"freeFetch","description":"Fetch any webpage (content truncated to 2000 chars). Rate limited to 10/hour. No payment required.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string"},"timeout":{"type":"integer"}}}}}},"responses":{"200":{"description":"Page content (truncated)"},"400":{"description":"Invalid request"},"429":{"description":"Rate limit exceeded"}}}},"/free/search":{"post":{"tags":["Free"],"summary":"Free Search","operationId":"freeSearch","description":"Web search (max 3 results). Rate limited to 10/hour. No payment required.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"query":{"type":"string"}}}}}},"responses":{"200":{"description":"Search results (max 3)"},"400":{"description":"Invalid request"},"429":{"description":"Rate limit exceeded"}}}},"/preview":{"post":{"tags":["Discovery"],"summary":"Preview a Paid Endpoint","operationId":"previewEndpoint","security":[],"description":"See what a paid endpoint costs and what it returns BEFORE paying. Free, rate limited to 10/hour per IP. Returns the live price (derived from the same PRICING source as the 402 challenge), a one-line summary, and a recorded sample of the exact response shape. A real, truncated LIVE preview runs only for endpoints whose marginal cost is a plain fetch (currently /fetch/basic, /contents, /map) and only when you pass a url; endpoints backed by a metered upstream (SerpAPI, Anthropic) never run live for free and return the recorded sample instead. Responds 404 for an endpoint that is not sold.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewRequest"},"example":{"endpoint":"/answer"}}}},"responses":{"200":{"description":"Price, summary, recorded sample and (when available) a live truncated preview","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewResponse"}}}},"400":{"description":"Invalid body, or an unsafe/malformed url","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Unknown endpoint — it is not one of the paid endpoints. See /discovery for the catalogue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded (10/hour)"}}}},"/.well-known/agent-registration.json":{"get":{"tags":["Discovery"],"summary":"ERC-8004 Registration Document","operationId":"getAgentRegistration","security":[],"description":"ERC-8004 (Trustless Agents) registration document: name, description, image, services, x402 support, payment info, and the feedback endpoints. WebLens hosts only the OFF-CHAIN half of ERC-8004 — it is not registered on-chain, holds no agent id, and writes nothing to any registry, so `registrations` stays empty until someone registers this URI on an Identity Registry. `supportedTrust` is [\"feedback\"]: no crypto-economic or TEE-attestation claims are made.","responses":{"200":{"description":"Registration document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegistration"}}}}}}},"/receipts/{requestId}":{"get":{"tags":["Discovery"],"summary":"Get Call Receipt","operationId":"getReceipt","security":[],"description":"Receipt for a paid call — endpoint, status, outcome, charged price, payment method, network and pay-to address. Every paid response carries `X-Receipt-Id` and `X-Receipt-Url` headers pointing here. Receipts are kept for 30 days. When signing is configured the receipt also carries `mac`/`keyId`/`alg`: a symmetric HMAC tag (the same construction as proof-of-context) that only a key holder can verify — it is NOT a third-party-verifiable signature.","parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string"},"description":"The X-Request-Id / X-Receipt-Id of the paid call"}],"responses":{"200":{"description":"Receipt for the call","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CallReceipt"}}}},"404":{"description":"No receipt for that request id (receipts are issued for paid calls and kept 30 days)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/feedback":{"post":{"tags":["Discovery"],"summary":"Host an ERC-8004 Feedback Document","operationId":"submitFeedback","security":[],"description":"Host a buyer-authored ERC-8004 feedback document and get back the (feedbackURI, feedbackHash) pair that `giveFeedback()` on a Reputation Registry expects. The document is stored verbatim and served back byte-for-byte from GET /feedback/{id}, so its keccak-256 hash matches the hash returned here. WebLens neither authors nor alters the document and never calls the registry — the buyer posts giveFeedback() themselves. Free, rate limited to 10/hour per IP. Limits: body ≤ 256KB, nesting ≤ 32 levels.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackDocument"},"example":{"agentRegistry":"eip155:8453:0x0000000000000000000000000000000000000000","agentId":"42","clientAddress":"0x1234567890abcdef1234567890abcdef12345678","createdAt":"2026-07-31T12:00:00.000Z","value":95,"valueDecimals":0,"tag1":"quality","endpoint":"/answer"}}}},"responses":{"201":{"description":"Document hosted; use feedbackURI + feedbackHash in giveFeedback()","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackHosted"}}}},"400":{"description":"Body is not a JSON object, nests deeper than 32 levels, or is missing required ERC-8004 fields (the response names them)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"Body exceeds the 256KB limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limit exceeded (10/hour)"}}}},"/feedback/{id}":{"get":{"tags":["Discovery"],"summary":"Get a Hosted Feedback Document","operationId":"getFeedbackDocument","security":[],"description":"Serves a hosted feedback document verbatim — the bytes are exactly what was hashed, so keccak-256 of this response equals the feedbackHash returned by POST /feedback. This URL is the feedbackURI.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id from the feedbackURI returned by POST /feedback"}],"responses":{"200":{"description":"The stored document, byte-for-byte","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackDocument"}}}},"404":{"description":"No feedback document with that id","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/intel/company":{"post":{"tags":["Intelligence"],"summary":"Company Intelligence","operationId":"intelCompany","description":"Comprehensive company deep dive: tech stack, funding, team size, competitors, news. Chains search + batch fetch + AI extraction. Price: $1.00","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"1.000000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["target"],"properties":{"target":{"type":"string","description":"Company name or domain"}}},"example":{"target":"coinbase.com"}}}},"responses":{"200":{"description":"Company profile"},"402":{"$ref":"#/components/responses/PaymentRequired"},"503":{"description":"AI service unavailable"}}}},"/intel/market":{"post":{"tags":["Intelligence"],"summary":"Market Research","operationId":"intelMarket","description":"AI-powered market research report with executive summary, key findings, trends, and data points. Price: $5.00","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"5.000000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["topic"],"properties":{"topic":{"type":"string"},"depth":{"type":"string","enum":["quick","standard","comprehensive"]},"focus":{"type":"string"}}},"example":{"topic":"AI Agents","depth":"standard"}}}},"responses":{"200":{"description":"Market research report"},"402":{"$ref":"#/components/responses/PaymentRequired"},"503":{"description":"AI service unavailable"}}}},"/intel/competitive":{"post":{"tags":["Intelligence"],"summary":"Competitive Analysis","operationId":"intelCompetitive","description":"Full competitive analysis: feature matrix, pricing comparison, SWOT analysis, positioning summary. Price: $8.00","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"8.000000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["company"],"properties":{"company":{"type":"string"},"maxCompetitors":{"type":"integer","minimum":1,"maximum":10},"focus":{"type":"string"}}},"example":{"company":"Example Corp","maxCompetitors":5}}}},"responses":{"200":{"description":"Competitive analysis report"},"402":{"$ref":"#/components/responses/PaymentRequired"},"503":{"description":"AI service unavailable"}}}},"/intel/site-audit":{"post":{"tags":["Intelligence"],"summary":"Site Audit","operationId":"intelSiteAudit","description":"Comprehensive SEO, performance, and security audit with scoring and recommendations. Price: $0.75","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.750000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com"}}},"example":{"url":"https://example.com"}}}},"responses":{"200":{"description":"Site audit report"},"402":{"$ref":"#/components/responses/PaymentRequired"},"503":{"description":"AI service unavailable"}}}},"/intel/project":{"post":{"tags":["Intelligence"],"summary":"Project Due Diligence (off-chain)","operationId":"intelProject","description":"Off-chain due diligence on a project's web presence — the half an on-chain rug checker cannot see. Returns domain age and registrar, whether a team page, whitepaper, docs, tokenomics and socials exist, whether the site is an off-the-shelf template, and a cross-check of a contract address against the addresses actually printed on the project's own website. An address you are about to trade that does NOT appear on the project site, while other addresses do, is the strongest off-chain impersonation signal available. Returns weighted risk signals and an A-F grade. Reads NOTHING on-chain: no contract code, liquidity, ownership or holders — pair it with an on-chain checker, neither half is sufficient alone. Price: $0.05. Free preview available: POST /preview {\"endpoint\": \"/intel/project\", \"domain\": \"...\"} returns the grade.","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.050000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAuditRequest"},"example":{"domain":"example.org","tokenAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","chain":"base"}}}},"responses":{"200":{"description":"Off-chain due diligence report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectAuditResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/memory/set":{"post":{"tags":["Memory"],"summary":"Store Value","operationId":"memorySet","description":"Store in key-value storage. Price: $0.001","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.001000"},"protocols":[{"x402":{}}]},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemorySetRequest"},"example":{"key":"user_prefs","value":{"theme":"dark"}}}}},"responses":{"200":{"description":"Stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemorySetResponse"}}}},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/memory/get":{"get":{"tags":["Memory"],"summary":"Get Value","operationId":"memoryGet","description":"Retrieve stored value. Requires wallet auth (Payment-Signature or X-CREDIT-WALLET header). Price: $0.0005","security":[],"parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Value retrieved"},"401":{"description":"Unauthorized — wallet auth required"},"404":{"description":"Key not found"}}}},"/memory/delete":{"delete":{"tags":["Memory"],"summary":"Delete Value","operationId":"memoryDelete","description":"Delete a stored value. Requires wallet auth (Payment-Signature or X-CREDIT-WALLET header).","security":[],"parameters":[{"name":"key","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"401":{"description":"Unauthorized — wallet auth required"},"404":{"description":"Key not found"}}}},"/memory/list":{"get":{"tags":["Memory"],"summary":"List Keys","operationId":"memoryList","description":"List all keys for the authenticated wallet. Requires wallet auth (Payment-Signature or X-CREDIT-WALLET header).","security":[],"responses":{"200":{"description":"Keys list"},"401":{"description":"Unauthorized — wallet auth required"}}}},"/mcp":{"post":{"tags":["System"],"summary":"MCP JSON-RPC","operationId":"mcpPost","description":"Model Context Protocol endpoint for AI agents. Supports tools/list and tools/call methods.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"jsonrpc":{"type":"string"},"method":{"type":"string"},"params":{"type":"object"},"id":{"type":"string"}}}}}},"responses":{"200":{"description":"JSON-RPC response"},"402":{"$ref":"#/components/responses/PaymentRequired"}}}},"/mcp/info":{"get":{"tags":["System"],"summary":"MCP Server Info","operationId":"mcpInfo","description":"Get MCP server information including available tools and pricing.","security":[],"responses":{"200":{"description":"Server info with tools list"}}}}},"components":{"schemas":{"ScreenshotRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri"},"viewport":{"type":"object","properties":{"width":{"type":"integer","minimum":320,"maximum":3840},"height":{"type":"integer","minimum":240,"maximum":2160}}},"selector":{"type":"string"},"fullPage":{"type":"boolean"},"timeout":{"type":"integer","minimum":5000,"maximum":30000}}},"ScreenshotResponse":{"type":"object","properties":{"url":{"type":"string"},"image":{"type":"string"},"dimensions":{"type":"object"},"capturedAt":{"type":"string"},"requestId":{"type":"string"}}},"FetchRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com/article"},"timeout":{"type":"integer"},"cache":{"type":"boolean"},"cacheTtl":{"type":"integer"},"waitFor":{"type":"string"}}},"FetchResponse":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"metadata":{"type":"object"},"tier":{"type":"string"},"fetchedAt":{"type":"string"},"cache":{"type":"object"},"proof":{"$ref":"#/components/schemas/ProofOfContext"},"requestId":{"type":"string"}}},"SearchRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"limit":{"type":"integer"},"includeContent":{"type":"boolean","description":"Also fetch the top result pages as markdown (+$0.0015 per fetched result)"},"contentResults":{"type":"integer","minimum":1,"maximum":10,"description":"How many top results to fetch content for (default 5)"},"contentChars":{"type":"integer","minimum":500,"maximum":20000,"description":"Per-page content character cap (default 8000)"}}},"SearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"type":"object"}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"VerticalSearchRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"limit":{"type":"integer","minimum":1,"maximum":20}}},"NewsSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer"},"title":{"type":"string"},"url":{"type":"string"},"source":{"type":"string"},"date":{"type":"string"},"isoDate":{"type":"string"},"thumbnail":{"type":"string"}}}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"ImageSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer"},"title":{"type":"string"},"imageUrl":{"type":"string"},"thumbnail":{"type":"string"},"sourcePage":{"type":"string"},"source":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"}}}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"PlacesSearchRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"location":{"type":"string","description":"Free-text location bias, e.g. \"Austin, Texas\""},"limit":{"type":"integer","minimum":1,"maximum":20}}},"PlacesSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer"},"name":{"type":"string"},"address":{"type":"string"},"rating":{"type":"number"},"reviews":{"type":"integer"},"priceLevel":{"type":"string"},"category":{"type":"string"},"phone":{"type":"string"},"website":{"type":"string"},"description":{"type":"string"},"placeId":{"type":"string"},"coordinates":{"type":"object"}}}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"ShoppingSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer"},"title":{"type":"string"},"url":{"type":"string"},"price":{"type":"string"},"extractedPrice":{"type":"number"},"source":{"type":"string"},"rating":{"type":"number"},"reviews":{"type":"integer"},"thumbnail":{"type":"string"}}}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"ScholarSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"type":"object","properties":{"position":{"type":"integer"},"title":{"type":"string"},"url":{"type":"string"},"snippet":{"type":"string"},"publicationInfo":{"type":"string"},"citedBy":{"type":"integer"}}}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"AutocompleteResponse":{"type":"object","properties":{"query":{"type":"string"},"suggestions":{"type":"array","items":{"type":"string"}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"TrendsRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"Topic to get trend data for"}}},"TrendsResponse":{"type":"object","properties":{"query":{"type":"string"},"timeline":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"timestamp":{"type":"string"},"values":{"type":"array","items":{"type":"object"}}}}},"searchedAt":{"type":"string"},"requestId":{"type":"string"}}},"YoutubeTranscriptRequest":{"type":"object","required":["videoId"],"properties":{"videoId":{"type":"string","example":"dQw4w9WgXcQ","description":"YouTube video ID (e.g. dQw4w9WgXcQ) or full video URL (watch, shorts, youtu.be)"},"lang":{"type":"string","description":"Transcript language code (default: video default)"}}},"YoutubeTranscriptResponse":{"type":"object","properties":{"videoId":{"type":"string"},"language":{"type":"string"},"segments":{"type":"array","items":{"type":"object","properties":{"startMs":{"type":"integer"},"startTime":{"type":"string"},"text":{"type":"string"}}}},"fullText":{"type":"string"},"fetchedAt":{"type":"string"},"requestId":{"type":"string"}}},"ContentsRequest":{"type":"object","required":["urls"],"properties":{"urls":{"type":"array","items":{"type":"string","format":"uri"},"minItems":1,"maxItems":20,"example":["https://example.com/article"]},"maxChars":{"type":"integer","minimum":500,"maximum":50000,"description":"Per-page content character cap (default 20000)"},"timeout":{"type":"integer","minimum":5000,"maximum":30000}}},"ContentsResponse":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"truncated":{"type":"boolean"},"error":{"type":"string"}}}},"summary":{"type":"object","properties":{"total":{"type":"integer"},"successful":{"type":"integer"},"failed":{"type":"integer"}}},"fetchedAt":{"type":"string"},"requestId":{"type":"string"}}},"AnswerRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The question to answer"},"sources":{"type":"integer","minimum":1,"maximum":5,"description":"Web sources to search, fetch, and cite (default 3)"}}},"AnswerResponse":{"type":"object","properties":{"query":{"type":"string"},"answer":{"type":"string","description":"Answer text with inline [n] citation markers"},"citations":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"}}}},"confidence":{"type":"number"},"answeredAt":{"type":"string"},"requestId":{"type":"string"}}},"ExtractRequest":{"type":"object","required":["url","schema"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com/product"},"schema":{"type":"object","example":{"name":{"type":"string"},"price":{"type":"number"}}},"instructions":{"type":"string"}}},"ExtractResponse":{"type":"object","properties":{"url":{"type":"string"},"data":{"type":"object"},"extractedAt":{"type":"string"},"proof":{"$ref":"#/components/schemas/ProofOfContext"},"requestId":{"type":"string"}}},"SmartExtractRequest":{"type":"object","required":["url","query"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com/contact"},"query":{"type":"string","example":"find all email addresses"},"format":{"type":"string"}}},"SmartExtractResponse":{"type":"object","properties":{"url":{"type":"string"},"query":{"type":"string"},"data":{"type":"array"},"explanation":{"type":"string"},"extractedAt":{"type":"string"},"requestId":{"type":"string"}}},"BatchFetchRequest":{"type":"object","required":["urls"],"properties":{"urls":{"type":"array","items":{"type":"string","format":"uri"},"minItems":2,"maxItems":20,"example":["https://example.com/1","https://example.com/2"]},"timeout":{"type":"integer"},"tier":{"type":"string"}}},"BatchFetchResponse":{"type":"object","properties":{"results":{"type":"array"},"summary":{"type":"object"},"totalPrice":{"type":"string"},"requestId":{"type":"string"}}},"ResilientFetchRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com"},"timeout":{"type":"integer"}}},"ResilientFetchResponse":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"provider":{"type":"object"},"tier":{"type":"string"},"fetchedAt":{"type":"string"},"requestId":{"type":"string"}}},"MapRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com","description":"Site URL to map — the origin is used for robots.txt and sitemap lookups"},"limit":{"type":"integer","minimum":1,"maximum":5000,"description":"Maximum URLs to return (default 1000)"},"include":{"type":"array","items":{"type":"string"},"description":"Only URLs whose path+query contains one of these substrings"},"exclude":{"type":"array","items":{"type":"string"},"description":"Skip URLs whose path+query contains one of these substrings"},"timeout":{"type":"integer","minimum":5000,"maximum":30000}}},"MapResponse":{"type":"object","properties":{"url":{"type":"string"},"urls":{"type":"array","items":{"type":"string"},"description":"Discovered same-host URLs"},"total":{"type":"integer"},"source":{"type":"string","enum":["sitemap","links","none"],"description":"Where the URLs came from"},"sitemapsChecked":{"type":"integer","description":"Sitemap documents fetched (including nested indexes)"},"mappedAt":{"type":"string"},"requestId":{"type":"string"}}},"DomainRequest":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"stripe.com","description":"Domain to inspect. A full URL is accepted and reduced to its hostname; a leading www. is stripped."}}},"DomainResponse":{"type":"object","properties":{"domain":{"type":"string"},"registration":{"type":"object","description":"RDAP registration facts. found=false when the registry has no RDAP service or did not answer.","properties":{"found":{"type":"boolean"},"registrar":{"type":"string"},"registeredAt":{"type":"string","description":"ISO date the domain was first registered"},"expiresAt":{"type":"string"},"updatedAt":{"type":"string"},"status":{"type":"array","items":{"type":"string"},"description":"EPP status codes, e.g. client transfer prohibited"},"nameservers":{"type":"array","items":{"type":"string"}},"rdapServer":{"type":"string","description":"Registry RDAP base URL that answered"}}},"dns":{"type":"object","description":"Live records keyed by type: A, AAAA, MX, NS, TXT. Types with no answer are omitted."},"email":{"type":"object","properties":{"provider":{"type":"string","description":"Mail platform identified from MX, e.g. Google Workspace, Microsoft 365, Proofpoint"},"hasSpf":{"type":"boolean"},"hasDmarc":{"type":"boolean"},"dmarcPolicy":{"type":"string","enum":["none","quarantine","reject"]}}},"hosting":{"type":"object","properties":{"dnsProvider":{"type":"string","description":"DNS operator identified from NS, e.g. AWS Route 53, Cloudflare"}}},"stack":{"type":"array","items":{"type":"string"},"description":"SaaS vendors inferred from TXT domain-verification tokens the organisation published"},"signals":{"type":"array","items":{"type":"string"},"description":"Risk/posture flags: newly-registered, expiring-soon, expired, no-registrar-lock, no-spf, no-dmarc, dmarc-monitor-only, no-mx, registration-unavailable"},"ageDays":{"type":"integer","description":"Days since registration"},"expiresInDays":{"type":"integer","description":"Days until expiry (negative if expired)"},"inspectedAt":{"type":"string"},"requestId":{"type":"string"}}},"ProjectAuditRequest":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string","example":"example.org","description":"Project website. A full URL is reduced to its hostname."},"tokenAddress":{"type":"string","description":"Optional contract/token address to cross-check against the addresses printed on the site"},"chain":{"type":"string","description":"Optional chain label for the token address, e.g. base, ethereum, solana"}}},"ProjectAuditResponse":{"type":"object","properties":{"project":{"type":"object","description":"input, domain, reachable, status, title"},"domain":{"type":"object","description":"RDAP facts: registeredAt, ageDays, expiresAt, registrar, nameservers, found"},"site":{"type":"object","description":"technologies (each with evidence), categories, generator, looksTemplated"},"content":{"type":"object","description":"pages present (team, whitepaper, docs, tokenomics, audit, roadmap), socials found, and every EVM contract address printed on the site"},"crossCheck":{"type":"object","description":"Present when tokenAddress was supplied: the queried address, whether it appears on the site, and any other addresses that do","properties":{"queried":{"type":"string"},"chain":{"type":"string"},"foundOnSite":{"type":"boolean"},"otherAddressesOnSite":{"type":"array","items":{"type":"string"}}}},"signals":{"type":"array","items":{"type":"string"},"description":"Weighted off-chain signals: very-new-domain, newly-registered-domain, contract-mismatch, contract-not-on-site, site-unreachable, no-team-page, no-whitepaper, no-docs, no-socials, no-github, templated-site, domain-expires-soon, no-registrar-lock, registration-unavailable"},"risk":{"type":"object","properties":{"score":{"type":"integer","description":"0-100 cumulative weighted risk"},"grade":{"type":"string","enum":["A","B","C","D","F"]},"summary":{"type":"string"}}},"disclaimer":{"type":"string","description":"States plainly that nothing on-chain was read"},"auditedAt":{"type":"string"},"requestId":{"type":"string"}}},"PackageRequest":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"express","description":"Package name. npm scopes are supported (@scope/pkg)."},"registry":{"type":"string","enum":["npm","pypi"],"default":"npm"}}},"PackageResponse":{"type":"object","properties":{"name":{"type":"string"},"registry":{"type":"string","enum":["npm","pypi"]},"found":{"type":"boolean"},"version":{"type":"string","description":"Latest published version"},"description":{"type":"string"},"license":{"type":"string"},"homepage":{"type":"string"},"repository":{"type":"string","description":"Normalised repository URL (git+ prefix and .git suffix removed)"},"deprecated":{"type":"boolean"},"deprecationReason":{"type":"string","description":"The maintainer's deprecation message, when there is one"},"downloads":{"type":"object","description":"npm only — see the endpoint description for why PyPI has none","properties":{"lastWeek":{"type":"integer"},"lastMonth":{"type":"integer"}}},"maintenance":{"type":"object","properties":{"lastPublishedAt":{"type":"string"},"daysSinceRelease":{"type":"integer"},"maintainers":{"type":"integer"},"scores":{"type":"object","description":"npm's own 0-1 quality / popularity / maintenance scores"}}},"dependencies":{"type":"integer","description":"Count of direct runtime dependencies"},"requiresPython":{"type":"string","description":"PyPI only"},"signals":{"type":"array","items":{"type":"string"},"description":"deprecated, no-recent-release (>2y), no-license, single-maintainer, no-public-repository"},"checkedAt":{"type":"string"},"requestId":{"type":"string"}}},"TechRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com","description":"Site URL to fingerprint"}}},"TechResponse":{"type":"object","properties":{"url":{"type":"string"},"finalUrl":{"type":"string","description":"URL after redirects"},"status":{"type":"integer"},"server":{"type":"string"},"poweredBy":{"type":"string"},"generator":{"type":"string","description":"Value of <meta name=\"generator\">, when present"},"technologies":{"type":"array","description":"Each detection with the marker that produced it","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string","enum":["framework","cms","ecommerce","cdn","analytics","hosting","security","support","payments","server"]},"evidence":{"type":"string","description":"The response header line or HTML marker that matched"}}}},"categories":{"type":"object","description":"Technology names grouped by category"},"detectedAt":{"type":"string"},"requestId":{"type":"string"}}},"DiscussionsRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string","example":"cloudflare workers","description":"What to search Hacker News for"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"sort":{"type":"string","enum":["relevance","recent"],"default":"relevance"}}},"DiscussionsResponse":{"type":"object","properties":{"query":{"type":"string"},"source":{"type":"string","enum":["hackernews"]},"sort":{"type":"string"},"stories":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"points":{"type":"integer"},"comments":{"type":"integer"},"author":{"type":"string"},"postedAt":{"type":"string"},"discussionUrl":{"type":"string","description":"Link to the HN thread"}}}},"summary":{"type":"object","properties":{"totalMatches":{"type":"integer","description":"Stories HN matched overall, which may exceed those returned"},"returned":{"type":"integer"},"pointsReturned":{"type":"integer","description":"Summed over the RETURNED stories only"},"commentsReturned":{"type":"integer","description":"Summed over the RETURNED stories only"},"topDomains":{"type":"array","description":"Most-submitted domains among the returned stories"},"firstSeen":{"type":"string"},"lastSeen":{"type":"string"}}},"discussedAt":{"type":"string"},"requestId":{"type":"string"}}},"CrawlRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com","description":"Start URL — the crawl stays on this host"},"limit":{"type":"integer","minimum":1,"maximum":25,"description":"Page budget (default 10) — you are charged $0.0015 per requested page, not per page returned"},"maxDepth":{"type":"integer","minimum":0,"maximum":3,"description":"Link depth from the start URL (0 = start page only, default 2)"},"include":{"type":"array","items":{"type":"string"},"description":"Only crawl URLs whose path+query contains one of these substrings"},"exclude":{"type":"array","items":{"type":"string"},"description":"Skip URLs whose path+query contains one of these substrings"},"respectRobots":{"type":"boolean","description":"Honour robots.txt (default true; disable only for sites you control)"},"maxChars":{"type":"integer","minimum":500,"maximum":50000,"description":"Per-page content character cap (default 8000)"},"timeout":{"type":"integer","minimum":5000,"maximum":30000}}},"CrawlResponse":{"type":"object","properties":{"url":{"type":"string"},"pages":{"type":"array","items":{"type":"object","properties":{"url":{"type":"string"},"depth":{"type":"integer"},"status":{"type":"string","enum":["success","failed"]},"title":{"type":"string"},"content":{"type":"string","description":"Page as clean markdown"},"truncated":{"type":"boolean"},"error":{"type":"string"}}}},"summary":{"type":"object","properties":{"crawled":{"type":"integer"},"successful":{"type":"integer"},"failed":{"type":"integer"},"discovered":{"type":"integer"},"limit":{"type":"integer"},"maxDepth":{"type":"integer"},"robotsRespected":{"type":"boolean"}}},"crawledAt":{"type":"string"},"requestId":{"type":"string"}}},"ResearchRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"resultCount":{"type":"integer"},"includeRawContent":{"type":"boolean"}}},"ResearchResponse":{"type":"object","properties":{"query":{"type":"string"},"sources":{"type":"array"},"summary":{"type":"string"},"keyFindings":{"type":"array"},"researchedAt":{"type":"string"},"requestId":{"type":"string"}}},"DeepResearchRequest":{"type":"object","required":["query"],"properties":{"query":{"type":"string","minLength":1,"maxLength":500,"example":"How are AI agents using micropayments in 2026?","description":"The research question (1-500 chars)"},"depth":{"type":"string","enum":["standard","deep"],"description":"Research tier: standard = 3 sub-questions / 8 sources ($0.20); deep = 5 sub-questions / 12 sources ($0.35). Default: standard."}}},"DeepResearchResponse":{"type":"object","properties":{"query":{"type":"string"},"depth":{"type":"string","enum":["standard","deep"]},"subQuestions":{"type":"array","items":{"type":"string"},"description":"The sub-questions the query was decomposed into, one web search each"},"answer":{"type":"string","description":"Synthesized answer with inline [n] citation markers"},"keyFindings":{"type":"array","items":{"type":"string"},"description":"Bullet-point findings drawn from the sources"},"citations":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"url":{"type":"string"},"title":{"type":"string"},"subQuestion":{"type":"string"}}},"description":"Sources behind the [n] markers, with the sub-question each answered"},"gaps":{"type":"array","items":{"type":"string"},"description":"What the sources did not establish"},"sourcesFetched":{"type":"integer","description":"Sources whose full page was fetched (the rest fall back to their search snippet)"},"researchedAt":{"type":"string"},"requestId":{"type":"string"}}},"PdfExtractRequest":{"type":"object","required":["url"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com/document.pdf"},"pages":{"type":"array","items":{"type":"integer"}}}},"PdfExtractResponse":{"type":"object","properties":{"url":{"type":"string"},"metadata":{"type":"object"},"pages":{"type":"array"},"fullText":{"type":"string"},"extractedAt":{"type":"string"},"requestId":{"type":"string"}}},"CompareRequest":{"type":"object","required":["urls"],"properties":{"urls":{"type":"array","items":{"type":"string","format":"uri"},"minItems":2,"maxItems":3,"example":["https://product-a.com","https://product-b.com"]},"focus":{"type":"string"}}},"CompareResponse":{"type":"object","properties":{"sources":{"type":"array"},"comparison":{"type":"object"},"comparedAt":{"type":"string"},"requestId":{"type":"string"}}},"MonitorCreateRequest":{"type":"object","required":["url","webhookUrl"],"properties":{"url":{"type":"string","format":"uri","example":"https://example.com/status"},"webhookUrl":{"type":"string","format":"uri","example":"https://your-app.com/webhook"},"checkInterval":{"type":"integer"},"notifyOn":{"type":"string"}}},"MonitorCreateResponse":{"type":"object","properties":{"monitorId":{"type":"string"},"url":{"type":"string"},"webhookUrl":{"type":"string"},"checkInterval":{"type":"integer"},"nextCheckAt":{"type":"string"},"createdAt":{"type":"string"},"requestId":{"type":"string"}}},"MemorySetRequest":{"type":"object","required":["key","value"],"properties":{"key":{"type":"string"},"value":{},"ttl":{"type":"integer"}}},"MemorySetResponse":{"type":"object","properties":{"key":{"type":"string"},"stored":{"type":"boolean"},"expiresAt":{"type":"string"},"requestId":{"type":"string"}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}}},"PreviewRequest":{"type":"object","required":["endpoint"],"properties":{"endpoint":{"type":"string","minLength":1,"maxLength":100,"example":"/answer","description":"Paid endpoint path to preview, e.g. \"/answer\" (a leading slash is added if you omit it)"},"url":{"type":"string","format":"uri","example":"https://example.com","description":"Fetch-backed endpoints only (/fetch/basic, /contents, /map): run a real truncated preview of this URL"}}},"PreviewResponse":{"type":"object","properties":{"endpoint":{"type":"string"},"method":{"type":"string"},"price":{"type":"string","description":"Human-readable price, resolved from the same PRICING source as the 402 challenge"},"currency":{"type":"string"},"summary":{"type":"string","description":"One line on what the paid call returns"},"sample":{"type":"object","description":"Recorded example of the real response shape"},"sampleType":{"type":"string","enum":["recorded"]},"live":{"type":"object","description":"Present only when a live preview ran: { url, title, content, truncatedAt, note } — or { error } if the fetch failed"},"livePreviewAvailable":{"type":"boolean","description":"True only for endpoints with no paid upstream (currently /fetch/basic, /contents, /map)"},"livePreviewHint":{"type":"string"},"docs":{"type":"string"},"schema":{"type":"string","description":"URL of the OpenAPI document"},"previewedAt":{"type":"string"},"requestId":{"type":"string"}}},"AgentRegistration":{"type":"object","properties":{"type":{"type":"string","description":"https://eips.ethereum.org/EIPS/eip-8004#registration-v1"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"active":{"type":"boolean"},"x402Support":{"type":"boolean"},"services":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"endpoint":{"type":"string"},"version":{"type":"string"}}}},"registrations":{"type":"array","items":{"type":"object","properties":{"agentId":{"type":"string"},"agentRegistry":{"type":"string"}}},"description":"Empty: WebLens is not registered on-chain and holds no agent id"},"supportedTrust":{"type":"array","items":{"type":"string"},"description":"[\"feedback\"] — the only trust model actually supported today"},"payment":{"type":"object","properties":{"protocol":{"type":"string"},"version":{"type":"integer"},"networks":{"type":"array","items":{"type":"string"}},"asset":{"type":"string"},"priceRange":{"type":"string"}}},"feedback":{"type":"object","properties":{"receiptEndpoint":{"type":"string"},"submitEndpoint":{"type":"string"},"hashAlgorithm":{"type":"string"}}}}},"CallReceipt":{"type":"object","properties":{"type":{"type":"string","enum":["weblens-call-receipt-v1"]},"requestId":{"type":"string"},"endpoint":{"type":"string"},"method":{"type":"string"},"status":{"type":"integer","description":"HTTP status the caller received"},"outcome":{"type":"string","enum":["success","error"]},"price":{"type":"string","description":"Charged price, e.g. \"$0.015\". Absent when the call was not charged."},"currency":{"type":"string","enum":["USD"]},"paymentMethod":{"type":"string","description":"\"x402\" or \"credits\""},"network":{"type":"string"},"payTo":{"type":"string"},"servedAt":{"type":"string"},"mac":{"type":"string","description":"Symmetric HMAC tag over the receipt — verifiable only by the key holder, NOT a third-party-verifiable signature"},"keyId":{"type":"string"},"alg":{"type":"string"}}},"FeedbackDocument":{"type":"object","required":["agentRegistry","agentId","clientAddress","createdAt","value","valueDecimals"],"description":"Buyer-authored ERC-8004 feedback document. Extra fields are preserved verbatim.","properties":{"agentRegistry":{"type":"string","description":"CAIP-10 style address of the Identity Registry the agentId belongs to"},"agentId":{"type":"string"},"clientAddress":{"type":"string","description":"Wallet posting giveFeedback()"},"createdAt":{"type":"string"},"value":{"type":"number","description":"Score, scaled by valueDecimals"},"valueDecimals":{"type":"integer"},"tag1":{"type":"string"},"tag2":{"type":"string"},"endpoint":{"type":"string","description":"WebLens endpoint the feedback is about"},"proofOfPayment":{"type":"string","description":"e.g. the X-Receipt-Url of the paid call"}}},"FeedbackHosted":{"type":"object","properties":{"feedbackURI":{"type":"string","description":"Pass to giveFeedback() — GET it to retrieve the exact bytes that were hashed"},"feedbackHash":{"type":"string","description":"keccak-256 of the canonical document bytes"},"storedAt":{"type":"string"},"hashAlgorithm":{"type":"string","enum":["keccak256"]},"note":{"type":"string"},"requestId":{"type":"string"}}},"ProofOfContext":{"type":"object","required":["hash","timestamp","alg","mac","keyId"],"properties":{"hash":{"type":"string","description":"SHA-256 hash of the content"},"timestamp":{"type":"string","description":"ISO timestamp of verification"},"alg":{"type":"string","description":"MAC algorithm (e.g. HMAC-SHA256)"},"mac":{"type":"string","description":"Symmetric HMAC tag over {url, hash, timestamp} — not third-party verifiable"},"keyId":{"type":"string","description":"Identifier of the oracle key that produced the MAC"}}}},"responses":{"PaymentRequired":{"description":"Payment required — x402 v2 protocol. Parse the PAYMENT-REQUIRED response header (base64-encoded JSON), sign the payment with your wallet, then retry the request with the Payment-Signature request header.","content":{"application/json":{"schema":{"type":"object","description":"Body is empty {} on a 402 — payment requirements are in the PAYMENT-REQUIRED response header."}}},"headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded JSON with the x402 v2 payment requirements: { x402Version: 2, error, resource, accepts: [{ scheme, network, amount, asset, payTo, maxTimeoutSeconds, extra }] }","schema":{"type":"string"}},"PAYMENT-RESPONSE":{"description":"Base64-encoded settlement receipt (txHash, network) — returned on a successful response that delivers a paid resource.","schema":{"type":"string"}}}}},"securitySchemes":{"x402Payment":{"type":"apiKey","in":"header","name":"Payment-Signature","description":"x402 v2 payment payload (base64-encoded signed payment)"}}},"security":[{"x402Payment":[]}]}