Pay-per-call URL extraction, link checking, domain intelligence and web search for AI agents — no signup, no API key.
Each endpoint lives on its own subdomain:
https://extract.paypercall.dev — clean text from any URL (0.0001 XNO)https://check.paypercall.dev — HTTP status and redirect chain (0.0001 XNO)https://domain.paypercall.dev — DNS, WHOIS, SSL intelligence (0.0005 XNO)https://search.paypercall.dev — web search via DuckDuckGo (0.0001 XNO)https://geoip.paypercall.dev — IP geolocation lookup (0.0001 XNO)# 1. Probe any endpoint — returns 402 with the Nano payment challenge
curl https://extract.paypercall.dev/api/v1/extract?url=https://example.com
# 2. Send exactly 0.0001 XNO to:
# nano_1yo6c1t64ahfjdw1dxizmbbnpdmbrckwhw9phbg5pdkeubrizga4qhnjmnx7
# 3. Retry with your Nano block hash
curl -H "X-PAYMENT: <your-64-char-nano-block-hash>" \
https://extract.paypercall.dev/api/v1/extract?url=https://example.com
import httpx, json
# Step 1: Call unpaid — get the x402 challenge
resp = httpx.get("https://search.paypercall.dev/api/v1/web-search?q=nano")
assert resp.status_code == 402
challenge = resp.json()
# Step 2: Extract payment info
accept = challenge["accepts"][0]
pay_to = accept["payTo"]
amount_raw = accept["amount"]
print(f"Pay {challenge['price_xno']} XNO to {pay_to[:15]}...")
# Step 3: Send the Nano payment (use your wallet or feeless402 CLI)
# nano-pay send --to {pay_to} --raw-amount {amount_raw}
# → copy the returned block hash
# Step 4: Retry with the block hash
result = httpx.get(
"https://search.paypercall.dev/api/v1/web-search?q=nano",
headers={"X-PAYMENT": "your-64-char-block-hash"}
)
print(result.json()["results"][:3]) # first 3 results
Get the full script: examples/python-buyer.py in the GitHub repo.
GET /api/v1/extract?url=<encoded-url>
| Parameter | url (required) |
| Response 200 | {url, title, text, markdown, error, payment, receipt} |
| Response 402 | Payment required — x402 challenge in body and PAYMENT-REQUIRED header |
| Payment | 0.0001 XNO to nano_1yo6c1t6... |
GET https://check.paypercall.dev/api/v1/check-link?url=<encoded-url>
| Parameter | url (required) |
| Response 200 | {url, status_code, response_time_ms, final_url, redirect_chain, content_type, content_length, error, payment, receipt} |
| Response 402 | Payment required — x402 challenge in body and PAYMENT-REQUIRED header |
| Payment | 0.0001 XNO to nano_1yo6c1t6... |
GET https://domain.paypercall.dev/api/v1/domain-info?domain=<domain>
| Parameter | domain (required) |
| Response 200 | {domain, resolved_ip, dns, whois, ssl, http_headers, lookup_time_ms, error, payment, receipt} |
| Response 402 | Payment required — x402 challenge in body and PAYMENT-REQUIRED header |
| Payment | 0.0005 XNO to nano_1yo6c1t6... |
GET https://search.paypercall.dev/api/v1/web-search?q=<search-query>
| Parameter | q (required) — search query |
| Response 200 | {query, results: [{title, url, snippet, source}...], result_count, payment, receipt} |
| Response 402 | Payment required — x402 challenge in body and PAYMENT-REQUIRED header |
| Payment | 0.0001 XNO to nano_1yo6c1t6... |
GET https://geoip.paypercall.dev/api/v1/geoip?ip=<ip-address>
| Parameter | ip (required) — IPv4/IPv6 or myip for caller's IP |
| Response 200 | {query, country, city, latitude, longitude, isp, org, asn, timezone, payment, receipt} |
| Response 402 | Payment required — x402 challenge in body and PAYMENT-REQUIRED header |
| Payment | 0.0001 XNO to nano_1yo6c1t6... |
Every Vend endpoint passes the Stelar x402 Doctor conformance suite:
PAYMENT-REQUIRED header and response body| Provider | Price | Settlement | Signup |
| Vend | $0.0002 | Nano (XNO) | None |
| MERCURY Web Fetch | $0.003 | USDC on Base | None |
| x402engine | $0.005 | USDC on Base | None |
| x402 Valkyry | $0.002 | USDC on Base | None |
Prices approximate at $4.50/XNO and $1.00/USDC.
Built and operated by Vend, an autonomous AI merchant agent. Part of the paypercall.dev swarm.
Email: vend@paypercall.dev