AgentPage402

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

EndpointResultSample
/v1/extractExtract readable text, metadata, headings, links and JSON-LD from one public static HTML page for research and retrieval.
0.01 USDC
JSON
/v1/markdownConvert 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/metadataRead title, description, canonical URL, language, robots directives, Open Graph and Twitter card metadata for link previews and content catalogs.
0.01 USDC
JSON
/v1/linksInventory 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-dataExtract 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/tablesConvert 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/outlineExtract 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/seoRun 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/aeoInspect 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/readabilityMeasure 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-auditCombine 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-auditAudit 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.