FREE X402 PAYMENT-REQUIRED DECODER

Read the 402 before you trust it.

Decode a public x402 v2 challenge locally, inspect every payment offer, and catch missing amounts, recipients, resource metadata, or Bazaar discovery information. Nothing is uploaded and no payment is signed.

FREE · RUNS IN THIS BROWSER

Paste the public challenge

NO NETWORK REQUEST

Paste only a public PAYMENT-REQUIRED challenge. Never paste a PAYMENT-SIGNATURE, wallet key, seed phrase, or authorization.

VERDICTVALID V2
OFFERS1
BAZAARYES
  • PASSx402Version is 2.
  • PASS1 payment offer found.
  • PASSResource: https://merchant.example/api/weather
  • PASSEvery offer should declare a positive atomic amount.
  • PASSEvery offer should declare a structurally valid payTo recipient.
  • PASSBazaar discovery metadata is declared.
STRUCTURED RESULT
{
  "valid": true,
  "x402Version": 2,
  "resourceUrl": "https://merchant.example/api/weather",
  "serviceName": "Example Weather",
  "offerCount": 1,
  "offers": [
    {
      "index": 0,
      "scheme": "exact",
      "network": "eip155:8453",
      "amountAtomic": "2000",
      "amountUsdc": "0.002",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x0000000000000000000000000000000000000001",
      "maxTimeoutSeconds": 300
    }
  ],
  "extensionKeys": [
    "bazaar"
  ],
  "bazaarDeclared": true,
  "checks": [
    {
      "id": "x402-version",
      "passed": true,
      "detail": "x402Version is 2."
    },
    {
      "id": "payment-offers",
      "passed": true,
      "detail": "1 payment offer found."
    },
    {
      "id": "resource-url",
      "passed": true,
      "detail": "Resource: https://merchant.example/api/weather"
    },
    {
      "id": "offer-amounts",
      "passed": true,
      "detail": "Every offer should declare a positive atomic amount."
    },
    {
      "id": "offer-recipients",
      "passed": true,
      "detail": "Every offer should declare a structurally valid payTo recipient."
    },
    {
      "id": "bazaar-extension",
      "passed": true,
      "detail": "Bazaar discovery metadata is declared."
    }
  ],
  "warnings": [],
  "challenge": {
    "x402Version": 2,
    "error": "Payment required",
    "resource": {
      "url": "https://merchant.example/api/weather",
      "serviceName": "Example Weather",
      "mimeType": "application/json"
    },
    "accepts": [
      {
        "scheme": "exact",
        "network": "eip155:8453",
        "amount": "2000",
        "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
        "payTo": "0x0000000000000000000000000000000000000001",
        "maxTimeoutSeconds": 300
      }
    ],
    "extensions": {
      "bazaar": {
        "info": {
          "input": {
            "type": "http",
            "method": "GET"
          }
        }
      }
    }
  }
}

Decode is free. Preflight verifies the server.

The local decoder checks one challenge you already have. The paid preflight sends a bounded unpaid request to the public endpoint, compares header and body data, inspects CORS, validates Bazaar schemas, and returns a 0–100 readiness score.

Run a 0.002 USDC preflight →