15-payment-over-cap

Over the per-payment cap

Agent payment over the per-payment cap: 2.50 against a 1.00 cap

research-agent-01 asks for the premium dataset; the merchant's 402 asks for 2.50 USDC-TEST. PolicyGate's spend policy caps a single payment at 1.00, so it answers 403 spend.per_tx_cap_exceeded and signs no payment. The agent has nothing to pay with, and the merchant is never paid.

paymentsdenyevidence
FIXTURE
tenant_id"northwind-finance"
home_region"tst"
scopes
payments:sign
sub"agent:research-agent-01"
agent_id"research-agent-01"

Defaults: iss = http://localhost/tst-issuer, aud = edge, exp = now+1h, kid = tester-rs256

EXPECTED OUTCOME
POLICYGATE DECISIONdeny · 403
REASONspend.per_tx_cap_exceeded
SIGNATUREnone exists
MERCHANTnever paid
EVIDENCEpayment.deny, signed
What this demonstrates

An agent tries to spend more on one purchase than it is allowed. PolicyGate refuses before any payment is signed, so no money can move, and the refusal is a signed record. Test network: no real money.

Spend controlsSegregation of duties

Test network — no real money. A simulated network (eip155:31337) and a test token (USDC-TEST); the merchant settles in memory, nothing is sent to a blockchain.

RUNNER

Execute scenario

The agent asks the merchant, gets a 402, asks PolicyGate to sign, and on an allow retries the merchant with the signature. Runs on the server: the agent's token and the full signature never reach your browser.

WHY THIS MATTERS

Proves a per-payment limit is enforced before any signature exists, and that the refusal is itself signed evidence.