Stripe Puts AI Agents in "Approval Handcuffs": No Refunds Until a Human Says Yes

Stripe launches an agent approval API, making AI agents ask a human before touching money
On August 26, Stripe launched the Approval Requests v2 API, allowing approval rules based on amount, actor, and frequency for money actions like refunds, payments, and subscription cancellations. Its core innovation is introducing restricted keys tied to autonomous agents and stipulating that a requester cannot approve their own request — even when initiated by an agent, it cannot self-approve, closing off the loophole of "an agent both moving and approving money" at the system level. The MCP server tightens permissions in tandem. But this mechanism only covers within a Stripe account; when agents span multiple payment channels, policies fragment, and upper-layer control layers like Axiru are aimed precisely at this blind spot.
When AI agents start directly handling real money, who hits the brakes? Stripe has its own answer — make the agent ask a human before it touches the funds.

What Stripe Launched
According to Stripe's official documentation, on August 26 the platform added the Approval Requests v2 API (public preview), accessible from the Dashboard at Settings→Approvals.
The logic is straightforward: you write a rule for a given action, such as "refund creation." In addition, payment intent creation, subscription cancellation, credit note creation, and some account changes can also be covered by rules.
Each rule supports three types of trigger conditions — amount (intercept only above a threshold), actor (intercept when triggered by a team member or an agent key), and frequency (intercept when too many requests occur within a given window). Once triggered, there are two control modes: require approval pauses the action until a reviewer allows it, while block outright rejects it on the spot.
Stripe has also introduced a new key type: you can mark a restricted key as belonging to an autonomous agent. The company calls this "the recommended way to authorize agents." Agent keys come with default rules — refunds and subscription cancellations must wait for human approval.
When an agent key hits a rule, the API returns approval_required, Stripe automatically files the request, and a reviewer approves or rejects it in the Dashboard. Approved actions execute on their own, rejected ones change nothing, and requests expire after 14 days.
The Difference Between an Agent Key and a Restricted Key
Stripe's original API key system has two kinds: the Secret Key has full account permissions, while the Restricted Key lets you grant read or write permissions item by item by resource type (such as refunds, subscriptions, payment intents). The "agent key" introduced by Approval Requests v2 is not a brand-new key format, but rather an added layer of "identity marking" on top of a restricted key — by marking that key as belonging to an autonomous AI agent, Stripe automatically attaches a set of default approval rules to it. The benefit is that least privilege (from the restricted key) and traceable identity (from the agent marking) stack together, making it clear in the audit log whether "this is a refund initiated by a human" or "this is a refund initiated by an agent." For teams that already have many restricted keys, the upgrade path is usually to create a new key with the agent marking and migrate gradually, rather than retrofitting old keys.
What the "v2" in Approval Requests v2 Means
Stripe rolled out an initial version of approval requests around 2023, aimed mainly at Issuing (card issuance) scenarios, used by merchants to manually confirm large or unusual transactions. The key change in v2 is expanding the approval target from "card transactions" to "account actions" — refunds, subscription cancellations, credit notes, payment intent creation, and more can all be covered by rules, and it introduces the actor dimension (team member vs. agent key) and the frequency dimension. Understanding this evolution helps you judge that Stripe is elevating approvals from a risk-control subsystem to account-level infrastructure, and it will most likely continue to expand into more write operations in the future.
A Design Truly Worth Noting
The cleverest part of this mechanism: a requester cannot approve their own request. Even in a single-person account, an agent key is treated as an independent actor. So the account owner approves the agent, and the agent cannot approve its own spending.
This rule looks simple, yet it strikes at the core contradiction of AI agent safety — if an agent can both initiate a transaction and approve it, the approval layer is just for show. Stripe hard-codes this boundary into the system design rather than leaving it for users to configure.
The MCP server follows the same thinking. Certain write operations (such as refunds and outbound payments) require a human to first click a confirmation link. Starting October 31, Stripe MCP will no longer accept full-access keys or unmarked restricted keys. Every rule change and every decision shows up in the security history, and every state change has a corresponding webhook.
MCP and "Human Confirmation for Write Operations"
MCP (Model Context Protocol) is an open protocol proposed by Anthropic in late 2024 to let AI models connect to external tools and data sources in a standardized way. The MCP server provided by Stripe lets agents call the Stripe API directly (check balances, create refunds, initiate payments, etc.). The protocol itself divides tools into two categories, "read-only" and "write," and write tools can require an out-of-band human confirmation before executing (usually clicking a one-time link). This is complementary to Approval Requests: the MCP layer handles "is the agent allowed to call this tool," while the Approval Requests layer handles "is this specific call approved." Disabling full-access keys as of October 31 is essentially aligning the MCP channel's permission model with the principle of least privilege — because a key that can both create refunds and approve refunds would render all the approval mechanisms above it meaningless.
Policy Versions and Auditability
What enterprise compliance audits care about is not just "this call was allowed," but also "which policy version it was based on." If a refund rule is adjusted from $100 to $200, then the same $150 refund will have different outcomes before and after the change. Stripe's security history records rule changes and every decision, but in cross-platform scenarios, each provider's policy version numbers, change timestamps, and reason codes tend to be independent of one another. This is exactly the problem that upper-layer control layers like Axiru are trying to solve: define policies centrally, version them consistently, and then distribute them to each payment channel for execution, so that the question "why was this allowed/blocked" has a single, lookup-able answer.
What It Covers and What It Doesn't
Stripe Approvals governs your Stripe account — that's its job, and it does it well. But agents don't live in just one payment processor.
A customer service agent issues a refund on Stripe today, and tomorrow the team may connect a second processor for another region. An operations agent pays a supplier by credit card, and a research agent pays for API calls with stablecoins. Each place has its own rules interface, its own limits, its own logs — or none at all.
So policies fragment. You set a $200 refund cap in Stripe, a different cap on another platform, and no one has the full picture.
The Axiru team, which takes a positive view of Stripe's move, points out this blind spot. In their view, the core rule — "an AI cannot approve its own spending" — should apply to every payment channel, not just one.
Axiru bills itself as an independent control layer spanning AI models, agent frameworks, and supported payment channels, offering unified policies, payment-channel-independent checks, dedupe windows, allowlists, method matching, and allow/hold/deny decisions with reason codes.
"Dedupe Windows" and Shadow Mode
A dedupe window means allowing a semantically identical operation to execute only once within a period of time, even if it comes from different call paths. For example, if an agent initiates the same refund twice due to a timeout retry, amount and frequency alone would not trigger a rule, but a dedupe window can identify that "this is the same transaction." Shadow mode, by contrast, is a way of running that doesn't actually block but only records "what would happen if the policy were in effect," suitable for using historical data to assess the false-positive rate before formally enabling a new policy. These two concepts are already mature in traditional anti-fraud and payment risk control. Migrating them to the AI agent scenario means agent spending management can reuse a great deal of existing engineering practice rather than designing from scratch.
Practical Ways to Combine Them
Stripe Approvals and an upper-layer control layer are not an either/or choice. If you run agents on Stripe, enabling Approvals, marking agent keys, and keeping the default rules are basic steps.
Then you can ask yourself a few questions:
- Besides Stripe, will your agent move money elsewhere now or next quarter?
- Do you need one person to see all agent fund outflows in a single queue?
- Do you need to catch the same duplicate refund, not just large refunds?
- Can you prove to an auditor which policy version each call used?
If the answer to any of these is "yes," you need a layer of control above the payment channels.
What It Means for Developers
This Stripe update sends a clear signal: AI agents' payment permissions need to be treated as an independent security boundary. Not because agents will do evil, but because agents will make mistakes — and once money goes out by mistake, it's very hard to get back.
The default-rule design of agent keys is especially worth learning from. It doesn't remind users only after they make a mistake; it tightens by default and opens up on demand. This approach can be migrated to any system design involving autonomous AI decision-making.
Axiru also offers a free historical-data audit service — replaying the past 90 days of refunds in shadow mode to see which ones would be allowed, held, or denied. This method of "validating policies with historical data" is a useful reference for any team considering introducing an agent approval mechanism.
The Permission Design Principle of "Tighten by Default, Open on Demand"
This approach is known in security engineering as fail-safe defaults, or secure by default. It was first systematically proposed by Saltzer and Schroeder in their classic 1975 paper "The Protection of Information in Computer Systems," and is one of the eight fundamental principles of access control design. Its opposite is "open by default, tighten after something goes wrong," which is still acceptable in human user scenarios (because people will actively read the docs and configure permissions), but the risk is amplified in agent scenarios: agents call APIs at a far higher frequency than humans, and once default permissions are too broad, losses accumulate within minutes. By writing "refunds and subscription cancellations require approval by default" into agent keys, Stripe is applying this old principle to a new scenario. When designing any system involving autonomous AI decision-making, developers can ask themselves: does a newly connected agent get least privilege or full privilege by default?
Related articles

Cursor Can Now Control Your Computer: AI Agents Can Drive Desktop Apps for Testing
Cursor adds desktop control: AI agents can drive desktop apps like the iOS Simulator to test their own features. We analyze the impact on dev workflows, possible technical approaches, and reliability concerns.

Vibecoding a Custom Inference Engine: High Hopes, Harsh Reality
A Reddit developer shares the real experience of vibecoding a custom inference engine: running GGUF Q4 models in the browser with WebGL2 and GLSL, only to fall into tokenizer debugging hell. This article analyzes the engineering challenges of browser-side LLM inference and why cloning llama.cpp is the more rational choice.

How High Are Anthropic's Early Investor Paper Returns Ahead of IPO?
Anthropic's early investor paper returns draw attention ahead of IPO. This article analyzes sources of book gains, capital structure, pre-IPO games and risks, and implications for the AI startup ecosystem.