Go Back

Shopify Double Charge Tickets: Rules for Your AI Agent

An AI agent can handle a "double charge" ticket safely if three things are clear before you switch it on: what it reads in the order, which actions it can take alone, and when it must pass the ticket to a person. Write those rules once. Each ticket then gets the same check and the same decision, whoever is on shift and whatever the hour.

This guide covers those rules. If you want the replies to send the customer in each case, read our guide on how to reply when a Shopify customer is charged twice, listed at the end of this article. This guide answers a different question: what should your agent be allowed to do on its own?

What the agent reads before it decides

A "charged twice" message is a claim. The agent checks it against Shopify data, never against the customer's wording. Give it this checklist.

About the customer:

  • Every order placed by the customer's email in the days around the order they mention.
  • Orders with the same shipping address or phone number but another email. People who think a payment failed often try again with a different email or card.

About each matching order:

  • The line items and quantities.
  • The shipping address.
  • The time the order was placed.
  • The fulfillment status: unfulfilled, partly fulfilled or fulfilled.
  • The payment status and the transactions in the order timeline. This shows whether money was only authorized or actually captured, and how many times.
  • The payment method used: Shopify Payments, PayPal or another gateway.
  • Any refund already issued.
  • Any dispute or chargeback already opened.

If the agent can't find an order, it doesn't guess. It asks the customer for the order number or the email used at checkout.

Define "duplicate order" in writing

Most bad automation comes from a vague definition. "Two similar orders" is not enough. Here is a strict version you can adapt. Two orders count as duplicates when all of these are true:

  • Same customer, matched by email, phone or shipping address.
  • Same line items, same quantities.
  • Same shipping address.
  • Placed within a time window you choose, for example 30 minutes.
  • Neither order has a refund on it yet.

If any condition fails, the orders are not duplicates for the agent. A different address often means a gift. A different quantity often means a second, wanted purchase. In both cases the agent asks the customer before it touches anything.

The decision tree, by permission level

You decide which actions the agent can take. Each situation below shows what the agent does when refunds and cancellations are within its permissions, and when they are not.

  • One order, one captured payment. With refund and cancellation permission: explains it's a pending bank hold, no refund. Without that permission: same, no refund is needed.
  • Two duplicate orders, both unfulfilled. With permission: cancels the newer order and refunds it in full. Without permission: hands the ticket to your team.
  • Two duplicate orders, one or both fulfilled. With permission: sends the return steps for the extra order. Without permission: same, or hands the ticket to your team if your return rules have exceptions.
  • Two matching orders, different addresses. With or without permission: asks the customer which one they want.
  • One order, two captured payments. With or without permission: hands the ticket to your team.
  • A dispute or chargeback is open. With permission: hands the ticket to your team and takes no action on the payment. Without permission: hands the ticket to your team.
  • A refund was already issued. With or without permission: confirms the existing refund, no second one.

Notice the pattern. The agent acts alone only when the order data gives a clear answer: an unfulfilled order your rules define as a duplicate. Anything that touches the payment itself goes to a person.

When the agent must hand off

Write these as hard stops. The agent doesn't weigh them against anything else.

  • Two captured payments on one order. This is a payment problem, not a support one. The person who handles payouts contacts the payment provider: Shopify Support for Shopify Payments, or the gateway directly for PayPal and others.
  • An open dispute or chargeback. A refund outside the dispute can leave you paying twice. Your team answers through the provider. Our guide on replying to a PayPal dispute opened by a customer, listed at the end of this article, covers that path.
  • The customer says they will contact their bank. The agent replies with the facts, then hands the ticket to your team so a person follows it.
  • The data doesn't match the claim. One order, one payment, but the customer sends a statement showing two completed charges. A person looks at it.

Add one rule for your team as well: a refund amount above which only a named person signs off. Pick your own limit and write it down, so whoever picks up a large double charge ticket knows if they can refund it or must pass it on.

Decide in advance who receives these tickets. Our guide on who decides escalated Shopify tickets, listed at the end of this article, helps you pick between the owner and a team lead.

What your team should have in hand

A handoff only saves time if the person can act without opening five tabs. Use this as the model of what your team should know before they act on a double charge ticket:

  • Double charge claim, order 1042.
  • Orders found for this customer: 1042 only.
  • Payment: Shopify Payments, two captured transactions of the same amount, two minutes apart.
  • Fulfillment: unfulfilled.
  • Refunds: none.
  • Dispute: none open.
  • Customer attached a statement screenshot.
  • Customer has been told we are checking with the payment provider. No date promised.

Every line comes from the checklist above. If your team can answer each one in a few seconds, they know what to do next.

Three guardrails that prevent costly mistakes

  • One refund per claim. Before refunding, the agent checks for an existing refund on both orders. Two people (or a person and the agent) refunding the same duplicate is an easy mistake to make.
  • Never refund an authorization. If the money was only authorized and not captured, there is nothing to refund. The bank releases the hold.
  • No dates the store doesn't control. The agent never promises when a hold drops off or when a refund shows on a statement. The bank decides that.

Test the rules before going live

Pull a handful of past "charged twice" tickets from your inbox. For each one, write down what your rules would have made the agent do, then compare with what your team actually did. Look for two things:

  • Tickets where the rules would have refunded and your team didn't. That usually means your duplicate definition is too loose.
  • Tickets where the rules would have handed off and your team solved them in one click. That usually means you can safely give a bit more permission.

Adjust, then switch the rules on. Check the first live tickets by hand before you stop watching.

How Relay fits this

Relay answers, refunds and resolves your Shopify tickets 24/7, following your rules. On a double charge ticket it finds the order in Shopify, applies the rules you wrote, acts within the permissions you gave it, and knows when to bring in your team.

If you want to see your own double charge rules running on real orders, set them up during the trial.

FAQ

Should an AI agent be allowed to refund double charges on its own? Only for clear cases you define in writing, such as cancelling an unfulfilled duplicate order. A second captured payment on one order, or an open dispute, should always go to a person.

What's the difference between a duplicate order and a double charge? A duplicate order is two separate orders, each paid once. You fix it by cancelling and refunding one of them. A double charge is one order with two captured payments, and you fix it with your payment provider.

How does the agent know a "second charge" is only a pending hold? It checks the order transactions in Shopify. If there is one order and one captured payment, the store charged once. Anything else the customer sees is on the bank's side.

What if the customer has already opened a chargeback? The agent stops all payment actions and hands the ticket to your team. The answer goes through the payment provider. For prevention, see our guide on Shopify chargeback prevention, listed at the end of this article.

Ready to replace your first support hire?

Join fast-growing Shopify stores automating 80–95% of customer support in under 10 minutes.

Start Free Trial

From $59/month • 14-day trial