Six spend control types are now standard for fintech teams putting AI agents on payment rails: spending limits, velocity caps, allowlists, approval workflows, policy engine enforcement, and virtual card scoping. The principle behind all of them is the same: encode authorization logic explicitly, before the agent goes live, at multiple layers.
Gartner projects that 1 in 4 enterprise breaches by 2028 will come from AI agent exploitation. It is worth understanding why.
An AI agent that handles payments runs continuously. There is no human reviewing each decision before money moves. If the agent is tricked through prompt injection, a bad tool call, or a stolen credential, it keeps transacting. The 2028 number may be off, but the underlying logic holds: an agent running without human review at each step needs defined limits before it starts. That is what spend controls are.

Payment standards were designed for a world where a person makes each transaction. The rules covering card payments and bank transfers define roles for merchants, issuers, and acquirers, but say nothing about how to identify, authorize, or limit software acting on behalf of a user.
As Ruston Miles of Bluefin wrote in April 2026: “Agentic commerce is advancing faster than the trust architecture designed to support it.”
Fraud detection tools have the same problem. Stripe Radar, velocity checks, and anomaly detection are built to spot unusual human behavior. An agent might pay 300 times per hour or send to new addresses continuously. To those tools, that does not look like fraud. It looks like a broken system. When a human pays, they make a judgment call at that moment. When an agent pays, that judgment has to be written into rules before the agent starts.

Spending limits and caps are where most teams start because they map directly to controls already familiar from traditional finance. Coinbase Agentic Wallets lets teams set session caps and per-transaction limits at wallet creation, and change them later. Crossmint and Circle Agent Stack offer similar controls. A per-transaction max, a session cap, and a daily total together remove most runaway spend scenarios before any other control is needed.
Allowlisting defines which destinations the agent can pay. For most fintech use cases, the list of valid payment targets is small and known before the agent starts. Writing it down removes an entire category of risk: if the agent is compromised, it can still only reach addresses already on the list.
Approval workflows follow a tiered model: fully automatic below a certain amount, a notification for medium transactions, and a required human approval for large ones. MetaMask Agent Wallet’s Guard Mode works this way. Daily spend limits and approved protocols run without any human step. Anything outside the policy requires 2FA before the transaction can go through. Session keys with an expiry date add a time limit: the agent’s permission ends automatically without needing a manual revocation step.
Policy engine enforcement puts the authorization check at the signing layer, before any private key is used. Application code can check rules before sending a transaction, but those checks can be bypassed by a bug or by prompt injection that changes the agent’s behavior first. A policy engine that evaluates the transaction independently makes its decision based on the transaction itself, not on what the agent reported. The outcome is kept simple on purpose:
DENY — transaction blocked before signing
ALLOW — passes through without manual review
NO MATCH — falls back to standard approval flow
Fystack’s policy engine sits between the approval flow and the MPC signing layer. A spend policy for an agent wallet looks like this:
doc := policy.Document{
Policies: []policy.Policy{
{
Name: "agent-spend-policy",
Rules: []policy.Rule{
{
ID: "block_large",
Effect: policy.EffectDeny,
Condition: "ValueUSD > 50000",
},
{
ID: "auto_approve_small_whitelisted",
Effect: EffectAutoApprove,
Condition: "IsWhitelisted && ValueUSD < 5000",
},
{
ID: "flag_medium",
Effect: EffectFlagReview,
Condition: "ValueUSD >= 5000 && ValueUSD <= 50000",
},
},
},
},
}When multiple rules match, DENY always wins. The engine also records which rule produced each decision, so every outcome can be reviewed. The policy engine is open-sourced on GitHub.
On-chain enforcement through smart contract wallets (ERC-4337 or ERC-6900) takes the same idea one step further. Rules encoded in the wallet contract are checked by the blockchain. If a transaction breaks a rule, the chain rejects it regardless of what the signing service or the agent tried to do. Crossmint’s agent wallets encode per-transaction limits, rolling caps, and recipient allowlists directly in the contract. The trade-off is that on-chain rules are harder to change quickly compared to server-side rules. Most teams use both layers together for this reason.
Virtual cards and tokenized credentials cover fiat payment rails. When an agent needs to pay a merchant that only accepts Visa or Mastercard, stablecoin rails do not apply. Stripe Issuing for Agents, Mastercard Agent Pay, and Crossmint via Lobster.cash let teams issue single-use or scoped virtual card numbers to agents with built-in spend limits, merchant allowlisting, and automatic expiry. The same control model extends to traditional payment rails.
These four layers enforce in different ways and can fail in different ways. Most production teams run two or three of them together.

Application code is the first check and the easiest to update. The policy engine runs after that, independently of the agent’s state. On-chain rules are the last line: they hold even if every layer above them is compromised.
Deploying an agent wallet without spend controls is the same mistake as giving someone a corporate card with no limit. It works fine until it does not. For agents running continuously at high volume, the time between “something went wrong” and “significant funds moved” can be very short. Spend controls are what keeps that window manageable.
Fystack’s policy engine checks transactions against defined rules before the MPC signing layer runs, with a full record of every decision. It is open-sourced on GitHub. The signing layer beneath it runs on mpcium, Fystack’s open-source MPC daemon. If you have questions about wallet infrastructure or custody setup for your agent deployment, share your setup here and our team will follow up directly.
Can I use Stripe Issuing controls instead of a policy engine?
Stripe Issuing gives you card-level spend controls on fiat rails: per-transaction limits, merchant allowlisting, and velocity caps at the card level. For agents transacting on stablecoin rails or signing on-chain transactions, Stripe Issuing does not apply. A policy engine at the signing layer covers crypto-native transactions and can extend to any rail. The two work well together for teams operating on both.
What happens when no policy rule matches a transaction?
In Fystack’s policy engine, a no-match result returns to the workspace’s standard approval flow. It is not an automatic allow. Policy coverage should grow gradually as teams understand their agent’s transaction patterns, while everything outside the defined rules continues through human review.
How do I handle an agent that needs to pay a new address not on the allowlist?
The standard approach is a proposal flow: the agent flags the new destination for human review, the operator adds it to the allowlist after checking it, and the agent retries. The allowlist update itself goes through an approval process, the same way any other policy change does.
6 Guardrails to Limit AI Agent Spending on Payment Rails was originally published in Coinmonks on Medium, where people are continuing the conversation by highlighting and responding to this story.