Observer Protocol · x402 enforcement

The signature is never created. The payment never exists.

An agent holds one mandate its owner signed once: a $5.00 rolling-24h budget, shared across x402, Lightning, and TRON. The budget is already spent. The agent tries one more $0.01 USDC payment on Base. Watch Observer Protocol refuse it inside the unmodified x402 client, before the EIP-3009 authorization is ever signed.

x402-op-authorize · withX402Client standby
mandate
signed once · $5.00 rolling-24h budget, shared across x402 / Lightning / TRON
buyer wallet holds 0 ETH · EIP-3009 payer-gasless on Base Sepolia
ledger
prior spend has reached the full $5.00 of the budget
x402
agent proposes one more $0.01 USDC payment through the unmodified x402 client
the client calls the Observer-wrapped signer to produce the EIP-3009 authorization
ObserverDenyError DENIED AT THE KEY

thrown inside the x402 client, before the EIP-3009 authorization is signed

{
  "kind": "x402-payment",
  "decision": "deny",
  "reason": "[cross-rail] projected rolling-24h cross-rail spend
            5.01 USD exceeds the budget 5 USD (this payment:
            0.01 USD as USDC at the principal-attested rate 1)",
  "chain_id": "eip155:84532",
  "asset": "0x036cbd53842c5426634e7929541ec2318f3dcf7e",
  "amount": "10000",
  "recipient": "0x0000000000000000000000000000000000…dEaD"
}

This refusal comes from the cross-rail ledger, which is a cooperative counter rather than a signed constraint — a local file the agent owns, shared only by adapters co-located in one process. The per-transaction ceiling on the same mandate is enforced against signed content and is binding. What the budget is and is not → The eip155:84532 above is Base Sepolia, a testnet.

held
No EIP-3009 signature exists, so nothing settled and the resource is still 402. The deny was thrown at the key, before the payment could come into existence. No funds moved, and there was no signed authorization to undo.
Recorded from take 5 of the OP Crossrail run against the production x402.org facilitator, on-chain Base Sepolia settlement, committed 2026-07-06. The decision above is the real ObserverDenyError record from x402-op-authorize, not a mock or a diagram.
Delegate once. Enforced before the payment exists. See the three-rail demonstration →