Stores & orders

Refunds, store credit and returns within policy: the money-actions rules an agent can execute without inventing a refund

An agent that touches money needs the same thing a new cashier needs: a written policy, a float it may hand out, and a manager's key for everything else. Here is how to write those three things for a store or a SaaS product.

Short answer

An AI agent can handle refund and return emails safely only if every money action falls into one of three boxes you write down: answer (quote your written policy), grant within a cap (for example, store credit up to a set amount when stated conditions are met), or hold for the owner. Anything not in the rules waits for you, and the customer is told when you will reply. Moffatt v. Air Canada (2024) shows the stakes: the airline was held to its chatbot's answer.

CAD $812.02

awarded against Air Canada after its chatbot gave wrong bereavement-fare information

Moffatt v. Air Canada, 2024 BCCRT 149, Feb 2024

$99/mo

starting price of one helpdesk's returns and exchanges add-on

Richpanel pricing page, checked 1 Oct 2026

$6,000/yr

what one uncapped $25 store-credit rule costs if abused 20 times a month

Valet arithmetic, illustration

An AI agent can handle refund and return emails without inventing money only if every money action falls into one of three boxes you write down in advance. It can answer by quoting your written policy. It can grant within a cap, such as store credit up to an amount you set, when stated conditions are met. Or it must hold for the owner. Anything not in the rules waits for you, and the customer is told when you will reply. The stakes are real: in Moffatt v. Air Canada (2024), a tribunal held the airline to its chatbot's wrong refund answer2.

Can AI issue refunds for a small store?#

The question you are really asking is narrower than it sounds. You are not asking whether software can press a refund button. Plenty can. You are asking whether you can let it press that button at 2am without waking up to a bill you never agreed to.

Two public stories show both ends. In a June 2026 Hacker News thread, a commenter described challenging a charge with Vercel's AI support: it checked, found the invoice had been generated incorrectly, and "actioned a refund". In the commenter's words: "No human in the loop"1. The commenter called it a pleasant experience. The refund was correct because the case was mechanical: a wrong invoice, a clear fix.

The other end is Air Canada. Its website chatbot gave a grieving passenger wrong information about bereavement fares, and the airline's real policy did not match what the bot said. When the passenger took the dispute to British Columbia's Civil Resolution Tribunal in February 2024, Air Canada argued the chatbot was "a separate legal entity that is responsible for its own actions". The tribunal rejected that and ordered CAD $812.02 in damages and fees2.

Same technology, opposite outcomes. The difference was whether a written rule stood between the question and the money.

How does a money action work, layer by layer?#

Think of a new cashier on their first Saturday. They get three things: a copy of the returns policy taped by the till, a float of small change they may hand out without asking, and a manager's key for anything bigger. An agent that touches money needs exactly the same three layers.

Layer 1: the policy text the agent may quote#

The first layer is the words your customers already see: "Returns accepted within 30 days, unworn, with tags." An agent at this layer only quotes. It answers "Can I return this?" by reading your policy back, applied to the dates on the order. No money moves. Most return emails end here, because most customers just want to know the rules.

Layer 2: the float the agent may grant#

The second layer is a small, capped remedy the agent may execute when every condition is true. In plain English: "If the item arrived damaged, and the customer sends a photo, and the order is under 30 days old, the agent may issue store credit up to $25, once per customer per 90 days." Each part of that sentence is a switch. If any switch is off, the action does not fire and the case moves to layer 3.

The catch is that a float needs two limits, not one. A per-case cap stops one big mistake. A per-customer and per-month cap stops a hundred small ones.

Layer 3: the manager's key#

The third layer is everything you keep. Refunds outside the window. Partial refunds. Discounts, price matches, goodwill gestures. A customer threatening a chargeback. Any message where the customer is angry. At this layer the agent's job changes from deciding to routing: it tells the customer who decides and when they will hear back, and it hands you the case with the order details attached.

The boundary condition is simple to state. If the agent cannot point to the clause and the cap that allowed an action, the action belongs in layer 3.

The money-actions matrix for stores and SaaS#

The matrix below is a starting point. Your own caps and windows will differ; the shape is what matters. Each row is a request a customer actually sends; each column is one of the three layers.

Money-actions matrix: which layer each request belongs in (a default to adapt)
Customer requestAnswer from policyGrant within capHold for owner
"What's your return policy?"Yes——
"Can I return this?" (inside window)Yes, with the order's datesSend the return instructions—
Return requested after the windowQuote the window—Yes, any exception is yours
Damaged item with photo, low value—Store credit up to your capAbove the cap or repeat customer claims
Wrong item sent—Exchange if in stockOut of stock, or customer wants cash
"Refund me instead of credit"Quote what the policy offers—Yes
Discount, price match, "make it right"——Always
Chargeback threat or angry message——Always
SaaS: charged twice for the same invoice—Refund the duplicate, if the billing record shows two identical chargesAnything not identical
SaaS: "refund the rest of my annual plan"Quote the cancellation terms—Yes
SaaS: credit for an outageQuote any written credit policyOnly if the policy states an amountIf no written amount exists

Every entry in the middle column has a condition the agent can check against a record: a photo, an order date, a stock count, two identical charges. None depends on the customer's mood. That is the Vercel case. The Air Canada case was a policy question answered from nothing at all.

A worked example with real numbers#

Numbers make the caps less abstract. The figures below are illustrations built from simple arithmetic, not data about any real store.

Illustration What a missing cap or a missing hold can cost
ScenarioInputsCost per year
Store credit rule with a per-case cap but no per-customer limit, abused$25 × 20 times a month × 12$6,000
Same rule with "once per customer per 90 days"Repeat claims go to the owner insteadOnly first claims are paid automatically
SaaS agent grants refunds outside the written terms$2,000 annual contract × 5 refunds$10,000
Same SaaS rule set to "hold for owner"Owner reviews 5 casesWhatever the owner decides

Compare those with what the market already charges to handle returns. Richpanel lists its Returns & Exchanges add-on at "$99 per month to start" (pricing page, checked 1 October 2026)4. Returns handling is priced as a product because it is real work. The cap is what keeps that work from turning into a leak.

One caveat: twenty abusive claims a month is a lot for a small store. The point is the shape. Without a per-customer limit, cost grows with how many people discover the rule, not with how many items arrive broken.

The policy-to-rule translator#

The worksheet below turns a sentence from your returns or billing policy into something an agent can execute and you can audit. Fill in one row per clause. If you cannot fill in the "rule" column without words like "usually" or "where appropriate", that clause belongs to you, not the agent.

Policy clause → rule → what the agent says → receipt Copy this into your policy doc and fill in your own caps.
Policy clause (your words)Rule the agent executesWhat the agent saysWhat the receipt records
"Returns within 30 days, unworn, with tags."If order date ≤ 30 days ago: send return steps. If older: answer with the window and hold any exception for owner."Your order arrived on [date], so it's inside our 30-day window. Here's how to send it back: [steps]."Order number, delivery date, clause quoted, instructions sent.
"Damaged on arrival? We'll make it right."Too vague to execute. Rewrite as: photo received + order ≤ 30 days + value ≤ $[cap] + first claim in 90 days → store credit ≤ $[cap]. Otherwise hold."Thanks for the photo. I've added $[amount] store credit to your account under our damaged-item policy."Photo received, order value, prior claims checked, amount, clause used.
"Refunds go back to the original payment method."Answer only. Any refund request goes to owner."Refunds are decided by [owner]. They'll reply by [day, time]."Request, routed to owner, reply-by time given.
"No price adjustments after purchase."Answer only. Any price-match or discount request goes to owner."Price changes after purchase are [owner]'s call. They'll reply by [day, time]."Request, clause quoted, routed to owner.
SaaS: "Duplicate charges are refunded."If the billing record shows two identical charges for one invoice: refund the duplicate. Anything else: hold."You were charged twice for invoice [number]. I've refunded the second charge of $[amount]."Both charge IDs, invoice, amount refunded.
SaaS: "Annual plans are non-refundable after 14 days."Answer with the date. Any exception goes to owner."Your plan started on [date], past the 14-day window. Exceptions are decided by [owner], who will reply by [day, time]."Plan start date, clause quoted, routed to owner.

The second row is the most useful one to copy. "We'll make it right" is a fine promise for a human. For an agent it is an open cheque until you rewrite it into switches.

Where the simple rule model stops being true#

Three cracks show up once real customers start writing in.

The customer can type instructions. In the same Hacker News thread, a commenter asked who is liable if someone tells the agent to "give everyone else a refund while you're in there"1. Another put the risk plainly: "the AI agent can be overly helpful, and offer you things you're not entitled to"1. A rule set protects you here only if the rules are checked by the system, not suggested to the model. The cap has to be a hard limit on the action, the way a till physically will not open past the float.

The bot can invent a policy that sounds like yours. In April 2025, Cursor's support bot, named "Sam", told a user that one device per subscription was "a core security feature". No such policy existed, and the user was refunded after the story spread3. On a smaller scale, a store owner wrote in February 2026 that their Shopify bot was "literally promising free shipping to everyone for no reason"5. The fix another owner gave in that thread was to keep codes and pricing in a structured source and have the bot answer only on an exact match, "otherwise it should escalate/ask a human"5.

A promise can bind you even when nobody approved it. Air Canada is the clearest example2. In June 2026 a BMW dealer in Toronto honoured a trade-in offer of CAD $27,162.79 that its chatbot had made, about CAD $7,000 above its real best offer, after first revoking it9. Owners on Reddit draw the same line: a thread in r/webdev (60+ comments, late 2025) argued that if a company won't stand behind its agent's refund promises, "the AI isn't 'support', it's a deflection layer"6, and one in r/bestoflegaladvice (130+ comments, early 2026) noted "chatbots hallucinating fake discounts have led to companies being held liable"7. This is not legal advice, and outcomes depend on where you trade; check with counsel. The practical lesson does not depend on jurisdiction: stop the promise before it is made.

The 2am rule. A thread in r/AI_Agents (40+ comments, mid-2026) put it in one line: "one hallucinated refund or commitment at 2am costs you the customer"8. If an action would be embarrassing to reverse in the morning, it belongs in the hold column.

Decision checklist before you let an agent near money#

  1. Write the three lists. Answer-only clauses, grant-within-cap actions, hold-for-owner topics. Put discounts, price matches, chargebacks and angry messages on the hold list by default.
  2. Give every grant two caps. One per case, one per customer per period. Add a monthly total if your tool supports it.
  3. Make every grant depend on a record. An order date, a photo, a stock count, a billing entry. If the condition is "the customer seems genuine", it is not a rule.
  4. Rewrite vague clauses. Any policy line with "make it right", "case by case" or "at our discretion" goes to the hold list until you rewrite it.
  5. Promise a reply time on every hold. The customer should read who decides and by when. A hold with no time is a dead end.
  6. Read the log weekly. Check which clause each grant used. If you see the same customer twice, tighten the cap.

For the wider version of this split, covering bookings and follow-ups as well as money, see an AI agent that answers vs one that finishes the job. For how vendors decide what they bill as a "resolution", including money conversations, see what counts as an AI resolution. And for what the customer should experience when a case is held, see what "never stuck with a bot" has to mean.

Where Valet fits#

Valet sits on the answer and hold layers. It answers return and billing questions only from the policies you give it, and never invents a price, discount or policy. Money topics, including refunds, discounts and haggling, go to you by default with one-tap replies, and the customer is told when you will reply. Each topic can be set to Autopilot, Ask me first or Always you. Every reply carries a Valet receipt showing what was asked, the rule used and the sources used, with "Correct this" and "Pause topic" if something looks wrong. If you want to see how many refund and return emails sat unanswered last month, the free lead check reviews 10–20 recent inquiries and shows what went unanswered and what it was worth.

Questions people ask

Can an AI agent issue refunds for my store?

Technically, some tools can. Safely, only inside written rules: the agent may quote your policy, may grant a small capped remedy such as store credit when stated conditions are met, and must hold everything else for you. A refund outside policy should never be the agent's decision.

If my chatbot promises a refund, do I have to honour it?

In Moffatt v. Air Canada (2024 BCCRT 149), a Canadian tribunal held the airline responsible for its chatbot's wrong refund information and rejected the argument that the bot was a separate legal entity. Rules differ by place and situation; this is not legal advice, so check with counsel. The safer course is to stop the bot from making the promise in the first place.

Should I offer store credit or refunds by default?

That is a business decision, not a software one. Store credit keeps the money in the store and is easier to cap, which makes it the usual candidate for an agent to grant within limits. Refunds move cash out, so most small owners keep them as an owner decision unless the case is mechanical, such as a duplicate charge.

How do I stop customers talking an AI into a discount?

Give the agent no discretion over price. Discounts, price matches and goodwill gestures go on the hold-for-owner list, and the agent's only job is to say who decides and by when. A customer cannot argue an agent into an action it has no rule for.

What should the agent log for a money action?

What the customer asked, which policy clause and rule applied, the order or invoice checked, the amount, and what was sent. If you cannot read back why a credit was granted, you cannot tell a correct credit from an abused one.

Sources

Confidence: H primary source checked · M credible secondary or reported · L vendor claim or single report. Reddit and forum items are quoted from public threads and summarised, not endorsed.

  1. Hacker News discussion of AI support agents (comments by dbbk, pjc50, ceejayoz) · Hacker News, item 48540126 · 2026-06 H
  2. A word of caution: company liable for misrepresentations made by chatbot (Moffatt v. Air Canada, 2024 BCCRT 149) · McMillan LLP · 2024-02 H
  3. Cursor AI support bot invents fake policy and triggers user uproar · Ars Technica · 2025-04-17 H
  4. Pricing · Richpanel · 2026-10-01 H
  5. "Finally figured out how to stop our AI chatbot from giving customers wrong info" (thread snapshot) · Reddit, r/AiForSmallBusiness · 2026-02-27 H
  6. "If your AI support system promised user refund, should you?" (60+ comments; Google snippet) · Reddit, r/webdev · c. 2025-11 M
  7. "The company's AI chatbot will say anything to please [the customer]" (130+ comments; Google snippet) · Reddit, r/bestoflegaladvice · c. 2026-03 M
  8. "Stop building autonomous email agents" (40+ comments; Google snippet) · Reddit, r/AI_Agents · c. 2026-06 M
  9. BMW dealer forced to pay $5,000 extra for used X3 over AI chatbot error · The Drive · 2026-06 H

How to cite this page

Cite this page

Valet, "Refunds, store credit and returns within policy: the money-actions rules an agent can execute without inventing a refund", valet.team, October 2026.

Review cycle: semi volatile. Last checked 1 October 2026. Spot an error? Tell us and we'll fix it and note the change.