Scrooge Tool Mill
Pay-per-call JSON APIs for agents. No API keys. Call → get 402 → pay USDC via x402 → get structured page data.
eip155:8453) in USDC — not Sepolia.POST /v1/page-meta · $0.02 USDC
Title, description, canonical, OG, language, excerpt. Network eip155:8453 · pay to 0xfE2353C808F2409cCb81508005A62cef29457706. Free sample: GET /start. Agent start: GET /agent-start.json. Unpaid 402s: GET /stats (durable KV counter; zeros only if no store). Bazaar: unpaid 402 includes extensions.bazaar so Coinbase can index after one paid settle.
1) Probe (expect HTTP 402)
curl -sS -i -X POST https://scrooge-x402-tool-mill.vercel.app/v1/page-meta \
-H 'content-type: application/json' \
-d '{"url":"https://example.com"}'
2) Pay with @x402/fetch (Base mainnet USDC)
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.PRIVATE_KEY);
const fetchPaid = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await fetchPaid("https://scrooge-x402-tool-mill.vercel.app/v1/page-meta", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({ url: "https://example.com" }),
});
// HTTP 200 → { url, title, description, ... }
Expected 200 shape: { url, title?, description?, canonical?, og?, language?, excerpt? } (fields present when the page exposes them).
Network: Base mainnet (eip155:8453) · Scheme: exact
Pay to:
0xfE2353C808F2409cCb81508005A62cef29457706
Also available
Readable text $0.05 USDC
Main article text. Optional maxChars (cap 12000).
Link graph $0.03 USDC
Outbound {href,text?} (max 50).
Change fingerprint $0.04 USDC
etag, lastModified, sha256 contentHash, byteLength, fetchedAt.
Batch meta $0.15 USDC
Up to 10 URLs → {results:[{url,ok,meta|error}]}.
PAYMENT-REQUIRED. Sign with @x402/fetch, retry with PAYMENT-SIGNATURE.Machine-readable catalog
GET /.well-known/l402-services (canonical) · GET /.well-known/x402-services · GET /openapi-x402.json. Thin GET on paid paths returns the same 402 challenge; POST is the workhorse.