Developer quickstart
One URL.
One paid response.
Individual tools 0.01 USDC; page-audit 0.25; site-audit 1.00. Single-page tools accept a url field. The site audit accepts a urls array.
Buy one page audit: 0.25 USDC
This is a developer purchase flow using Node 24+ and a dedicated wallet already funded with USDC on Base mainnet. For one page, you can also use the browser wallet checkout with a supported browser wallet. You receive AEO evidence, SEO checks, readability measurements and a Markdown report. Read the free fixed sample first.
Current deployment network: eip155:8453. Configured recipient: 0xCBA2f3E55B05894EA8787779cc942cE02Cc64E4C. Before buying, compare this recipient with an independently trusted merchant listing or confirmation. Matching this page to its own quote alone is not independent verification. The buyer checks that its quote uses your selected recipient, Base USDC and exactly 0.25 USDC.
1. Create a private working folder and get a free quote
Run one of these blocks from a private folder outside any public repository or shared/synced directory. Use a new folder for each intended purchase. Inspect the downloaded script before using a key. The quote command needs no key, signs nothing and makes no payment. Confirm the URL, amount, network and recipient in its output.
macOS / Linux — POSIX shell
umask 077 mkdir agentpage402-audit cd agentpage402-audit npm init -y npm install --save-exact @x402/core@2.28.0 @x402/evm@2.28.0 viem@2.57.7 curl --fail --location --output buyer-example.mjs 'https://agentpage402-demo.onrender.com/buyer-example.mjs' # Replace this with the public page you want to inspect. export BUYER_URL='https://example.com/' export BUYER_SERVICE='page-audit' export BUYER_MAX_USDC='0.25' # Confirm the recipient independently before using --buy. export BUYER_PAY_TO='0xCBA2f3E55B05894EA8787779cc942cE02Cc64E4C' node buyer-example.mjs --quote
Windows — PowerShell
New-Item -ItemType Directory -Path agentpage402-audit -ErrorAction Stop Set-Location -LiteralPath agentpage402-audit npm init -y npm install --save-exact @x402/core@2.28.0 @x402/evm@2.28.0 viem@2.57.7 Invoke-WebRequest -Uri 'https://agentpage402-demo.onrender.com/buyer-example.mjs' -OutFile buyer-example.mjs # Replace this with the public page you want to inspect. $env:BUYER_URL = 'https://example.com/' $env:BUYER_SERVICE = 'page-audit' $env:BUYER_MAX_USDC = '0.25' # Confirm the recipient independently before using --buy. $env:BUYER_PAY_TO = '0xCBA2f3E55B05894EA8787779cc942cE02Cc64E4C' node buyer-example.mjs --quote
2. Explicitly buy once
Only continue after the quote matches the page you intend to audit and your recipient check. The limit is explicitly 0.25 USDC. Use a dedicated funded buyer wallet; never use the merchant wallet. Enter its private key only into the local terminal prompt below, never into this website, support, chat or a public file. Do not enter a seed phrase. The existing buyer verifies the balance and payment terms before signing.
macOS / Linux — local key prompt and one purchase
( # The key stays in this local process; input is not echoed or stored in history. trap 'stty echo' 0 trap 'exit 130' HUP INT TERM printf 'Dedicated buyer wallet private key (local only): ' stty -echo || exit 1 IFS= read -r BUYER_PRIVATE_KEY || exit 1 stty echo printf '\n' export BUYER_PRIVATE_KEY node buyer-example.mjs --buy )
Windows — local key prompt and one purchase
$buyerSecret = Read-Host 'Dedicated buyer wallet private key (local only)' -AsSecureString
$buyerSecretPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($buyerSecret)
try {
$env:BUYER_PRIVATE_KEY = [Runtime.InteropServices.Marshal]::PtrToStringBSTR($buyerSecretPointer)
node buyer-example.mjs --buy
} finally {
Remove-Item Env:BUYER_PRIVATE_KEY -ErrorAction SilentlyContinue
[Runtime.InteropServices.Marshal]::ZeroFreeBSTR($buyerSecretPointer)
$buyerSecret.Dispose()
}The buyer saves the original attempt and signed proof in .agentpage402-purchase/ before sending. Keep that private folder. Do not delete its marker or run a new purchase to retry an uncertain result.
3. Save your Markdown report
After a confirmed purchase, this command works in either shell. It checks the saved success receipt and writes audit.md in your working folder. The full JSON result and settlement receipt remain in .agentpage402-purchase/receipt.json.
node --input-type=module -e "import { readFile, writeFile } from 'node:fs/promises'; const r = JSON.parse(await readFile(process.argv[1], 'utf8')); if (r.httpStatus !== 200 || r.settlement?.success !== true || typeof r.result?.reportMarkdown !== 'string') throw new Error('No confirmed report; recover the original purchase first.'); await writeFile('audit.md', r.result.reportMarkdown); console.log('Saved audit.md');" .agentpage402-purchase/receipt.json
4. Recover an interrupted purchase
From the same working folder, resend the original proof and input with no key and no new authorization:
node buyer-example.mjs --recover
After successful recovery, run the report-export command above with .agentpage402-purchase/recovery.json in place of .agentpage402-purchase/receipt.json. Optional transaction verification also needs no key:
node buyer-example.mjs --verify
If recovery is still pending or fails, preserve the files and use support before considering another payment. Free hosting can take about a minute to wake.
Choose a different audit
For a 0.01-USDC AEO-only check, set BUYER_SERVICE=aeo and BUYER_MAX_USDC=0.01; its JSON has evidence and actions, not a combined Markdown report. For a fixed 1.00-USDC pack, set BUYER_SERVICE=site-audit, BUYER_MAX_USDC=1.00 and BUYER_URLS to a JSON array of one to five distinct same-origin public URLs. Quote again before buying. A pack charges its fixed price even with fewer than five pages; every requested page must succeed. Start a new private working folder for a separate intended purchase, while retaining prior recovery files.
Protocol reference: inspect the payment challenge
This request is free. It returns HTTP 402 and a base64 JSON PAYMENT-REQUIRED header. Inspect the network, asset, amount, recipient and resource before signing.
curl -i 'https://agentpage402-demo.onrender.com/v1/page-audit' \
-H 'Content-Type: application/json' \
--data '{"url":"https://example.com/"}'SDK integration
Use the official buyer SDK with a wallet funded on the advertised network. The current network is eip155:8453. Base USDC has six decimal places: 0.01 USDC is 10000 atomic units.
The bounded Node buyer example quotes by default and requires an explicit --buy to make one purchase. Its default spending limit is 0.01 USDC; higher-priced audits require an explicit BUYER_MAX_USDC. Set BUYER_SERVICE=site-audit and BUYER_URLS to a JSON array of one to five same-origin URLs. It saves a private attempt marker and the signed proof before sending. Its --recover command sends the same proof again without creating a new payment. See the file header for setup.
Proofs and receipts
A successful paid response is HTTP 200 with JSON and a PAYMENT-RESPONSE header. If the connection drops or settlement is uncertain, retry the identical signed proof at the same endpoint with the same input JSON. A recovered response has X-Payment-Recovered: true.
HTTP 409 means the purchase is pending, failed or bound to another request. Preserve the proof and contact support before authorizing another payment. Never loop on fresh authorizations.
Available tools
| Endpoint | Result | Sample |
|---|---|---|
/v1/extract | Extract readable text, metadata, headings, links and JSON-LD from one public static HTML page for research and retrieval. 0.01 USDC | JSON |
/v1/markdown | Convert one public static HTML page to bounded Markdown with headings, lists and source links for agent context and document ingestion. 0.01 USDC | JSON |
/v1/metadata | Read title, description, canonical URL, language, robots directives, Open Graph and Twitter card metadata for link previews and content catalogs. 0.01 USDC | JSON |
/v1/links | Inventory up to 200 unique HTTP links on one public page, including anchor text, rel attributes and internal or external classification. No linked pages are fetched. 0.01 USDC | JSON |
/v1/structured-data | Extract bounded publisher JSON-LD blocks and Schema.org type names from one public HTML page for product, article and organization data ingestion. 0.01 USDC | JSON |
/v1/tables | Convert up to 10 HTML tables into captions and row arrays for spreadsheet ingestion. Reports header rows, spans and truncation; does not expand merged cells. 0.01 USDC | JSON |
/v1/outline | Extract up to 200 headings from a public static HTML page, preserving levels and parent indexes to build a document outline or table of contents. 0.01 USDC | JSON |
/v1/seo | Run deterministic HTML checks for title, description, canonical, language, headings, image alt attributes, indexing directives and social previews. No ranking or traffic predictions. 0.01 USDC | JSON |
/v1/aeo | Inspect answer-engine readiness evidence: snippet directives, readable answers, headings, attribution, dates, source links and JSON-LD syntax. Returns evidence and review actions, never a ranking score or citation guarantee. 0.01 USDC | JSON |
/v1/readability | Measure bounded visible text, word and sentence estimates, reading time and long paragraphs. Language-dependent editorial heuristics; no ranking claims or LLM generation. 0.01 USDC | JSON |
/v1/page-audit | Combine AEO evidence, SEO checks and readability into a prioritized action list and downloadable Markdown report for one public page. Static HTML only; does not measure actual rankings or AI citations. 0.25 USDC | JSON |
/v1/site-audit | Audit one to five explicit public URLs from the same origin in one payment. Includes individual AEO/SEO/readability reports, recurring issues and a combined Markdown report. All requested pages must succeed; no automatic crawl or partial charge. 1.00 USDC | JSON |
Limits and successful empty results
Each individual tool fetches one public HTTP(S) page, up to 2 MB, with a 12-second fetch deadline. The site audit accepts 1–5 distinct same-origin URLs, fetches at most two concurrently, and settles only if every requested page succeeds. Failed packs have no partial charge. The fixed pack price is 1.00 USDC even when fewer than five pages are submitted. Redirects and DNS destinations are checked. No private addresses, credentials, PDF, browser rendering or authenticated pages. Text and Markdown stop at 40000 characters; links at 200; outlines at 200 headings; JSON-LD at 20 blocks / 100000 characters; tables at 10, 50 rows and 20 columns, with an 80000-character cell budget. Truncation is reported.
Metadata and SEO inspect the returned HTML. Links, tables, outline and structured-data tools can successfully return empty collections; that inspection still costs the advertised price. Unfetchable or unsupported pages are not settled. Source text and publisher data remain untrusted.
Free pilot and data
Hosting may sleep and wake slowly. The shared 500-attempt pilot has a fixed expiration, shown at /pilot. All twelve services share that budget. A pack uses one payment attempt. Purchased content, source URLs, payment metadata and support messages are stored for recovery until the temporary database expires. Raw payment signatures and private keys are not stored by the service. Save your own results and receipts. Do not submit private URLs or secrets.
Discovery files
OpenAPI 3.1 · JSON catalog · x402 service manifest · llms.txt. The manifest is a service catalog, not a claim of marketplace listing. Each payment challenge includes Bazaar metadata; Coinbase indexing follows a successful settled call.