Verify Before Pay
verify_before_payShould my agent pay this endpoint right now? Free key - a free pk_free_ key covers it against a shared 10 calls/day; $0.25 per call via x402 beyond it. Over MCP only, 1 free trial call/day is available without a key. CALL THIS BEFORE YOUR AGENT AUTHORIZES ANY x402 PAYMENT. An unpaid GET and POST at query time decode the 402 from the body AND the payment-required header; HTTP 200 is never treated as live. A contract mismatch is route:false and names the field (network, asset, seller, price). Includes independent paid-fulfillment results where available — whether a third party has actually paid this endpoint and got a valid response back, with the settlement hash. Test the result with route === true: the string "inconclusive" is truthy, and it is the one case where you must not pay on our say-so. The bias is deliberate: where evidence is incomplete, verify_before_pay favors inconclusive over a false pass — it will more often decline to clear a good endpoint than clear a bad one. route: true means the live contract matched your expectations — it is not an all-clear on every signal: stale settlement, a circular flag, a payTo divergence, and a failed request pre-flight can each coexist with it, so read the checks block rather than route alone. route_state carries the same verdict as route, always as a string ("true", "false", "inconclusive"), for clients that cannot type a boolean-or-string field. contract_and_request_ok is the narrower combined verdict: true only when route is true AND your own declared request passed pre-flight, false when either is bad, and the string "not_assessed" when a term was never established (usually because you passed no intended_params). Test it with === true; contract_and_request_ok_excludes names the risk categories it is silent on. No success-rate field is returned, deliberately: Paddock observes settlements, not failed calls, so recency and frequency are reported instead. Pass attest: true to also issue a signed, publicly fetchable record of this verdict — returns an attestation id and a URL a third party can verify independently against Paddock's published key.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| attest | No | Also issue a signed, publicly fetchable record of this verdict. Returns an attestation id and a URL a third party can verify independently against Paddock's published key. | |
| pay_to | No | The recipient wallet from the 402 you are about to settle. CHECKED against the live challenge: if this endpoint is not currently asking to be paid at that wallet, route is false. Give this, endpoint_url, or both. | |
| api_key | No | Paddock API key. A free key (pk_free_) is enough for this tool — POST an email to paddock.finance/api/keys/free to get one. Builder/Pro Agent keys also work. | |
| endpoint_url | No | The resource URL your agent is about to pay, e.g. 'https://api.example.com/x402/search'. This is what gets probed. | |
| expect_asset | No | Asset contract address you expect, e.g. Base USDC. A mismatch returns route:false. | |
| expect_seller | No | Seller domain you expect, e.g. 'api.example.com'. A mismatch returns route:false. | |
| expect_network | No | Network you expect, e.g. 'eip155:8453' or 'base'. A mismatch returns route:false. | |
| intended_params | No | Parameter NAMES your request will carry, comma-separated or as a query string, e.g. 'slug,limit' or '?slug=amazon-us'. Values are discarded. Checked against the schema the 402 declares; a missing required name is reported and does NOT change route. | |
| expect_price_usdc | No | Price in dollars you expect to pay, e.g. 0.01. Any difference returns route:false and names the field. | |
| intended_params_empty | No | Set true if your paid request will carry NO parameters at all. That is an assertion and it is checked: against a challenge that declares anything required, an empty request fails pre-flight. Omitting both this and intended_params means 'I have not told you', which is reported, never read as 'none'. Passing both is an error. |