AttestPage · Docs · Pricing · OpenAPI · llms.txt

Check every quote in a draft before you publish

Last updated: 2026-10-17

A quote that does not appear on its source page is the most common error in an AI-written draft. Before you publish, check each quote against the page it cites. AttestPage fetches the live page and answers exact, fuzzy or none for each quote, with the offsets and a signed receipt.

This guide gives the recipe, then one call with curl and jq against https://vehcdj664efetfrsolne5umanq.srv.us. A bare curl cannot sign a payment, so the paid call needs an x402 v2 client: the MCP server or an x402 client in code.

Recipe

  1. List the claims. Take every sentence in the draft that puts words in quotation marks and names a source. Keep the quote word for word, as written in the draft.
  2. Group by URL. Put all quotes that cite the same page together.
  3. Check each group once.
  1. Read the page verdict first. If page.content_kind is not real (for example bot_wall, js_shell or paywall), a none means we could not read the page. It does not mean the quote is wrong. Find another copy of the page or cite it differently.
  2. Decide each quote.
  1. Keep the receipt. Save the receipt next to the draft, so anyone can check later that the page said this on that day.

Do not publish a quote that you have not checked.

Price

US$0.01 per call for one quote, US$0.02 per call for up to 20 quotes on one page, paid in USDC with x402 v2 on Base mainnet (real USDC). No account, key or sign-up. A request that fails validation gets 400 before payment and is never charged. All prices: pricing.json.

1. Read the price from the payment offer

An empty body is refused before payment and is never charged. Read the offer it returns:

curl -si -X POST https://vehcdj664efetfrsolne5umanq.srv.us/v1/verify/quote \
  -H 'content-type: application/json' -d '{}' \
  | grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' | base64 -d \
  | jq '.accepts[0] | {scheme, network, amount, payTo}'

amount is in USDC base units (six decimal places), so it is the price above in base units.

2. Make the paid call

Send the quote with its URL. curl alone cannot sign the payment, so send the request through an x402 v2 client. The client reads the offer from step 1, signs it, and sends the same request again with a PAYMENT-SIGNATURE header:

cat > body.json <<'EOF'
{ "url": "https://www.iana.org/help/example-domains",
  "quote": "These domains may be used as illustrative examples in documents",
  "match": "fuzzy" }
EOF

curl -s -X POST https://vehcdj664efetfrsolne5umanq.srv.us/v1/verify/quote \
  -H 'content-type: application/json' \
  -H "PAYMENT-SIGNATURE: $PAYMENT_SIGNATURE" \
  -d @body.json | jq '{match: .result.match, score: .result.score, kind: .page.content_kind, advice}'

$PAYMENT_SIGNATURE is the signed payment that your x402 client produces. The answer is exact, fuzzy or none, with page.content_kind and a receipt. A request that fails validation gets 400 before payment and is never charged.

Notes