Remediation example

Before/After: Fixing A Broken x402 Manifest

A manifest fix should remove ambiguity for both crawlers and paying agents. The goal is a document that agrees with the live HTTP 402 challenge.

Before

{
  "name": "Example Paid API",
  "services": [{
    "endpoint": "/api/answer",
    "price": "$0.01",
    "network": "base-sepolia"
  }]
}

After

{
  "x402Version": 1,
  "name": "Example Paid API",
  "generated_at": "2026-05-19T00:00:00Z",
  "default_network": "base",
  "default_asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "services": [{
    "id": "example.answer",
    "endpoint": "https://example.com/api/answer",
    "method": "POST",
    "network": "base",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "price_atomic": 10000,
    "price_usdc": "0.01",
    "tags": ["x402", "paid-api"]
  }]
}

What changed

The fixed version adds x402Version, absolute endpoint URLs, canonical network and asset values, atomic pricing, generated_at freshness, and service identifiers.

Evidence: These fields map directly to Ontario readiness signals: x402 manifest present, well formed, network consistent, manifest fresh, and price format valid.

Fix: After changing the manifest, run /api/verify/x402-readiness and compare the live 402 challenge against the manifest.

Sources

See common mistakes