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
}
}- Send the example as an application/json POST without payment to receive HTTP 402.
- Inspect Payment-Required and confirm the network, asset, recipient and amount using your own x402 client.
- 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.