# Warranty > A money-back guarantee for MPP payments. Stablecoin payments are final, so an agent that pays a service and gets an error or the wrong format has no recourse. Call the service through Warranty instead: it pays for you, checks the result against your contract, and refunds you automatically when a covered service fails. Network: Tempo testnet (test funds only). Payment method: MPP, tempo charge. ## Make a covered call POST https://warranty-mpp.vercel.app/api/call (paid, MPP) Body (JSON): { "url": "https://service.example/api/thing?x=1", // the MPP endpoint you want to buy from "method": "GET", // or "POST", with "body" and "headers" "contract": { "status": 200, // expected HTTP status (default 200) "content_type": "application/json", // optional, prefix match "json_schema": { }, // optional JSON Schema the body must satisfy "min_bytes": 1000, // optional "max_latency_ms": 10000, // default 10000, max 25000 "max_price": "0.05" // optional: refuse if the service quotes more } } Flow: 1. Send the request with no payment. You get HTTP 402 with a `WWW-Authenticate: Payment` challenge. The JSON body and the `X-Warranty-Quote` header carry the quote: target_price, premium, total, covered. 2. Pay the challenge and resend the same body within 60 seconds. 3. PASS: HTTP 200 with `result` (the service's response), `target_receipt`, and a signed `certificate`. FAIL: HTTP 502 with `failure_reason`, the failed `checks`, and `refund` (amount and transaction hash). Warranty always checks, in addition to your contract: a valid payment receipt came back, and the amount charged was no more than the amount quoted. Failure reasons: timeout, http_error, wrong_content_type, schema_mismatch, too_small, overcharge, no_receipt, payment_failed. ## Price total = the service's own price + a premium. - Covered services: premium = the larger of 0.005, 10% of the price, or the service's observed failure rate x 1.25 x the price. An unreliable service costs more to cover. - Services without a track record (fewer than 5 recorded calls, or a pass rate under 50%): Warranty still pays, checks and certifies the call for a flat 0.005 fee, but does NOT refund. The quote says `"covered": false`. - If the service cannot be reached or does not ask for payment, the request is rejected and you are not charged. ## Limits - Coverage cap: 1 per call. - At most 25 refunds per paying wallet per 24 hours. Beyond that, calls are checked but not refunded. - Warranty checks what can be checked automatically (status, format, schema, size, speed, price, receipt). It cannot tell whether the data is true. - Refunds are sent to the wallet that paid, in the token it paid with. ## Free endpoints - GET https://warranty-mpp.vercel.app/api/quote?url= what a covered GET to that target would cost now - GET https://warranty-mpp.vercel.app/api/certificate/ verify a certificate - GET https://warranty-mpp.vercel.app/api/scores reliability of every service Warranty has called - GET https://warranty-mpp.vercel.app/api/scores/ one service's recent calls - GET https://warranty-mpp.vercel.app/api/stats totals: calls, refunds, failure reasons - GET https://warranty-mpp.vercel.app/openapi.json machine-readable description with x-payment-info ## Try it A demo service that fails on request (paid, 0.01): GET https://warranty-mpp.vercel.app/api/flaky?mode=ok|garbage|slow|error|random npx mppx https://warranty-mpp.vercel.app/api/call --network testnet -J '{"url":"https://warranty-mpp.vercel.app/api/flaky?mode=garbage","contract":{"content_type":"application/json"}}'