Back to Discover

weblens

connector

vasilistotskas

Scrape, crawl, map and extract the web. Pay per call in USDC, no account or API key.

View on GitHub
0 starsSynced Aug 4, 2026

Install to Claude Code

/plugin marketplace add vasilistotskas/weblens

README

WebLens

Premium web intelligence API for AI agents, with x402 micropayments. No accounts, no API keys — pay per request in USDC on Base.

🌐 Live API: https://api.weblens.dev šŸ“– Interactive docs: https://api.weblens.dev/docs šŸ¤– Agent guide: https://api.weblens.dev/llms.txt šŸ”Ž Marketplace: listed on x402scan

Try it free, right now

No wallet, no signup — these are rate limited to 10 requests/hour per IP:

curl https://api.weblens.dev/r/https://example.com     # any page as markdown
curl https://api.weblens.dev/s/cloudflare+workers      # web search

Preview before you pay (free)

An agent shouldn't have to buy a call to learn what it returns. POST /preview is free and answers that up front — the live price, a one-line summary, and a real sample of the exact response shape:

curl -X POST https://api.weblens.dev/preview \
  -H "Content-Type: application/json" \
  -d '{"endpoint": "/answer"}'
{
  "endpoint": "/answer",
  "price": "$0.05",
  "currency": "USD",
  "summary": "A direct answer with inline [n] citations to real sources.",
  "sample": { "query": "...", "answer": "...", "citations": [], "confidence": 0.92 },
  "sampleType": "recorded",
  "livePreviewAvailable": false,
  "livePreviewHint": "This endpoint calls a paid upstream provider, so free live previews are not offered — the recorded sample shows the exact response shape."
}

Live vs recorded. A real, truncated live preview runs only for endpoints whose marginal cost is a plain fetch — currently /fetch/basic, /contents and /map — and only when you pass a url. Everything else is backed by a metered upstream (SerpAPI, Anthropic); running those free would burn upstream credits, so they return the recorded sample, which still shows every field name and type. An endpoint that isn't sold returns 404.

# live: the first 500 chars of the real result, for free
curl -X POST https://api.weblens.dev/preview \
  -H "Content-Type: application/json" \
  -d '{"endpoint": "/fetch/basic", "url": "https://example.com"}'

Rate limited to 10 requests/hour per IP like the rest of the free tier.

ERC-8004: receipts and feedback

ERC-8004 (Trustless Agents) keeps compact signals on-chain and the detailed documents off-chain. WebLens hosts the off-chain half — the part a service operator can run without deploying a contract. To be precise about what that is and isn't: WebLens is not registered on-chain, holds no agent id, and writes nothing to any registry.

EndpointWhat it gives you
GET /.well-known/agent-registration.jsonThe ERC-8004 registration document: name, description, image, services, x402Support, payment info, feedback endpoints. registrations is empty (no on-chain registration) and supportedTrust is ["feedback"].
GET /receipts/{requestId}The receipt for a paid call — endpoint, status, outcome, price, payment method, network, pay-to. Every paid response returns X-Receipt-Id and X-Receipt-Url headers pointing here. Kept 30 days.
POST /feedbackHost a feedback document you author; returns {feedbackURI, feedbackHash} (keccak-256), the pair giveFeedback() expects. Required fields: agentRegistry, agentId, clientAddress, createdAt, value, valueDecimals — a missing one returns 400 naming it.
GET /feedback/{id}Serves that document byte-for-byte, so its keccak-256 hash matches the feedbackHash you were given. This URL is the feedbackURI.

Two more things worth stating plainly:

  • A receipt's mac is a symmetric HMAC tag (the same construction as proof-of-context). Only a holder of the key can verify it — it is not a third-party-verifiable signature, and nothing here is trustless.
  • The buyer authors the feedback document and posts giveFeedback() themselves. WebLens only hosts the document verbatim and returns its hash; it never authors, edits, or submits feedback.

Endpoints

All paid endpoints are POST with a JSON body. Prices are per request in USDC.

Core

EndpointDescriptionPrice
/fetch/basicFetch a webpage as clean markdown$0.002
/fetch/proFetch with full JavaScript rendering (SPAs)$0.006
/fetch/resilientAuto-fallback: native scraper → headless Chromium$0.008
/contentsBulk page text for 1–20 URLs$0.0015/URL
/screenshotCapture a webpage screenshot (PNG)$0.008
/batch/fetchFetch 2–20 URLs in parallel$0.0015/URL
/mapDiscover a site's URLs (sitemaps + links, no page fetches)$0.004
/domainRegistration + DNS + SaaS stack + risk signals for a domain$0.005
/techDetect a site's framework, CMS, CDN, analytics and payments stack$0.005
/packagenpm/PyPI package health: deprecation, downloads, maintenance$0.003
/discussionsHacker News stories on a topic, with aggregates$0.004
/crawlBounded whole-site crawl → markdown per page$0.0015/page

Search

EndpointDescriptionPrice
/searchReal-time web search (includeContent adds page markdown, +$0.0015/result)$0.015
/search/newsGoogle News articles with source and date$0.015
/search/imagesImage results with dimensions and source pages$0.015
/search/placesLocal businesses: address, rating, phone, coordinates$0.045
/search/shoppingProducts with prices, sellers, ratings$0.015
/search/scholarAcademic papers with citation counts$0.015
/search/autocompleteQuery suggestions (keyword/intent research)$0.015
/search/trendsInterest-over-time timeline$0.015

Social

EndpointDescriptionPrice
/social/youtube/transcriptFull video transcript with timestamps$0.03

Extraction & research

EndpointDescriptionPrice
/extractStructured extraction against a JSON schema$0.03
/extract/smartNatural-language extraction (no schema needed)$0.035
/pdfExtract text and metadata from a PDF$0.004
/answerGrounded answer with inline [n] citations$0.05
/researchSearch + fetch + AI summary with sources$0.08
/research/deepMulti-step cited research: sub-questions → search each → answer with inline [n] citations$0.20–$0.35
/compareCompare 2–3 webpages with AI analysis$0.05

/research/deep is the only long-running endpoint: it plans sub-questions, runs a web search per sub-question, fetches and dedupes the sources, then synthesizes a cited answer — all in one synchronous call. A standard run (3 sub-questions, 8 sources, $0.20) takes roughly 30–60 seconds; deep (5 sub-questions, 12 sources, $0.35) takes longer. Set a generous HTTP timeout (120s+) and don't retry on a client timeout, or you'll pay twice.

Intelligence

EndpointDescriptionPrice
/intel/site-auditSEO / performance / security audit$0.75
/intel/companyCompany deep dive$1.00
/intel/marketMarket research report$5.00
/intel/competitiveCompetitive analysis with SWOT$8.00

Utility

EndpointDescriptionPrice
/memory/setPersistent key-value storage for agents$0.001
/monitor/createURL change monitor with webhooks$0.01 + $0.001/check
/credits/buyPrepay credits (bonus 20–40% at $10/$50/$100)$2–$1000

Free and unauthenticated: /, /health, /docs, /openapi.json, /llms.txt, /discovery, /.well-known/x402, /mcp, /r/{url}, /s/{query}, /free/fetch, /free/search, /preview, /.well-known/agent-registration.json, /receipts/{requestId}, /feedback, /feedback/{id}.

Dynamically-priced endpoints (/fetch/pro, /extract) apply a complexity multiplier — up to 3Ɨ for bot-protected domains. Cached responses on the fetch family are 70% cheaper. The exact price is always in the 402 challenge.

Use with AI agents (MCP)

Remote HTTP — nothing to install:

{ "mcpServers": { "weblens": { "url": "https://api.weblens.dev/mcp" } } }

Local with automatic payment:

{
  "mcpServers": {
    "weblens": {
      "command": "npx",
      "args": ["-y", "@weblens/mcp"],
      "env": { "PRIVATE_KEY": "0xYourPrivateKeyHere" }
    }
  }
}

See mcp-server/README.md for the full tool list and setup.

API usage

# Fetch a page as markdown
curl -X POST https://api.weblens.dev/fetch/basic \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

# Search, with page content included
curl -X POST https://api.weblens.dev/search \
  -H "Content-Type: application/json" \
  -d '{"query": "latest AI news", "limit": 5, "includeContent": true}'

# Structured extraction
curl -X POST https://api.weblens.dev/extract \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/product",
       "schema": {"title": {"type": "string"}, "price": {"type": "number"}},
       "instructions": "Extract the product title and price"}'

# Crawl a site (pay for the page budget you request)
curl -X POST https://api.weblens.dev/crawl \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "limit": 10, "maxDepth": 2}'

# Deep research with inline citations (slow — 30-60s, so raise the client timeout)
curl --max-time 120 -X POST https://api.weblens.dev/research/deep \
  -H "Content-Type: application/json" \
  -d '{"query": "How are AI agents using micropayments in 2026?", "depth": "standard"}'

Each returns 402 Payment Required with the price until you attach payment — see below.

How payments work

WebLens implements x402 v2:

  1. POST any paid endpoint with no payment.
  2. Get 402 Payment Required with a PAYMENT-REQUIRED header carrying the price, network, asset, and pay-to address.
  3. Sign a USDC transfer authorization with your wallet.
  4. Retry the same request with a Payment-Signature header.
  5. The payment is verified on-chain and you get your data.

Settlement runs through the PayAI facilitator on Base mainnet. Any x402 v2 client works — @x402/axios, @x402/fetch, or the bundled MCP server, which handles the whole flow for you.

Prepaid credits are an alternative to per-request payment: buy credits with /credits/buy, then send X-CREDIT-WALLET / X-CREDIT-SIGNATURE / X-CREDIT-TIMESTAMP headers. Failed requests are refunded automatically.

Development

pnpm install
pnpm run dev          # local dev server on :8787
pnpm run build        # tsc --noEmit (type check)
pnpm run lint         # eslint
pnpm run test         # vitest (unit + property + workerd integration)
pnpm run deploy       # wrangler deploy (production)

Secrets are set with wrangler, never committed:

wrangler secret put SERP_API_KEY        # search + all verticals + transcripts
wrangler secret put ANTHROPIC_API_KEY   # AI extraction, research, answers, intel
wrangler secret put CDP_API_KEY_ID      # optional: CDP facilitator fallback
wrangler secret put CDP_API_KEY_SECRET
VariablePurpose
PAY_TO_ADDRESSWallet that receives payments (wrangler.toml var)
NETWORKbase (production) or base-sepolia (testnet)
SERP_API_KEYSerpAPI key — search, verticals, YouTube transcripts
ANTHROPIC_API_KEYClaude — extraction, research, answers, intel
SIGNING_PRIVATE_KEYOptional: HMAC key for proof-of-context tags
PAYAI_FACILITATOR_URLOptional: override the facilitator endpoint

Testing against testnet

wrangler dev --env testnet          # Base Sepolia, fake USDC
API_URL=http://localhost:8787 PRIVATE_KEY=0x... npx tsx scripts/test-payment-testnet.ts

Get free testnet USDC from the Circle faucet on Base Sepolia.

Discovery

pnpm run verify-bazaar    # check the x402 discovery extension on every route

/openapi.json doubles as the discovery document for x402scan — it carries info.x-guidance, per-operation x-payment-info, and security: [] on free operations. WebLens is listed on x402scan and indexed in the PayAI facilitator catalog.

Note on the Coinbase CDP Bazaar: it only indexes services whose payments the CDP facilitator itself settles. WebLens uses PayAI as its primary facilitator (CDP has an open Base-mainnet settlement bug, x402#1065), so it does not appear there.

Tech stack

  • Cloudflare Workers — edge runtime, Durable Objects, KV, Browser Rendering
  • Hono — web framework
  • x402 — HTTP-native micropayments
  • Zod — request validation
  • Vitest + fast-check — unit, property, and real-workerd integration tests

Links

License

MIT

Rendered live from vasilistotskas/weblens's GitHub README — not stored, always reflects the source repo.

1 Install Method

NameDescriptionCategorySource
streamable-http remoteHosted streamable-http endpointmcp-serverhttps://api.weblens.dev/mcp

0 Comments

Login required
Log in to post a comment or update on this repo.

No comments yet — be the first to share an update.