{"id":14761,"date":"2026-11-06T06:51:40","date_gmt":"2026-11-06T06:51:40","guid":{"rendered":"https:\/\/botsify.com\/blog\/?p=14761"},"modified":"2026-11-06T06:52:17","modified_gmt":"2026-11-06T06:52:17","slug":"ai-agent-unsafe-actions","status":"publish","type":"post","link":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/","title":{"rendered":"How to Prevent AI Agents From Making Unsafe Purchases or Actions"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">An agent can find a product, fill a cart, or prepare a subscription change in seconds. The risk begins when it can submit the order, move money, change an account, or trigger a bulk operation without a reliable control outside the model.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">To prevent <strong>unsafe AI agent actions<\/strong>, design the workflow so the agent can propose work while a separate policy layer verifies authority, scope, and approval before execution. A spending cap helps limit exposure, but it cannot tell whether the customer intended the purchase, whether the same request already ran, or whether the selected item is correct.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">This guide covers a practical action-risk map, transaction confirmations, permission boundaries, approval routing, duplicate protection, testing, and incident response. The right controls depend on the action and business policy. A fixed dollar threshold or universal \u201chuman approval for every refund\u201d rule is not appropriate for every organization.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p class=\"wp-block-paragraph\">Treat the model as a request composer. Let deterministic application logic decide whether an action is allowed to execute.<\/p>\r\n<\/blockquote>\r\n\r\n\r\n\r\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title ez-toc-toggle\" style=\"cursor:pointer\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #fee22e;color:#fee22e\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #fee22e;color:#fee22e\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Map_actions_by_impact_and_reversibility\" >Map actions by impact and reversibility<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Separate_the_agents_proposal_from_execution\" >Separate the agent\u2019s proposal from execution<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Make_approval_specific_to_the_exact_action\" >Make approval specific to the exact action<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Confirm_the_transaction_details_with_the_requester\" >Confirm the transaction details with the requester<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Set_limits_that_cover_cumulative_and_repeated_activity\" >Set limits that cover cumulative and repeated activity<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Prevent_duplicate_and_replayed_actions\" >Prevent duplicate and replayed actions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Decide_how_to_recover_before_enabling_execution\" >Decide how to recover before enabling execution<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Keep_the_approval_process_usable\" >Keep the approval process usable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Watch_for_prompt_injection_and_confused_intent\" >Watch for prompt injection and confused intent<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Choose_approval_rules_from_the_real_business_process\" >Choose approval rules from the real business process<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Design_safer_agent_workflows_for_real_business_actions\" >Design safer agent workflows for real business actions<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Test_the_action_path_before_launch\" >Test the action path before launch<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Measure_whether_the_controls_are_working\" >Measure whether the controls are working<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Respond_to_an_unsafe_action_or_near_miss\" >Respond to an unsafe action or near miss<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#FAQ\" >FAQ<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Should_an_AI_agent_be_allowed_to_make_purchases\" >Should an AI agent be allowed to make purchases?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Does_a_spending_limit_make_agent_purchases_safe\" >Does a spending limit make agent purchases safe?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Should_every_refund_require_human_approval\" >Should every refund require human approval?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#What_if_the_agent_times_out_after_submitting_an_order\" >What if the agent times out after submitting an order?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Can_a_customers_%E2%80%9Cyes%E2%80%9D_authorize_an_action\" >Can a customer\u2019s \u201cyes\u201d authorize an action?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#What_should_the_agent_do_when_approval_is_unavailable\" >What should the agent do when approval is unavailable?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Make_unsafe_AI_agent_actions_harder_by_design\" >Make unsafe AI agent actions harder by design<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#Review_the_controls_around_your_AI_agent_workflows\" >Review the controls around your AI agent workflows<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Map_actions_by_impact_and_reversibility\"><\/span>Map actions by impact and reversibility<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Start with an inventory of every tool the agent can call. Include actions that change records, send messages, spend credits, or expose information, not only payments. For each tool, document its target, inputs, permissions, reversibility, and worst credible outcome.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-table\">\r\n<table><colgroup><col style=\"width: 33.33%;\" \/><col style=\"width: 33.33%;\" \/><col style=\"width: 33.33%;\" \/><\/colgroup>\r\n<thead>\r\n<tr>\r\n<th>Action class<\/th>\r\n<th>Examples<\/th>\r\n<th>Initial control pattern<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Read-only<\/td>\r\n<td>Check inventory, retrieve an order status, view a public price<\/td>\r\n<td>Scope access to the requester and the smallest required data set<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Prepare, but do not commit<\/td>\r\n<td>Build a cart, draft a purchase request, calculate a refund<\/td>\r\n<td>Allow the agent to prepare a proposal; prevent the preparation step from submitting it<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Reversible change<\/td>\r\n<td>Update a delivery preference, reserve a slot, edit a draft<\/td>\r\n<td>Validate the target and policy; require customer confirmation when the change affects them<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Financial or consequential<\/td>\r\n<td>Submit an order, issue a credit, change a paid plan<\/td>\r\n<td>Verify authorization for the exact action and apply the organization\u2019s approval policy before execution<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Broad or hard to reverse<\/td>\r\n<td>Bulk purchases, mass deletion, account ownership changes<\/td>\r\n<td>Keep unavailable to the agent unless a narrowly controlled workflow is explicitly approved<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Classify by impact and reversibility rather than by tool name alone. \u201cUpdate order\u201d may mean correcting a typo or changing the delivery address after dispatch. Those have different risks. Document exceptions and name the policy owner who can approve them. This becomes part of <a href=\"\/blog\/ai-agent-governance\/\">AI agent governance<\/a> and helps teams maintain a consistent rule set as tools change.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">For each operation, answer five questions: Who is requesting it? Which resource can it affect? What exact state change will occur? What evidence authorizes it? How can the action be stopped or reversed? If the team cannot answer one of these, keep that operation in proposal-only mode until the gap is addressed.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Separate_the_agents_proposal_from_execution\"><\/span>Separate the agent\u2019s proposal from execution<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">The model may misunderstand a request, follow hostile instructions in retrieved content, or choose the wrong tool. Do not make its text the final authorization check. Instead, have the agent submit a structured action proposal to application logic that validates the request against account permissions, business rules, and the current state of the target record.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A purchase proposal could contain:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">request_id: unique identifier for this attempt\r\ncustomer_id: verified account identifier\r\naction: create_order\r\nitems: [{sku, quantity}]\r\ncurrency: USD\r\ntotal: amount calculated by the commerce system\r\nshipping_address_id: verified saved address\r\npolicy_version: identifier of the rule set evaluated\r\napproval_status: pending | approved | denied<\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Treat these fields as untrusted until validated. Calculate totals from the commerce system, not from model-generated text. Confirm that each SKU is available, the quantity is allowed, the customer can use the selected address, and the final price still matches the displayed proposal. Reject unknown fields, missing values, unexpected currencies, and values outside the allowed range. The agent\u2019s claim that a customer is verified is not proof of identity; use the system that actually performed verification.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Keep write credentials out of the conversational model where possible. The agent can request an operation through a service that checks authorization and then calls the downstream API. Give each connector only the read or write privileges it needs. This is the practical application of least privilege, and it complements a scoped <a href=\"\/blog\/ai-agent-integration\/\">AI agent integration<\/a> rather than relying on a broad shared account.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Make_approval_specific_to_the_exact_action\"><\/span>Make approval specific to the exact action<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">An approval is useful only if it applies to the operation that eventually runs. A generic \u201capprove purchase\u201d button can be misleading if the item, amount, or destination changes after a person approves it.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Show the approver the information needed to make the decision: requester, item or operation, quantity, total amount, vendor, affected account, and reason. Bind the approval to those details and expire it after a short, defined period. If any material field changes, invalidate the approval and ask again. Keep the approval outside the agent\u2019s editable context so the model cannot rewrite a pending approval as permission for a different transaction.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Approval policy can vary by risk. A routine, low-value request may proceed after the authenticated customer confirms the exact details if the business permits it. A new vendor, unusual quantity, policy exception, or high-impact change may require a designated employee. A bulk action may be prohibited altogether. Use <a href=\"\/blog\/human-in-the-loop-ai-sales-replies\/\">risk-based human review<\/a> to define where a person should review a proposed action, while keeping the actual business rules in the execution layer.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">An approval decision also needs a clear denial path. If the reviewer rejects the request, the agent should not retry through another tool or restate the same request until it gets approval. It should tell the customer that it cannot complete the change and offer an allowed alternative, such as contacting support or selecting a different item.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Confirm_the_transaction_details_with_the_requester\"><\/span>Confirm the transaction details with the requester<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">For customer-initiated changes, summarize the action before execution whenever policy or risk requires confirmation. Name what will be bought or changed, the quantity, total cost and recurring terms where relevant, the destination or account, and any material timing. Avoid asking a vague \u201cShould I proceed?\u201d when the user cannot see what \u201cproceed\u201d means.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">For example:<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">I found 2 replacement filters for order 7814.\r\nThe total is $38.00, shipping to your saved address ending in 42.\r\nThis will charge the card already on the order.\r\nReply CONFIRM to submit this order, or CANCEL to stop.<\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">The commerce service must revalidate the proposal after confirmation. A price, inventory, or shipping change between the summary and the final API call should invalidate the confirmation and produce a new summary. A conversational \u201cyes\u201d from an earlier turn should not authorize a materially different transaction. If the person\u2019s reply is unclear, ask once for clarification or route the case according to policy. Do not infer confirmation from silence, a friendly response, or an unrelated message.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Confirmation is not a substitute for authentication or authorization. It establishes that the requester agreed to the displayed details; it does not grant them access to another customer\u2019s account or override a business restriction. For high-impact actions, require the stronger identity check or independent approval that the organization\u2019s policy specifies.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1679\" height=\"937\" class=\"wp-image-14284\" src=\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-image-1.jpg\" alt=\"AI agent purchase flow with exact confirmation and policy checks before execution\" srcset=\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-image-1.jpg 1679w, https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-image-1-300x167.jpg 300w, https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-image-1-1024x571.jpg 1024w, https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-image-1-768x429.jpg 768w, https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-image-1-1536x857.jpg 1536w\" sizes=\"auto, (max-width: 1679px) 100vw, 1679px\" \/><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Set_limits_that_cover_cumulative_and_repeated_activity\"><\/span>Set limits that cover cumulative and repeated activity<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Limits should exist in the transaction or policy service, not only in the prompt. Useful constraints may include maximum amount per action, daily total, quantity per product, permitted vendors, allowed categories, or number of attempts in a time window. Choose values from business policy and observed risk. The examples below describe limit types, not universal dollar recommendations.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-table\">\r\n<table><colgroup><col style=\"width: 33.33%;\" \/><col style=\"width: 33.33%;\" \/><col style=\"width: 33.33%;\" \/><\/colgroup>\r\n<thead>\r\n<tr>\r\n<th>Control<\/th>\r\n<th>What it can catch<\/th>\r\n<th>What it does not prove<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Per-transaction cap<\/td>\r\n<td>One unusually large request<\/td>\r\n<td>That the item or intent is correct<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Daily or account budget<\/td>\r\n<td>Repeated small actions that add up<\/td>\r\n<td>That a purchase is useful or authorized<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Vendor or category allowlist<\/td>\r\n<td>Requests to unfamiliar or prohibited sellers<\/td>\r\n<td>That an allowed vendor\u2019s item is the right one<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Quantity and frequency limit<\/td>\r\n<td>Duplicate or unusually frequent orders<\/td>\r\n<td>That separate requests are legitimate<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Rate limit and retry budget<\/td>\r\n<td>Tool loops and repeated submissions<\/td>\r\n<td>That a single allowed request has valid details<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Evaluate limits across the relevant scope: agent, customer, organization, project, vendor, and time window. A per-purchase cap can be bypassed in effect if the agent submits many smaller purchases. A daily cap may still be too broad if several agents share it without ownership or attribution. Set a maximum retry count and an overall spend ceiling for model and tool calls so an error loop cannot create unlimited cost.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Use a circuit breaker that pauses the action path when a key control is unavailable, repeated tool failures occur, or unusual activity crosses a defined threshold. A fallback should not silently remove a check because the approval service is down. Keep read-only help available if appropriate, but block the affected write action until the policy check is healthy. Define these <a href=\"\/blog\/stop-ai-agents-over-automating\/\">AI agent stop conditions<\/a> with the workflow owner so a limit breach cannot quietly turn into an unbounded series of attempts.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Prevent_duplicate_and_replayed_actions\"><\/span>Prevent duplicate and replayed actions<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Network timeouts create a common failure: the agent submits an order, receives no response, and tries again. The first request may have succeeded even though the agent did not receive confirmation. Before retrying, check the transaction system using a stable request identifier. Where the downstream service supports idempotency keys, reuse the same key for the same logical request so a retry cannot create a second order.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Design the workflow as a state machine rather than a series of loosely connected messages:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li><strong>Drafted:<\/strong> the system has calculated the proposed action.<\/li>\r\n<li><strong>Awaiting confirmation or review:<\/strong> required details are shown to the right person.<\/li>\r\n<li><strong>Authorized:<\/strong> the exact, unexpired proposal has passed checks.<\/li>\r\n<li><strong>Executing:<\/strong> the request is sent once using a unique identifier.<\/li>\r\n<li><strong>Completed, rejected, or uncertain:<\/strong> the system records the confirmed result or blocks further action pending reconciliation.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Do not let a stale approval move a new proposal directly to execution. Prevent out-of-order transitions and preserve the transaction\u2019s identity across retries. If the downstream system cannot confirm whether a request succeeded, mark it uncertain and send it for reconciliation instead of claiming success or submitting it again. For additional implementation patterns, the <a href=\"\/blog\/ai-agent-audit-trail-leadership\/\">AI agent audit trail guidance<\/a> covers useful action records and review practices.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Decide_how_to_recover_before_enabling_execution\"><\/span>Decide how to recover before enabling execution<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Reversibility is not a checkbox that means \u201cundo is available.\u201d Determine what the downstream system can actually reverse, what the time window is, and whether the customer or another team needs to be notified. An order may be cancellable before fulfillment but not after shipment. A subscription change may take effect immediately even if the interface offers a later reversal. A refund can post twice if the correction process is not tied to the original transaction.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">For each tool, write down the compensating action and the person who can invoke it. Test the recovery using a non-production transaction or a safe simulation. Confirm that a reversal changes the record once, carries the original request identifier, and does not cause another automated workflow to repeat the action. If the downstream system offers no safe reversal, classify the action as higher impact and use stricter authorization before execution.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Make the customer message match the true transaction state. \u201cRequested,\u201d \u201cauthorized,\u201d \u201csubmitted,\u201d and \u201csettled\u201d are different states. If an action is pending, say it is pending. If the result is unknown, do not describe it as complete. A clear status prevents the customer from retrying the request and helps support decide whether it should investigate or wait for the system response.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Keep_the_approval_process_usable\"><\/span>Keep the approval process usable<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">An approval step can fail in practice if every request looks urgent, the approver cannot see the relevant details, or no one owns the queue. Route requests to a role with authority over that action, and show enough context to evaluate the policy without exposing unrelated customer information. The approver should be able to approve, deny, or request clarification, and the agent should receive only the resulting state needed to continue.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Define what happens when no approver responds before the request expires. The safe default is to leave the action pending or cancel the proposal, not to convert the timeout into automatic approval. When a person denies a request, keep the denial tied to that proposal so another prompt or tool cannot silently reopen the same action. If the policy allows resubmission after new evidence, create a new proposal and evaluate it again.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Review approval workload alongside transaction outcomes. A queue with many stale requests may need narrower automation scope, clearer eligibility rules, or better routing. Do not raise dollar thresholds solely to make approval volume fall. First sample the denied, approved, and expired cases and ask whether the decisions match the business policy. That keeps the control meaningful without turning every routine action into unnecessary manual work.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Watch_for_prompt_injection_and_confused_intent\"><\/span>Watch for prompt injection and confused intent<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">An attacker may place instructions in a product page, email, uploaded document, or customer message that tell the agent to ignore its rules or spend money. Treat those instructions as untrusted data. Restrict which tools can be called from each workflow, validate all arguments server-side, and ensure a message cannot expand the agent\u2019s permissions.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Test direct requests such as \u201cbuy the most expensive option,\u201d indirect instructions embedded in a webpage, and benign mentions of malicious phrases. The expected result should be defined at the action boundary: the proposal is rejected, requires confirmation, or enters human review according to the policy. A refusal in the chat is insufficient if a background tool call still executes. Include action checks when you follow an <a href=\"\/blog\/a-simple-guide-on-how-to-test-ai-agents\/\">AI agent testing guide<\/a> and repeat them after changing prompts, tools, permissions, or policy logic.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Choose_approval_rules_from_the_real_business_process\"><\/span>Choose approval rules from the real business process<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Avoid inventing one static dollar threshold for every team. The same amount may be trivial in one setting and consequential in another. A small charge can still be risky if it recurs monthly, goes to a new vendor, affects a regulated service, or is hard to reverse. Base the rule on impact, reversibility, customer authorization, fraud exposure, and the cost of a mistaken action.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Write a decision table with a policy owner:<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-table\">\r\n<table><colgroup><col style=\"width: 33.33%;\" \/><col style=\"width: 33.33%;\" \/><col style=\"width: 33.33%;\" \/><\/colgroup>\r\n<thead>\r\n<tr>\r\n<th>Condition<\/th>\r\n<th>Decision<\/th>\r\n<th>Example next step<\/th>\r\n<\/tr>\r\n<\/thead>\r\n<tbody>\r\n<tr>\r\n<td>Request is in scope, verified, within limits, and reversible<\/td>\r\n<td>Allow the validated action<\/td>\r\n<td>Record the result and notify the requester<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Details are incomplete or ambiguous<\/td>\r\n<td>Pause before execution<\/td>\r\n<td>Ask a specific question or return to a human<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>The amount, vendor, or quantity exceeds policy<\/td>\r\n<td>Require the configured approval<\/td>\r\n<td>Route the exact proposal to an authorized approver<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>Identity, policy, inventory, or approval service is unavailable<\/td>\r\n<td>Fail closed for the write action<\/td>\r\n<td>Keep the request pending or explain the service issue<\/td>\r\n<\/tr>\r\n<tr>\r\n<td>The request is prohibited or approval is denied<\/td>\r\n<td>Reject without retrying through another route<\/td>\r\n<td>Offer an allowed alternative<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Your policy should state who can approve, how long approval remains valid, what happens when the approver is unavailable, and how urgent requests are handled. Review the rules after a real incident or material change to pricing, vendors, payment systems, or permissions. An <a href=\"\/blog\/ai-agent-implementation-checklist\/\">AI agent implementation checklist<\/a> can help make the owners and launch gates explicit.<\/p>\r\n\r\n\r\n\r\n<section class=\"bt-blog-inline-subs-wrap\">\r\n<div class=\"bt-blog-inline-subs-inr inline-subs-v3\">\r\n<h3><span class=\"ez-toc-section\" id=\"Design_safer_agent_workflows_for_real_business_actions\"><\/span>Design safer agent workflows for real business actions<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n<p>Review purchase controls and approval workflows for your specific use case.<\/p>\r\n<div class=\"inline-subs-cta\"><a class=\"bt-glb-btn\" href=\"\/book-demo?source=blog\" target=\"_blank\" rel=\"noopener noreferrer\">Book Now!<\/a><\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Test_the_action_path_before_launch\"><\/span>Test the action path before launch<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Test the full path from natural-language request to downstream result. Include happy paths, missing information, malicious input, failures, and retries. Use synthetic or properly anonymized cases rather than live customer payment details.<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Ask for a purchase without naming quantity, vendor, or destination.<\/li>\r\n<li>Change the price or inventory after the confirmation summary is shown.<\/li>\r\n<li>Reply with an ambiguous confirmation or a confirmation in a different context.<\/li>\r\n<li>Submit the same request twice and simulate a timeout after the first call.<\/li>\r\n<li>Try an amount just below and just above each policy boundary.<\/li>\r\n<li>Use an account that cannot access the requested order or payment method.<\/li>\r\n<li>Include instructions to bypass controls in a product description or email.<\/li>\r\n<li>Disable the approval service, transaction API, and audit event sink one at a time.<\/li>\r\n<li>Deny an approval, then ask the agent to try a different tool or workflow.<\/li>\r\n<li>Verify that a blocked request remains blocked after a model or prompt update.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Check both what the agent says and what the application actually did. A response that says \u201cI did not place the order\u201d is not safe if a background call already submitted it. Track policy decisions, approval state, request identifiers, and execution results without storing unnecessary payment secrets or full card data. Keep audit access restricted, and set a retention period that follows the organization\u2019s policy. An <a href=\"\/blog\/ai-agent-data-retention-what-to-keep\/\">AI agent data retention policy<\/a> can help teams make those decisions deliberately.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Roll out with a narrow set of tools and intents. In a shadow phase, let the agent prepare proposals while a person completes the real action. Compare the proposed action with what the employee chose and identify missing checks. When enabling execution, start with the lowest-risk workflows and a clearly staffed escalation path. Avoid widening limits simply because the first few transactions succeeded; review exceptions, near misses, and repeated human corrections.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Measure_whether_the_controls_are_working\"><\/span>Measure whether the controls are working<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Track the decisions around each action, not only the final purchase count. Useful measures include how often requests are blocked by policy, how often a confirmation expires, duplicate submissions prevented, proposal details changed between approval and execution, timeouts left unresolved, and actions reversed after completion. Review these by tool, customer journey, risk class, and policy version. A quiet week can reflect low volume, a broken integration, or a control that is being bypassed, so interpret the number alongside actual cases.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pair these counts with human review of a sample of allowed and blocked requests. Check whether a rule is preventing a real risk, producing unnecessary friction, or missing an edge case. Ask support and operations staff which cases repeatedly arrive incomplete, and compare the agent\u2019s proposed details with the final system record. A high approval rate is not proof that approval is effective; reviewers may be rubber-stamping requests if the details are hidden or the queue is overloaded.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Give an owner the authority to pause an action path and a regular time to review results. When policy changes, update the rule and its test cases together. When an incident occurs, distinguish a model misunderstanding from a missing permission check, state-management flaw, or unclear business policy. That diagnosis prevents a wording change from being mistaken for a technical fix. The <a href=\"\/blog\/ai-agent-audit-trail-leadership\/\">AI agent audit trail for leadership<\/a> can help teams decide what action evidence should be available for review.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Respond_to_an_unsafe_action_or_near_miss\"><\/span>Respond to an unsafe action or near miss<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Prepare an incident path before launch. Know who can disable a specific tool, revoke credentials, pause a vendor, or cancel a pending transaction. Preserve the request and approval records needed to investigate, but do not expose secrets while collecting evidence.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">When a failure happens:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Stop the affected action type and contain pending requests.<\/li>\r\n<li>Check the downstream system to determine whether the action executed, not just what the agent reported.<\/li>\r\n<li>Reverse or correct the transaction when policy and system capability allow it.<\/li>\r\n<li>Notify the affected customer or team through the approved process.<\/li>\r\n<li>Identify whether the cause was ambiguous intent, bad data, broad permissions, missing confirmation, duplicate execution, or an integration failure.<\/li>\r\n<li>Add a regression case and restore the action only after the control passes review.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Do not restart the entire agent if only one tool is affected, but do not leave a risky action path available while the team investigates. A broader <a href=\"\/blog\/ai-agent-deployment-mistakes\/\">AI agent deployment review<\/a> can help find related rollout weaknesses.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"FAQ\"><\/span>FAQ<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Should_an_AI_agent_be_allowed_to_make_purchases\"><\/span>Should an AI agent be allowed to make purchases?<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">It can be appropriate for a narrowly defined workflow when the business has validated the permissions, transaction checks, confirmation or approval rules, duplicate protections, and recovery path. Start with preparation-only access if the end-to-end controls have not been tested.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Does_a_spending_limit_make_agent_purchases_safe\"><\/span>Does a spending limit make agent purchases safe?<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No. A cap limits the maximum exposure within its scope, but it does not verify customer intent, correctness, identity, vendor, or duplicate requests. Pair limits with policy validation and action-specific authorization.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Should_every_refund_require_human_approval\"><\/span>Should every refund require human approval?<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">That is a business policy decision. Define which refund cases can be handled automatically, what evidence and confirmation they require, and which exceptions need a person. Never claim a refund was issued until the payment system confirms the result.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_if_the_agent_times_out_after_submitting_an_order\"><\/span>What if the agent times out after submitting an order?<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Check the transaction using the original request identifier before retrying. If the result is still uncertain, stop and reconcile with the payment or commerce system. Do not send a second order just to get a clearer response.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Can_a_customers_%E2%80%9Cyes%E2%80%9D_authorize_an_action\"><\/span>Can a customer\u2019s \u201cyes\u201d authorize an action?<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Only when it clearly refers to the current proposal and the requester is authorized. Bind confirmation to the displayed item, amount, quantity, destination, and time window. Ask again if material details change.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_should_the_agent_do_when_approval_is_unavailable\"><\/span>What should the agent do when approval is unavailable?<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Block the write action and explain the next step. It may keep the proposal pending or route it to a person, depending on policy, but it should not bypass the missing approval service.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Make_unsafe_AI_agent_actions_harder_by_design\"><\/span>Make unsafe AI agent actions harder by design<span class=\"ez-toc-section-end\"><\/span><\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">To prevent <strong>unsafe AI agent actions<\/strong>, separate proposal from execution, give tools narrow permissions, bind approval to the exact transaction, verify state changes, and make retries safe. Spending limits are one useful layer, but reliable controls also test intent, identity, scope, approval, and the actual downstream result.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Begin with a small action set and prove the controls against ordinary requests, edge cases, and failures. Expand only when the business owner can explain what the agent may do, what stops it, who can approve exceptions, and how the team will respond when the system behaves unexpectedly.<\/p>\r\n\r\n\r\n\r\n<section class=\"bt-blog-inline-subs-wrap\">\r\n<div class=\"bt-blog-inline-subs-inr inline-subs-v3\">\r\n<h3><span class=\"ez-toc-section\" id=\"Review_the_controls_around_your_AI_agent_workflows\"><\/span>Review the controls around your AI agent workflows<span class=\"ez-toc-section-end\"><\/span><\/h3>\r\n<p>Map safe actions and approval paths across your agent workflow.<\/p>\r\n<div class=\"inline-subs-cta\"><a class=\"bt-glb-btn\" href=\"\/book-demo?source=blog\" target=\"_blank\" rel=\"noopener noreferrer\">Book Now!<\/a><\/div>\r\n<\/div>\r\n<\/section>\r\n","protected":false},"excerpt":{"rendered":"<p>An agent can find a product, fill a cart, or prepare a subscription change in seconds. The risk begins when it can submit the order, &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\"> <span class=\"screen-reader-text\">How to Prevent AI Agents From Making Unsafe Purchases or Actions<\/span> Read More \u00bb<\/a><\/p>\n","protected":false},"author":1,"featured_media":14281,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[845],"tags":[],"class_list":["post-14761","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-security"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Prevent Unsafe AI Agent Actions: Purchase Controls<\/title>\n<meta name=\"description\" content=\"Prevent unsafe AI agent actions with transaction checks, least-privilege tools, exact approvals, spending limits, and safe retries.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Prevent Unsafe AI Agent Actions: Purchase Controls\" \/>\n<meta property=\"og:description\" content=\"Prevent unsafe AI agent actions with transaction checks, least-privilege tools, exact approvals, spending limits, and safe retries.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\" \/>\n<meta property=\"og:site_name\" content=\"Botsify\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/botsifyapp\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-06T06:51:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-06T06:52:17+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1376\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Usama Noman\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Usama Noman\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\"},\"author\":{\"name\":\"Usama Noman\",\"@id\":\"https:\/\/botsify.com\/blog\/#\/schema\/person\/6b2e9c8a3a4e8e4e43722952cad555a9\"},\"headline\":\"How to Prevent AI Agents From Making Unsafe Purchases or Actions\",\"datePublished\":\"2026-11-06T06:51:40+00:00\",\"dateModified\":\"2026-11-06T06:52:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\"},\"wordCount\":3553,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/botsify.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg\",\"articleSection\":[\"Data Security\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\",\"url\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\",\"name\":\"Prevent Unsafe AI Agent Actions: Purchase Controls\",\"isPartOf\":{\"@id\":\"https:\/\/botsify.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg\",\"datePublished\":\"2026-11-06T06:51:40+00:00\",\"dateModified\":\"2026-11-06T06:52:17+00:00\",\"description\":\"Prevent unsafe AI agent actions with transaction checks, least-privilege tools, exact approvals, spending limits, and safe retries.\",\"breadcrumb\":{\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage\",\"url\":\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg\",\"contentUrl\":\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg\",\"width\":1376,\"height\":768,\"caption\":\"AI agent purchase request reviewed before the order is placed\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"blog\",\"item\":\"https:\/\/botsify.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Prevent AI Agents From Making Unsafe Purchases or Actions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/botsify.com\/blog\/#website\",\"url\":\"https:\/\/botsify.com\/blog\/\",\"name\":\"Botsify\",\"description\":\"Botsify Blog | AI Agents, Automation &amp; Business Growth\",\"publisher\":{\"@id\":\"https:\/\/botsify.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/botsify.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/botsify.com\/blog\/#organization\",\"name\":\"Botsify\",\"url\":\"https:\/\/botsify.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/botsify.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2025\/09\/Botsify-Logo-180x60-1.png\",\"contentUrl\":\"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2025\/09\/Botsify-Logo-180x60-1.png\",\"width\":563,\"height\":188,\"caption\":\"Botsify\"},\"image\":{\"@id\":\"https:\/\/botsify.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/botsifyapp\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/botsify.com\/blog\/#\/schema\/person\/6b2e9c8a3a4e8e4e43722952cad555a9\",\"name\":\"Usama Noman\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/botsify.com\/blog\/#\/schema\/person\/image\/ccd36887e794c9e38aa1c4bc082bb537\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dda59e851dd3ef44f9242953af7755f56b416a0c7269c7c922e3bbb0f89b6f2f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dda59e851dd3ef44f9242953af7755f56b416a0c7269c7c922e3bbb0f89b6f2f?s=96&d=mm&r=g\",\"caption\":\"Usama Noman\"},\"url\":\"https:\/\/botsify.com\/blog\/author\/rootadmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Prevent Unsafe AI Agent Actions: Purchase Controls","description":"Prevent unsafe AI agent actions with transaction checks, least-privilege tools, exact approvals, spending limits, and safe retries.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/","og_locale":"en_US","og_type":"article","og_title":"Prevent Unsafe AI Agent Actions: Purchase Controls","og_description":"Prevent unsafe AI agent actions with transaction checks, least-privilege tools, exact approvals, spending limits, and safe retries.","og_url":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/","og_site_name":"Botsify","article_publisher":"https:\/\/www.facebook.com\/botsifyapp","article_published_time":"2026-11-06T06:51:40+00:00","article_modified_time":"2026-11-06T06:52:17+00:00","og_image":[{"width":1376,"height":768,"url":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg","type":"image\/jpeg"}],"author":"Usama Noman","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Usama Noman","Est. reading time":"16 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#article","isPartOf":{"@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/"},"author":{"name":"Usama Noman","@id":"https:\/\/botsify.com\/blog\/#\/schema\/person\/6b2e9c8a3a4e8e4e43722952cad555a9"},"headline":"How to Prevent AI Agents From Making Unsafe Purchases or Actions","datePublished":"2026-11-06T06:51:40+00:00","dateModified":"2026-11-06T06:52:17+00:00","mainEntityOfPage":{"@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/"},"wordCount":3553,"commentCount":0,"publisher":{"@id":"https:\/\/botsify.com\/blog\/#organization"},"image":{"@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage"},"thumbnailUrl":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg","articleSection":["Data Security"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/","url":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/","name":"Prevent Unsafe AI Agent Actions: Purchase Controls","isPartOf":{"@id":"https:\/\/botsify.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage"},"image":{"@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage"},"thumbnailUrl":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg","datePublished":"2026-11-06T06:51:40+00:00","dateModified":"2026-11-06T06:52:17+00:00","description":"Prevent unsafe AI agent actions with transaction checks, least-privilege tools, exact approvals, spending limits, and safe retries.","breadcrumb":{"@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#primaryimage","url":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg","contentUrl":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2026\/10\/13348-blog-thumbnail.jpg","width":1376,"height":768,"caption":"AI agent purchase request reviewed before the order is placed"},{"@type":"BreadcrumbList","@id":"https:\/\/botsify.com\/blog\/ai-agent-unsafe-actions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"blog","item":"https:\/\/botsify.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Prevent AI Agents From Making Unsafe Purchases or Actions"}]},{"@type":"WebSite","@id":"https:\/\/botsify.com\/blog\/#website","url":"https:\/\/botsify.com\/blog\/","name":"Botsify","description":"Botsify Blog | AI Agents, Automation &amp; Business Growth","publisher":{"@id":"https:\/\/botsify.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/botsify.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/botsify.com\/blog\/#organization","name":"Botsify","url":"https:\/\/botsify.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/botsify.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2025\/09\/Botsify-Logo-180x60-1.png","contentUrl":"https:\/\/botsify.com\/blog\/wp-content\/uploads\/2025\/09\/Botsify-Logo-180x60-1.png","width":563,"height":188,"caption":"Botsify"},"image":{"@id":"https:\/\/botsify.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/botsifyapp"]},{"@type":"Person","@id":"https:\/\/botsify.com\/blog\/#\/schema\/person\/6b2e9c8a3a4e8e4e43722952cad555a9","name":"Usama Noman","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/botsify.com\/blog\/#\/schema\/person\/image\/ccd36887e794c9e38aa1c4bc082bb537","url":"https:\/\/secure.gravatar.com\/avatar\/dda59e851dd3ef44f9242953af7755f56b416a0c7269c7c922e3bbb0f89b6f2f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dda59e851dd3ef44f9242953af7755f56b416a0c7269c7c922e3bbb0f89b6f2f?s=96&d=mm&r=g","caption":"Usama Noman"},"url":"https:\/\/botsify.com\/blog\/author\/rootadmin\/"}]}},"authors":[],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/posts\/14761","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/comments?post=14761"}],"version-history":[{"count":3,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/posts\/14761\/revisions"}],"predecessor-version":[{"id":14764,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/posts\/14761\/revisions\/14764"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/media\/14281"}],"wp:attachment":[{"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/media?parent=14761"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/categories?post=14761"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botsify.com\/blog\/wp-json\/wp\/v2\/tags?post=14761"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}