{"openapi":"3.1.0","info":{"title":"Vend API Merchant","version":"0.1.0","description":"Pay-per-call URL-to-clean-text extraction settled in Nano (XNO). No signup, no API keys. Submit a URL and get back clean text/markdown suitable for LLM consumption. Pay 0.0001 XNO per call via x402.","contact":{"email":"vend@paypercall.dev"},"x-guidance":"Use GET /api/v1/extract with a ?url= parameter to fetch and clean a web page. The endpoint returns 402 Payment Required with an x402 v2 challenge; pay the quoted Nano amount and retry with X-PAYMENT header containing the block hash."},"servers":[{"url":"https://extract.paypercall.dev","description":"URL Extraction API"},{"url":"https://check.paypercall.dev","description":"Link Checker API"},{"url":"https://domain.paypercall.dev","description":"Domain Intelligence API"},{"url":"https://search.paypercall.dev","description":"Web Search API"},{"url":"https://geoip.paypercall.dev","description":"IP Geolocation API"},{"url":"https://extract.paypercall.dev","description":"Nano Account Info API"},{"url":"https://extract.paypercall.dev","description":"YouTube Transcript API"},{"url":"https://extract.paypercall.dev","description":"PDF Text Extraction API"}],"paths":{"/.well-known/x402":{"get":{"operationId":"x402Manifest","summary":"x402 capability manifest","tags":["Discovery"],"responses":{"200":{"description":"x402 v2 capability manifest","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/agent-tools.json":{"get":{"operationId":"agentToolsManifest","summary":"Agent-tools.cloud discovery manifest","tags":["Discovery"],"responses":{"200":{"description":"Agent-tools discovery manifest","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/health":{"get":{"operationId":"health","summary":"Health check","tags":["System"],"responses":{"200":{"description":"Server is healthy","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string"},"service":{"type":"string"},"version":{"type":"string"}}}}}}}}},"/api/v1/extract":{"get":{"operationId":"extractUrl","summary":"Extract clean text from a URL","tags":["Extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","minLength":1,"description":"URL to extract clean text from"}}],"responses":{"200":{"description":"Successful extraction","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"title":{"type":"string"},"text":{"type":"string"},"markdown":{"type":"string"},"error":{"type":["string","null"]},"payment":{"type":"object","properties":{"amount_xno":{"type":"string"},"block_hash":{"type":"string"},"source":{"type":"string"}}},"receipt":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/api/v1/check-link":{"get":{"operationId":"checkLink","summary":"Check HTTP status of a URL","tags":["Utility"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","minLength":1,"description":"URL to check"}}],"responses":{"200":{"description":"Successful link check","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"status_code":{"type":"integer"},"response_time_ms":{"type":"integer"},"final_url":{"type":"string"},"redirect_chain":{"type":"array"},"content_type":{"type":"string"},"content_length":{"type":"string"},"error":{"type":["string","null"]},"payment":{"type":"object","properties":{"amount_xno":{"type":"string"},"block_hash":{"type":"string"},"source":{"type":"string"}}},"receipt":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/api/v1/batch-status":{"get":{"operationId":"batchStatus","summary":"Batch check HTTP status of up to 50 URLs in one call","description":"Batch check HTTP status of up to 50 URLs in one call. Accepts ?urls=url1,url2,... . Returns each URL's status_code, response_time_ms, final_url and error. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/select":{"get":{"operationId":"select","summary":"CSS-selector structured extraction","description":"CSS-selector structured extraction. Accepts ?url= and ?selector= (e.g. h1, .price, table tr), optional ?attr= to read an attribute and ?limit=. Returns the matching elements' text/attributes, capped. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","description":"Public URL to extract from"}},{"name":"selector","in":"query","required":true,"schema":{"type":"string","description":"CSS selector (e.g. h1, .price, table tr)"}},{"name":"attr","in":"query","required":false,"schema":{"type":"string","description":"Optional attribute to read instead of text (e.g. href, src)"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"description":"Max matches to return (default 50, cap 200)"}}]}},"/api/v1/links":{"get":{"operationId":"links","summary":"Link extractor","description":"Link extractor. Accepts ?url= and optional ?limit=. Returns every anchor link on the page as structured JSON: href, visible text, absolute URL, external flag, target and rel — for crawling, outbound-link audits and site maps. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/meta":{"get":{"operationId":"meta","summary":"Page metadata extractor","description":"Page metadata extractor. Accepts ?url=. Returns title, meta description, Open Graph, Twitter Card, canonical URL, favicon and any JSON-LD blocks — for unfurling links into preview cards or reading structured data. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/table":{"get":{"operationId":"table","summary":"HTML table extractor","description":"HTML table extractor. Accepts ?url=. Returns the page's tables as structured JSON: headers and rows keyed by column — for pulling comparison tables, price lists, schedules or statistics. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/status":{"get":{"operationId":"urlStatus","summary":"URL status, redirects, TLS expiry and content drift","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"description":"URL to check (http:// or https://)"},{"name":"previous_hash","in":"query","required":false,"schema":{"type":"string"},"description":"sha256 of the body from an earlier call, to detect content drift"}],"responses":{"200":{"description":"Successful URL status check"},"402":{"description":"Payment Required"}}}},"/api/v1/domain-info":{"get":{"operationId":"domainInfo","summary":"Full domain intelligence: DNS, WHOIS, SSL","tags":["Data"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000500"},"protocols":[{"x402":{}}]},"parameters":[{"name":"domain","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Domain name to look up (e.g. example.com)"}}],"responses":{"200":{"description":"Successful domain info response","content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"},"resolved_ip":{"type":"string"},"dns":{"type":"object"},"whois":{"type":"object"},"ssl":{"type":"object"},"http_headers":{"type":"object"},"lookup_time_ms":{"type":"integer"},"error":{"type":["string","null"]},"payment":{"type":"object","properties":{"amount_xno":{"type":"string"},"block_hash":{"type":"string"},"source":{"type":"string"}}},"receipt":{"type":"string"}}}}}},"402":{"description":"Payment Required"}}}},"/api/v1/web-search":{"get":{"operationId":"webSearch","summary":"Web search via DuckDuckGo","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Search query"}],"responses":{"200":{"description":"Search results"},"402":{"description":"Payment Required"}}}},"/api/v1/geoip":{"get":{"operationId":"geoip","summary":"IP geolocation lookup","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"parameters":[{"name":"ip","in":"query","required":true,"schema":{"type":"string"},"description":"IP address to look up (or 'myip' for caller's IP)"}],"responses":{"200":{"description":"Successful geolocation lookup"},"402":{"description":"Payment Required"}}}},"/api/v1/ai-jobs":{"get":{"operationId":"aiJobs","summary":"Search 19,800+ live AI/AI-adjacent job postings","description":"Search 19,800+ live AI/AI-adjacent job postings. Accepts ?q=<text>&company=<c>&category=<cat>&region=<reg>&level=<lvl>&remote=1&limit=<n>&offset=<n>. Returns clean structured jobs for labor-market research, lead-gen and competitor intelligence. 0.0002 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000200"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Full-text search term (e.g. a company, role or keyword)"}},{"name":"company","in":"query","required":false,"schema":{"type":"string","description":"Filter by company name"}},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category (Engineering, Research, Sales & GTM, ...)"}},{"name":"region","in":"query","required":false,"schema":{"type":"string","description":"Filter by region (US, Europe, Asia-Pacific, ...)"}},{"name":"level","in":"query","required":false,"schema":{"type":"string","description":"Filter by seniority level (Lead+, Mid, Senior, ...)"}},{"name":"remote","in":"query","required":false,"schema":{"type":"string","description":"Set to 1/true to return only remote roles"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Max jobs to return (default 10, cap 50)"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Pagination offset (default 0)"}}]}},"/api/v1/wiki-summary":{"get":{"operationId":"wikiSummary","summary":"Wikipedia entity summary — clean one-paragraph profile for any topic (company, person, technology)","description":"Wikipedia entity summary — clean one-paragraph profile for any topic (company, person, technology). Accepts ?q=<topic>. Returns title, description, extract, thumbnail, wikidata_id. Reliable English Wikipedia REST endpoint. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/arxiv-paper":{"get":{"operationId":"arxivPaper","summary":"arXiv paper metadata — clean JSON for any paper by arXiv ID or search query: title, authors, primary category, abstract, published date, DO…","description":"arXiv paper metadata — clean JSON for any paper by arXiv ID or search query: title, authors, primary category, abstract, published date, DOI, PDF link. Accepts ?arxiv_id=<id> or ?query=<terms>. Reliable keyless export.arxiv.org Atom API. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/hn-news":{"get":{"operationId":"hnNews","summary":"Hacker News top/new/best/ask/show/job feed — clean bounded JSON for tech-trend research, content monitoring, and curation agents","description":"Hacker News top/new/best/ask/show/job feed — clean bounded JSON for tech-trend research, content monitoring, and curation agents. Accepts ?list=<top|new|best|ask|show|job>&limit=<n>&score=<min>. Reliable keyless HN Firebase API. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"list","in":"query","required":false,"schema":{"type":"string","description":"HN feed: top|new|best|ask|show|job"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Max stories to return (default 10, cap 30)"}},{"name":"score","in":"query","required":false,"schema":{"type":"integer","description":"Optional minimum score filter"}}]}},"/api/v1/address-verdict":{"get":{"operationId":"addressVerdict","summary":"Nano on-chain address verdict — is this payTo address a real active valuable counterparty or dust/wash? Accepts ?account=nano_","description":"Nano on-chain address verdict — is this payTo address a real active valuable counterparty or dust/wash? Accepts ?account=nano_.... Returns label (high_value/active/dust/wash_likely/inactive/not_found) plus signals (balance, receivable, block_count, send/receive counts, distinct senders, total received, largest inflow, account age, activity). Computed from public Nano RPC on-ledger data only. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"account","in":"query","required":true,"schema":{"type":"string","description":"Nano address (nano_ or xrb_ prefix) to classify"}}]}},"/api/v1/nano-info":{"get":{"operationId":"nanoInfo","summary":"Nano account intelligence","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000500"},"protocols":[{"x402":{}}]},"parameters":[{"name":"account","in":"query","required":true,"schema":{"type":"string"},"description":"Nano account address to look up (nano_...)"}],"responses":{"200":{"description":"Successful Nano account info lookup"},"402":{"description":"Payment Required"}}}},"/api/v1/youtube-transcript":{"get":{"operationId":"youtubeTranscript","summary":"Extract captions/transcript from a YouTube video","x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000500"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string"},"description":"YouTube video URL to extract a transcript from"},{"name":"language","in":"query","required":false,"schema":{"type":"string"},"description":"Language code for captions (default: en)"}],"responses":{"200":{"description":"Successful transcript extraction"},"402":{"description":"Payment Required"}}}},"/api/v1/screenshot":{"get":{"operationId":"screenshot","summary":"Capture a screenshot of any public URL using headless browser rendering","description":"Capture a screenshot of any public URL using headless browser rendering. Accepts ?url=, ?format=png|jpeg, ?full_page=true|false, ?width=, ?height=. Returns base64 image data URL. 0.0005 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000500"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/render":{"get":{"operationId":"render","summary":"Render a JavaScript-heavy page in a real browser and return its content as Markdown","description":"Render a JavaScript-heavy page in a real browser and return its content as Markdown. Accepts ?url= and optional ?max_chars=. For SPA/dashboard pages where a plain fetch returns an empty shell. 0.0005 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000500"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}},"/api/v1/pdf-extract":{"get":{"operationId":"pdfExtract","summary":"Extract text from a PDF at a URL","tags":["Extraction"],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000500"},"protocols":[{"x402":{}}]},"parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","format":"uri","minLength":1,"description":"URL of a PDF to extract text from"}}],"responses":{"200":{"description":"Successful PDF text extraction (title, page_count, page-structured text)"},"402":{"description":"Payment Required"}}}},"/api/v1/mcp-find":{"get":{"operationId":"mcpFind","summary":"Search paid MCP/x402 service directories for a task","description":"Search paid MCP/x402 service directories for a task. Accepts ?q= and optional ?limit= and ?filter_rail=nano. Returns matching services with settlement rails, prices, and x402 health. 0.0001 XNO per call.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","description":"Natural-language query — what the MCP/x402 service does"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Max results to return (1-50), default 10"}},{"name":"filter_rail","in":"query","required":false,"schema":{"type":"string","description":"Rail filter — e.g. 'nano' to show only XNO-settling services"}}]}},"/api/v1/balance/top-up":{"post":{"operationId":"postBalanceTopUp","summary":"Fund prepaid balance from Nano send to treasury","description":"Fund prepaid balance from Nano send to treasury. Requires X-PAYMENT header. Credits full send amount to sender's balance.","tags":["Paid"],"servers":[{"url":"https://extract.paypercall.dev"}],"x-payment-info":{"price":{"mode":"fixed","currency":"USD","amount":"0.000100"},"protocols":[{"x402":{}}]},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object"}}}},"402":{"description":"Payment Required"}}}}},"x-discovery":{"ownershipProofs":[]}}