voidly
Voidly Pay · Signed Scrape

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 receipt

Why 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

Price10,000 micro-credits per call (= $0.01)
Max body size256 KB (truncation flagged in receipt)
Upstream timeout15 seconds
Methods allowedGET, HEAD, OPTIONS
Blockedprivate/loopback IPs, voidly.ai (no recursive fetch)
Receipt schemavoidly-pay-scrape/v1 — stable

Compare

 Voidly Pay ScrapeStripe agent-toolkitCoinbase x402ATXP
Signed-fetch primitive✓ native
Settles in< 200 ms~30 s polling< 1 s~1 s
Receipt verifiable offline
Backed byUSDC on Base (Sourcify-verified vault)card / SEPAUSDC on BaseUSDC on Base

Try it

Voidly Pay Scrape is the second flagship paid endpoint on the Voidly rail (after probe-attest). Both share the same vault, same DID primitive, same x402 settlement. We add new SKUs by appending to the marketplace — the rail itself doesn’t change.