Who gets paid?
The destination must be the one supplied by the trusted quote.
// Payment Guard · x402 conformance
Upcoming soon · Scanning & free tools
Check what a payment will authorize before your wallet signs it. The recipient, amount, token and network must match the trusted quote.
01 / The mechanism
The trusted quote and the agent’s proposal meet only at the signing boundary. Change the proposal to see which path opens.
Kept in trusted host code
The host validates and stores the quote.
Built in the agent’s context
Pages, tool responses and invoice text can influence it.
The recipient changed. The connected wrapper stops before the wallet signs.
02 / The reason
An agent can read an invoice correctly and still construct a payment to another wallet. Checking the words alone misses the action that matters.
Sentry compares the supported transaction or authorization with payment terms kept outside the agent’s editable context. A mismatch stops the signing path.
Why the model cannot override the policy ↗03 / Anatomy of a payment
These illustrative fixtures explain the comparison. They do not connect a wallet, run the SDK or send a payment.
The proposed recipient differs from the trusted quote. The wrapper stops before asking the wallet to sign.
04 / The agreement
The destination must be the one supplied by the trusted quote.
The transfer must satisfy the supported quote’s amount constraints.
A familiar ticker is not enough. Check the actual asset identity.
The intended chain is part of the agreement, not an afterthought.
05 / At the signing boundary
Decode supported serialized payment instructions before the wallet signs. Check transfers against the quote and refuse recognized extra authority.
Serialized transactionInstructions + accountsdestination / mint / amountUnsupported structures or unresolved accounts cannot receive an allow verdict.
Check supported EIP-712 / EIP-3009 authorizations, their domain and transfer fields. A payment quote does not authorize an unrelated allowance.
Typed authorizationDomain + transfer fieldsrecipient / asset / chain / valueCoverage is format-specific. Arbitrary contract calls are not treated as verified payments.
06 / Where x402 fits
Simplified successful path. x402 defines the payment exchange; Sentry adds a local conformance boundary. Settlement and access still depend on the merchant, network and any facilitator. Protocol documentation
07 / Connect it
Wrap the wallet used by the real payment flow. A check the agent can skip is only advice.
import { guardEvmSigner } from '@sentry-local/guard/evm';
// The host provides the wallet and independently trusted quote.
const guardedWallet = guardEvmSigner(wallet, () => trustedQuote);
// Use this wrapper for the actual payment signing path.
await guardedWallet.signTypedData(paymentAuthorization);The host must supply wallet, trustedQuote and paymentAuthorization.
Protect the reference. Obtain and validate the quote in trusted host code. Never let an agent rewrite both sides of the comparison.
Keep the gate mandatory. Route the actual signing operation through the wrapper. An unknown payload, timeout or error must not grant permission.
08 / Know the scope
Connect the signer SDK to your wallet to enforce the check before signing. Hosted billing uses the separately configured payment service.
09 / A few useful answers
No key is needed for the offline payment inspector. NanoGPT is used separately for optional text analysis on the Sentry backend; it does not decide whether mismatched payment terms are acceptable.
It means the supported payload conforms to the supplied quote under the configured checks. It does not establish merchant trust, sufficient funds or settlement. The host is responsible for trusting the quote.
The inspector abstains. The wrapper stops before signing. Add and validate support for the format; do not convert an unchecked result into permission.
Yes, for inspection and diagnostics. Enforcement requires the actual action path to reject non-allow results. A separate green badge cannot constrain another unwrapped signer.