Your agent pays.Warns decides first.
For teams whose agents pay for APIs over x402. Each payment is checked against your rules before it is signed.
We only use your email to contact you about early access. Privacy
Four traps.See what your agent signs.
1. Point your agent at them
They speak x402 on Base Sepolia and behave like a compromised merchant. Use the client you already have.
2. See what it paid
Every payment it signed is listed with its transaction. An unprotected client pays all four, because each one stays under its 1 USD default cap.
3. Wrap it and run again
Add Warns to your x402 client. The honest price goes through; the traps are blocked or held for a human.
Why a spend capis not a security layer.
26.4 M payments in 90 days
115 M USDC settled on Base through EIP-3009 authorizations, the primitive x402 uses. 184,000 payers.
Median payment: 0.006 USD
Nine payments in ten are under ten cents. A merchant can charge a hundred times its price and nobody notices.
98% under the default cap
The x402 client (@x402/core 2.26) ships with a 1 USD default cap per payment. 98 payments out of 100 on Base fit under it, and so does every trap above.
A decision beforethe signature.
The payment is evaluated first
The guard reads the 402, normalizes what the merchant asks, and sends it to the decision service with what your agent meant to buy. The answer comes back signed.
The signer refuses the rest
Only an authorization that matches an approved decision gets signed. When your agent signs through the signer Warns wraps, a payment that goes around the guarded fetch cannot be signed either.
The chain is the last judge
Every transfer leaving your agent's wallets is reconciled against the decisions. One that bypassed Warns is flagged and the agent is frozen: Warns approves nothing more until someone looks.
Protect an agentwith the client you have.
Replace the fetch you pass to the x402 client. You need a Warns key, an agent id and the signer your agent already uses, which stays yours. Start in monitor mode: nothing is blocked until you switch to protect.
import { createGuard } from "@warns/sdk" const guard = createGuard({ apiKey: process.env.WARNS_KEY, agentId: "research-agent", baseUrl: "https://api.warns.xyz", rootAddress: "0xA26aa29cF9b429AD85E7a0F7FA6aBd8edE301e8a", }) const pay = guard.x402Fetch(signer, { intent: () => ({ expectedMaxUsd: 0.05, purpose: "market-data" }), }) await pay("https://data.vendor.com/quote") // pays, holds, or throws with the reason
What is enforced today,and what comes next.
SDK control, today
The SDK checks each payment before signing, and the signer it wraps refuses what was not approved. Stops a merchant, a bad dependency or an injected instruction from making your agent pay, as long as the agent signs through Warns.
Onchain detection, today
Reconciliation flags any payment from your agent's wallets that skipped a decision, and freezes the agent: Warns approves nothing more until someone looks. It detects after the fact and does not stop a key used elsewhere, but a bypass never goes unseen.
Signer-bound checks, next
The key itself checks the decision before signing, inside the wallet or the enclave. Nothing leaves without a decision, even if code holds the raw key. This is where the roadmap goes.
Protect your agents.Get early access.
We only use your email to contact you about early access. Privacy
Early access is for teams whose agents pay for APIs over x402 on Base. Or test your agents right now.