Machine API / all services

Catch breaking merchant API changes before deployment

Compare a merchant service contract with a caller-supplied baseline before deployment. Reports breaking input/output, price, route, network, asset, and payee changes with reproducible hashes and fixes. No URL fetching or security audit. Pay 50000 atomic USDC on Base via exact x402.

0.05 USDC / call · Base · x402 v2 exact

Version 1.0.0. Pilot; demand unvalidated. Catalogue availability does not prove paid fulfilment.

Before you deploy a paid API change

Send the last contract your buyers relied on as baseline and the proposed contract as current. The report compares route, method, price, network, asset, payee, and input/output fields, then returns stable hashes, rule-level evidence, and remediation steps.

  • Use it in a release check when a machine-paid endpoint or tool contract changes.
  • The service evaluates only the JSON you supply. It does not fetch either endpoint, run code, or make downstream purchases.
  • A passing result is a contract-regression result, not a security audit, runtime availability check, or proof that buyers will pay.

Start with the request below without a payment header. Valid input returns the exact x402 terms in an HTTP 402 challenge; malformed input is rejected before payment is requested.

Request

POST https://api.zfinia.com/x402/v1/merchant-contract-regression-report

{
  "merchant_service_id": "merchant.weather",
  "baseline": {
    "observed_at": "2026-09-19T00:00:00.000Z",
    "route": "/v1/weather",
    "method": "POST",
    "price_atomic": "10000",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "pay_to": "0x1111111111111111111111111111111111111111",
    "input_fields": [
      {
        "name": "city",
        "type": "string",
        "required": true,
        "nullable": false
      }
    ],
    "output_fields": [
      {
        "name": "temperature",
        "type": "number",
        "required": true,
        "nullable": false
      }
    ]
  },
  "current": {
    "observed_at": "2026-09-20T00:00:00.000Z",
    "route": "/v1/weather",
    "method": "POST",
    "price_atomic": "10000",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "pay_to": "0x1111111111111111111111111111111111111111",
    "input_fields": [
      {
        "name": "city",
        "type": "string",
        "required": true,
        "nullable": false
      }
    ],
    "output_fields": [
      {
        "name": "temperature",
        "type": "number",
        "required": true,
        "nullable": false
      }
    ]
  },
  "policy": {
    "maximum_price_atomic": "15000",
    "require_same_network": true,
    "require_same_asset": true,
    "require_same_pay_to": true
  }
}
  1. Send the example as an application/json POST without payment to receive HTTP 402.
  2. Inspect Payment-Required and confirm the network, asset, recipient and amount using your own x402 client.
  3. Your client authorizes payment and retries the same POST. A successful paid response returns the result. A 402 is not a delivery.

GET is an unpaid payment challenge probe. Paid delivery uses POST.

Machine clients: website catalogue JSON · MCP challenge handoff. MCP does not hold a buyer wallet or make payments for you.