AttestPage · Docs · Pricing · OpenAPI · llms.txt

AttestPage quickstart: from discovery to your first paid call

Last updated: 2026-10-17

This takes about a minute. Every route is a plain HTTPS POST with JSON. You pay per call in USDC over x402 v2, so there is no account and no API key.

1. Discover

Read the catalogue, then pick a route:

curl -s https://s2h6qt73jtzlgbgnnfacln2poq.srv.us/llms.txt
curl -s https://s2h6qt73jtzlgbgnnfacln2poq.srv.us/.well-known/ai-catalog.json
curl -s https://s2h6qt73jtzlgbgnnfacln2poq.srv.us/openapi.json
curl -s https://s2h6qt73jtzlgbgnnfacln2poq.srv.us/.well-known/x402

Prices per call in US$:

RoutePriceUse it when
POST /v1/verify/quoteUS$0.01you are about to quote a web page as the source of a claim
POST /v1/verify/quotesUS$0.02you hold several quotes from one page
POST /v1/verify/citationsUS$0.10you are about to answer with up to 10 cited pages
POST /v1/verify/text-quoteUS$0.005you already hold the text and need it matched
POST /v1/verify/documentUS$0.10you need a document checked against its source
POST /v1/fetchUS$0.002 per URLyou need a web page as clean text
POST /v1/recheckUS$0.003you need to know if a page you read earlier has changed
POST /v1/check/linksUS$0.005you are about to give a user links
POST /v1/check/packagesUS$0.005you are about to recommend or install a package
POST /v1/attestUS$0.002you need a signed, timestamped receipt that a file or answer existed unchanged

Source: pricing.json. The route prices in this table are the same as the 402 offer.

2. Free samples (optional)

The free trial is off at the moment, so every call needs payment (step 3). The sample calls on the samples page need none.

3. Receive the 402

Send the request with no payment:

curl -i -X POST https://s2h6qt73jtzlgbgnnfacln2poq.srv.us/v1/verify/quote \
  -H 'content-type: application/json' \
  -d '{"url":"https://www.iana.org/help/example-domains","quote":"These domains may be used as illustrative examples in documents","match":"fuzzy"}'

The answer is 402 Payment Required, with error code payment_required, and the offer in the PAYMENT-REQUIRED header. Decode it to read the accepts entry. For verify/quote it lists amount 10000, which is US$0.01 (USDC has 6 decimals). A request with an empty body gets the same 402, so you can read a price before you have real input.

A request that fails validation gets 400 before any payment is asked for, and it is never charged.

4. Pay

Use an x402 v2 client. The plain-fetch script in the plain-fetch example does the offer check, the signature and the retry in one script. Install its packages first, then run it against the service:

ATTESTPAGE_URL=https://s2h6qt73jtzlgbgnnfacln2poq.srv.us \
ATTESTPAGE_X402_KEY=0x... \
node fetch-x402.mjs https://www.iana.org/help/example-domains "These domains may be used as illustrative examples in documents"

Raw steps, if you are not using the script:

  1. Check that the offer's network is eip155:8453 and that amount is what you expect.
  2. Sign the offer with your wallet.
  3. Send the same request again with the signed payment in the PAYMENT-SIGNATURE header.

5. Retry and read the result

The paid retry returns 200. The PAYMENT-RESPONSE header carries the transaction, the payer and the network. The body carries the result and a signed receipt, shortened here:

{
  "result": { "match": "exact", "score": 1, "start": 171, "end": 234, "occurrences": 1 },
  "page": { "http_status": 200, "content_kind": "real", "title": "Example Domains" },
  "advice": "The page loaded and looks like real content.",
  "receipt": "<signed receipt>", "receipt_id": "9fcda5ac…", "tier": "paid", "rail": "x402", "network": "eip155:8453"
}

Check the receipt again at no charge:

curl -s -X POST https://s2h6qt73jtzlgbgnnfacln2poq.srv.us/v1/receipt/verify \
  -H 'content-type: application/json' \
  -d '{"receipt":"<signed receipt>"}'

Next steps