{"name":"onyx_verify_explain","tier":"free","price_usdc":"0","endpoint":"https://onyx-actions.onrender.com/v1/onyx_verify_explain","method":"POST","input_schema":{"type":"object","properties":{"x_payment_b64":{"type":"string","description":"Base64-encoded X-PAYMENT (v2 PAYMENT-SIGNATURE) header value. Optional if payment_payload provided."},"payment_payload":{"type":"object","description":"Decoded payment payload dict. Use this OR x_payment_b64."},"payment_requirements":{"type":"object","description":"Expected paymentRequirements from the 402 challenge ({scheme, network, payTo, asset, maxAmountRequired, maxTimeoutSeconds, ...})."},"now_unix":{"type":"integer","description":"Override current unix time for replay/CI use. Defaults to now."}},"required":["payment_requirements"]},"description":"Diagnose a failing x402 v2 /verify. Decodes a captured X-PAYMENT header, runs 10 rules (decode, schema, network/asset/payTo match, value sufficiency, EIP-3009 timing, signature shape, scheme) against expected paymentRequirements, and returns the FIRST failing rule with a plain-English fix. Catches the common case where the facilitator returns bare HTTP 402 (no body) because of JWT or schema fail upstream of the verifier. Stdlib-only, no install, no network.","when_to_use":"Your x402 v2 retry is returning a bare HTTP 402 with no body and no errorReason. You can't tell whether it's the payment, your JWT, or a schema bug upstream of the verifier.","vs_alternatives":"x402trace (npm, Base Sepolia only) does similar diagnosis client-side in TypeScript. This tool is Python/server-side, stdlib-only, all chains in CAIP-2 table, free tier. Pair with x402trace for two-sided verification.","example_request":{"payment_requirements":{"scheme":"exact","network":"eip155:8453","payTo":"0xA60939FFf9c04a61c0c0649943675e16A12D7074","asset":"0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","maxAmountRequired":"10000","maxTimeoutSeconds":300},"payment_payload":{"x402Version":2,"scheme":"exact","network":"eip155:8453","payload":{"signature":"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","authorization":{"from":"0x0000000000000000000000000000000000000001","to":"0xA60939FFf9c04a61c0c0649943675e16A12D7074","value":"10000","validAfter":"0","validBefore":"9999999999","nonce":"0x1111111111111111111111111111111111111111111111111111111111111111"}}}},"example_response":{"ok":true,"stage":"preflight_pass","rule":null,"detail":"All 10 local rules pass. Bare HTTP 402 with no body now points to CDP JWT auth...","fix":"Mint a fresh CDP JWT each /verify call...","payer":"0x0000000000000000000000000000000000000001","network":"eip155:8453"},"settle_to":"0x3fD9ee1373562f894D322B37DFFAd7a5D2b2d78f","network":"base","facilitator":"https://facilitator.xpay.sh","payment_required":false,"free_introspection":true,"note":"GET this URL = free introspection card. POST with x402 payment header to call."}