Pay 1¢.
Fetch a URL.
Get a Voidly-signed receipt.
One paid endpoint that solves four AI-agent pain points: hallucinated citations, missing audit trails, IP rate limits, paywalled doc retrieval. Each call returns the response body plus an Ed25519 receipt that cryptographically binds the URL, timestamp, HTTP status, and SHA-256 of the body. Anyone with the Voidly facilitator public key can verify it without trusting the agent that fetched it.
The interface
GET https://api.voidly.ai/v1/pay/scrape?url=<urlencoded-url>
# Behavior
# first call → HTTP 402 with a facilitator-signed quote
# pay it → transfer 0.01 credit + sign the envelope
# retry with X-Payment header → 200 + body + signed receiptWhy it exists
Stripe’s agent-toolkit, Coinbase’s x402 facilitator, and ATXP all do payment routing. None of them ship a signed-citation primitive. AI agents that fetch URLs today have no way to prove they actually fetched them — and humans reading those reports have no way to verify. Voidly Pay Scrape fills that gap with one HTTP call.
- AI fact-checking: “at 16:08 UTC the agent fetched
example.com, status 200, body hashfb91d7…” — verifiable by anyone. - Audit trails for AI reports: attach the receipt alongside every claim, no “trust me bro” LLM citations.
- IP rate-limit bypass: Voidly’s edge does the fetch. Your scraper IP stays clean.
- Paywalled / login-walled docs: drive evidence retrieval through a paid hop your scraper IP can’t reach.
- Compliance: legal/regulatory proof of evidence retrieval, signed by an external trust root.
End-to-end (curl + sign)
# 1) Get a 402 challenge
curl -sI 'https://api.voidly.ai/v1/pay/scrape?url=https%3A%2F%2Fexample.com'
# → HTTP/2 402
# → www-authenticate: x402 realm="voidly-pay", quote_id="…"
# → x-voidly-pay-url: https://api.voidly.ai/v1/pay/x402/quote/…
# 2) Pay the quote (any x402 client). The Voidly Pay SDK is one line:
import { VoidlyPay } from '@voidly/pay'
const pay = await VoidlyPay.create({ baseUrl: 'https://api.voidly.ai' })
await pay.faucet() // claim 10 starter credits
const r = await pay.fetchWithPay(
'https://api.voidly.ai/v1/pay/scrape?url=https%3A%2F%2Fexample.com'
)
const receipt = await r.json()
# 3) The receipt
{
"schema": "voidly-pay-scrape/v1",
"url": "https://example.com/",
"fetched_at": "2026-05-02T16:08:23.265Z",
"http_status": 200,
"response_size_bytes": 528,
"body_sha256_hex": "fb91d75a6bb430787a61b0aec5e374f580030f2878e1613eab5ca6310f7bbb9a",
"body_b64": "PCFkb2N0eXBlIGh0bWw…",
"body_text": "<!doctype html>…",
"paid_by_did": "did:voidly:GjZUVWdkjSB2yuiMPgjLy9",
"paid_to_did": "did:voidly:PBcsB2avN4ZfDC5yvEwBBT",
"transfer_id": "4fb2e549-2329-4c91-93a8-fad94f19956d",
"quote_id": "f1fd6039-c46f-4419-821f-3ca7d98a5c3b",
"receipt_id": "a3a9b814-6307-4df2-be13-073c34f84fb7",
"signature": "Sa+J4e094DO3UsTdAQ5F6uRMlpmyia3ChJVe9RN8MhI…",
"signature_alg": "ed25519",
"signed_by_did": "did:voidly:PBcsB2avN4ZfDC5yvEwBBT"
}Verify a receipt
The signed payload is the canonicalized JSON of the receipt with body_b64 and body_text stripped (the SHA-256 already binds those). Anyone can verify it with the Voidly Pay facilitator public key:
# 1) Get the public key
curl -s https://api.voidly.ai/v1/pay/x402/facilitator-key
# 2) Verify (any Ed25519 lib)
import nacl from "tweetnacl"
const { signature, signature_alg, body_b64, body_text, ...rest } = receipt
const ok = nacl.sign.detached.verify(
encode(canonicalize(rest)),
Buffer.from(signature, "base64"),
Buffer.from(facilitatorPubkeyBase64, "base64")
)Pricing & caps
| Price | 10,000 micro-credits per call (= $0.01) |
| Max body size | 256 KB (truncation flagged in receipt) |
| Upstream timeout | 15 seconds |
| Methods allowed | GET, HEAD, OPTIONS |
| Blocked | private/loopback IPs, voidly.ai (no recursive fetch) |
| Receipt schema | voidly-pay-scrape/v1 — stable |
Compare
| Voidly Pay Scrape | Stripe agent-toolkit | Coinbase x402 | ATXP | |
|---|---|---|---|---|
| Signed-fetch primitive | ✓ native | — | — | — |
| Settles in | < 200 ms | ~30 s polling | < 1 s | ~1 s |
| Receipt verifiable offline | ✓ | — | — | — |
| Backed by | USDC on Base (Sourcify-verified vault) | card / SEPA | USDC on Base | USDC on Base |
Try it
- Claim a DID + 10 starter credits (browser-only Ed25519, no install).
- Read the live discovery doc at /v1/pay/scrape/info.
- Browse all paid endpoints on the marketplace.
- Need an unsigned/free fetch? That’s not what this is. Use any HTTP client. The receipt is the product.