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
/llms.txt: every route, its price and when to use it./.well-known/ai-catalog.json: the AI catalogue./openapi.json: request and response schemas for every route./.well-known/x402: the x402 discovery list, with the price and network of each route.
Prices per call in US$:
| Route | Price | Use it when |
|---|---|---|
POST /v1/verify/quote | US$0.01 | you are about to quote a web page as the source of a claim |
POST /v1/verify/quotes | US$0.02 | you hold several quotes from one page |
POST /v1/verify/citations | US$0.10 | you are about to answer with up to 10 cited pages |
POST /v1/verify/text-quote | US$0.005 | you already hold the text and need it matched |
POST /v1/verify/document | US$0.10 | you need a document checked against its source |
POST /v1/fetch | US$0.002 per URL | you need a web page as clean text |
POST /v1/recheck | US$0.003 | you need to know if a page you read earlier has changed |
POST /v1/check/links | US$0.005 | you are about to give a user links |
POST /v1/check/packages | US$0.005 | you are about to recommend or install a package |
POST /v1/attest | US$0.002 | you 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"
ATTESTPAGE_X402_KEYis the private key of the wallet that pays, and it stays in your process.- Leave
ATTESTPAGE_NETWORKunset and the script pays on Base mainnet, in real USDC. Check the amount before you run it.
Raw steps, if you are not using the script:
- Check that the offer's
networkiseip155:8453and thatamountis what you expect. - Sign the offer with your wallet.
- Send the same request again with the signed payment in the
PAYMENT-SIGNATUREheader.
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
- Worked examples for every route, with request, 402 and result: Worked examples.
- Error codes: the
error.codein each response. - Limits per route: Limits.
- Terms: Terms.