How Should an AI Support Agent Handle Klarna, Afterpay and Shop Pay Refund Questions? What the Merchant Can Do and What the Provider Must (2026)
Klarna, Afterpay, Affirm and Zip all tell Shopify merchants to issue refunds in the Shopify admin, and for stores on the Klarna payments app, Klarna says a refund made in Shopify reaches the Klarna order in under 10 minutes. So when a customer writes "where is my Klarna refund?", the store's half of the answer sits on the Shopify order, and the rest (when the money lands, which installment shrinks, whether Friday's payment still comes out) is set by the provider's published rules. An AI support agent can read the first half and quote the second. It shouldn't move money on a payment plan it can't see. We read the refund pages of Shop Pay Installments, Klarna, Afterpay, Affirm, Sezzle and Zip on 28 September 2026, checked which of their merchant APIs take a static key, and ran a read-only agent on two made-up tickets in our own test setup. This page covers what the agent can look up, what it should tell the customer for each provider, and which cases go to a person.
Key takeaways
- Klarna, Afterpay, Affirm and Zip all tell Shopify merchants to refund BNPL orders in the Shopify admin, and Klarna warns that refunding in its own portal can desync orders and duplicate refunds.
- After the store refunds, Afterpay and Affirm take the money off the last installments first, and Afterpay says money owed back to a card can take up to 10 business days.
- In our 28 September 2026 test, Macha's Shopify Get Order tool returned the financial status and refunds but no payment gateway field, so the agent couldn't confirm Klarna from Shopify alone.
- Klarna, Afterpay and Affirm merchant APIs accept static Basic credentials, while Sezzle issues expiring tokens and Zip's US API needs OAuth plus a signature header.
- Refund windows cap what anyone can do: Klarna on Shopify Payments allows refunds within 180 days of the charge, and Affirm on Shopify within 120 days of capture.
What can an AI support agent look up and say for each BNPL provider?
The table maps six BNPL providers that sell to Shopify stores. "Refund starts in" is where the provider tells a Shopify merchant to issue it. "After the refund" is what the provider's own help center says the shopper sees. The API column is whether an agent could read the provider's record with a credential that doesn't expire, which is what a Macha custom API tool needs.
| Provider | How it runs on Shopify | Refund starts in | After the refund, per the provider | Published timing | Merchant read API and auth | Static credential? |
|---|---|---|---|---|---|---|
| Shop Pay Installments | Shopify's own checkout, loans provided by Affirm | Shopify admin | A partial refund means a smaller final payment or fewer payments; paid interest isn't refunded (Shopify FAQ) | Not stated by Shopify; Affirm says 3 to 10 business days for money already paid | None found; the order lives in Shopify | Not needed |
| Klarna | Klarna payments app, or Klarna for Shopify Payments | Shopify admin; Klarna says the portal causes desync (Klarna docs) | Refund comes off the total balance; reporting a return pauses payments | Original payment method after 14 days unless a Klarna balance is used (Klarna) | Order Management API, GET /ordermanagement/v1/orders/{order_id}, HTTP Basic | Yes, if the merchant has API credentials |
| Afterpay | Afterpay app | Shopify admin, not the Business Hub (Afterpay merchant help) | Last installment reduced first, then the one before | Up to 10 business days to the card (Afterpay) | Online API, GET /v2/payments/{orderId}, Basic (Merchant ID and Secret Key) | Yes |
| Affirm | Affirm Payments app | Shopify, to keep statuses synced (Affirm docs) | Applied to the final payments first; paid interest not refunded | 3 to 10 business days for money already paid (Affirm) | Transaction API, GET /api/v1/transactions/{id}, Basic (public and private key) | Yes |
| Sezzle | Sezzle Payments app | Not stated in Sezzle's Shopify guide | Plan updates once the merchant confirms | Up to 10 business days (Sezzle) | API needs a bearer token from POST /v2/authentication, which expires | No, not feasible today |
| Zip | Zip payment gateway | Shopify order page (Zip docs) | Zip credits existing or future installments | Canceled order: up to 13 days from the order date; no separate timing published for returns (Zip) | US API uses OAuth client credentials and an X-QP-Signature header | No, not feasible today |
The first column explains most of the support load. Each provider, including Affirm behind Shop Pay Installments, is a lender with its own app, schedule and support team, so the store sees the order while the shopper sees the plan, and a ticket arrives when the two don't agree yet.
Klarna's reason is mechanical. A refund issued in its Merchant portal doesn't write back to the Shopify order, so the next refund from Shopify can pay the customer twice. The same logic applies to an AI agent: if it calls a provider's refund endpoint while the store runs refunds in Shopify, it creates exactly the desync Klarna warns about. That's why the API column above is about reading, and why every write on this page happens in Shopify or not at all.
What do customers actually ask about a BNPL refund?
Five questions come up on BNPL refund tickets, and they split by who holds the answer.
| Customer question | Who holds the answer | What an agent can do |
|---|---|---|
| "Has my refund gone through?" | Shopify, on the order | Read the order's financial status and refund lines |
| "Do I still have to pay on Friday?" | The provider | Quote the provider's rule; point to the provider's app for the schedule |
| "Why did my next payment not go down?" | The provider | Explain which installment the provider reduces first |
| "Will I get my interest back?" | The provider | Quote Shopify's and Affirm's rule: paid interest isn't refunded |
| "Can you refund just one item?" | The store | Hand off: a partial refund is a person's job in Shopify (see below) |
The second question depends most on the provider. Each one handles "I've sent it back but the refund isn't through yet" differently. Klarna pauses payments as soon as the shopper reports the return in the Klarna app, and if the store hasn't registered it after 21 days, Klarna can open an investigation (Klarna); those investigations can take 30 to 50 days (Klarna). Afterpay moves the next payment to a later date when a return is reported, but if the report lands within 24 hours of the due date, Afterpay may not be able to move that payment. Zip's Report a Return pushes the next payment back two weeks. Affirm tells shoppers to keep an eye on payments that are due while they wait (Affirm). An agent that knows which rule applies can tell the customer how to stop the next charge, which is the thing they actually wrote in about.
Partial refunds change the schedule in a way shoppers may not expect. Afterpay's merchant help gives its own example: on a $100 order where the shopper has paid one $25 installment, a $60 refund cancels the fourth and third installments and cuts the second to $15. The shopper who expected four smaller payments sees one reduced payment and two gone, and writes in thinking the store refunded the wrong amount.
What can an AI agent read in Shopify, and what can't it see?
On a Shopify store the refund is a Shopify object, so the order is where an agent starts. Macha's Shopify connector is built in and gives an agent eight tools, walked through in the Macha Shopify integration guide: Search Orders, Get Order, Lookup Customer, Customer Orders, Search Products, Get Discounts, Cancel Order and Create Refund. For a refund question the read tools are Get Order and Search Orders.
In our test on 28 September 2026, Get Order returned the order's financial status (PAID on the order we used), fulfillment status, totals, line items, fulfillments and a refunds list, plus the customer's contact and shipping details. It didn't return a payment gateway field. That matters here: the agent can see that an order was paid and whether a refund exists, but it can't confirm from the Get Order output that the order was paid with Klarna rather than a card. In practice that's fine, because the customer almost always names the provider in the ticket, and the refund status comes from Shopify either way. But the agent should take the provider from the customer and not claim to have checked it.
Three things an agent can't see from Shopify at all:
- The installment schedule. Due dates, how many payments are left and whether one is paused live in the provider's app.
- Whether the provider has applied the refund. For stores on the Klarna payments app, Klarna says a Shopify refund updates the Klarna order in under 10 minutes; the other providers don't publish a sync time. Shopify showing a refund doesn't prove the plan has changed yet.
- Interest and fees. Shopify's FAQ says the Shop Pay Installments transaction fee isn't returned to the merchant on a refund, and paid interest isn't returned to the customer.
Both rules follow the lender's business model. The merchant's fee pays for the lender's risk and interest is the lender's revenue, so the incentive runs one way and neither is refunded when the purchase is. Shopify's FAQ puts it plainly: "Interest is the cost of borrowing, and isn't refundable." An agent that says so upfront saves the follow-up ticket asking where the rest of the money went.
Which BNPL provider APIs can an AI agent read with a static key?
For a merchant who wants the agent to go past Shopify, the provider's own record adds refund amounts and dates from the provider's side. Here's what each API documents, as read on 28 September 2026. Anything outside Shopify connects through a custom API tool that Macha's team sets up during onboarding, and Macha's custom tools support Basic Auth, so the three Basic-auth APIs are buildable.
- Klarna Order Management API.
GET /ordermanagement/v1/orders/{order_id}with HTTP Basic auth returns the Klarna order's status, captured amount and refunded amount (Klarna API reference). The key is Klarna's order ID, not the Shopify order number, and a merchant needs Klarna API credentials. We didn't confirm whether stores using Klarna through Shopify Payments get those credentials. - Afterpay Online API.
GET https://global-api.afterpay.com/v2/payments/{orderId}returns the order status and a refunds array, with Basic auth where the Merchant ID is the username and the Secret Key the password (Afterpay authentication). List Payments can filter bymerchantReferences, which is the route to take when all you have is the store's own order reference. - Affirm Transaction API.
GET https://api.affirm.com/api/v1/transactions/{transaction_id}with Basic auth (Affirm Read Transaction). Again the key is Affirm's ID, not the Shopify order number. - Sezzle. Every call needs a bearer token from
POST /v2/authentication, and the response carries anexpiration_date(Sezzle). A custom tool with a fixed credential can't refresh it, so this isn't feasible today. - Zip (US). The API reference lists OAuth client credentials plus a required
X-QP-Signatureheader (Zip). Not feasible today for the same reason. - Shop Pay Installments. We found no merchant API for the loan; the order and its refunds are in Shopify.
Every one of these APIs also documents refunds. Klarna, Afterpay and Affirm each have a refund endpoint. An agent shouldn't call them on a Shopify store, for the desync reason above, so we'd build read tools only.
To check the request shape, we built one of these tools on our Macha Demo test org: "T4-136 Afterpay: Get payment by order ID", a GET to the production URL with Basic Auth, a dummy Merchant ID and secret, and Accept and User-Agent headers. Pointed at an echo service first, Macha sent a correctly formed Authorization: Basic header. Pointed back at Afterpay and run with a made-up order ID, Afterpay's live API answered HTTP 401 with "Credentials are required to access this resource." That proves the request reaches Afterpay in the documented shape. It doesn't prove anything about a real merchant's data, which we don't have.
What does the help desk's own Shopify integration already do?
Before adding anything, check what your help desk ships, because the refund action you need may already be there. None of the BNPL providers here documents a help desk app with AI actions that we found. The help desks' Shopify integrations are what matter, and they all refund through Shopify, which is the path the providers want.
- Zendesk. Zendesk AI agents can call a Shopify Create refund step in action flows, and Zendesk's help center says it initiates a full refund (Zendesk).
- Gorgias. Gorgias AI Agent's Shopify actions refund as part of canceling an order or removing or replacing items (Gorgias); a standalone refund needs a custom HTTP action.
- Intercom Fin. Fin refunds through a Create Shopify Refund action, with a Calculate Shopify Refund template to quote the amount first (Intercom).
The help desk AI actions matrix compares these cell by cell. For BNPL orders none of them adds anything provider-specific: the refund goes into Shopify, and the provider adjusts the plan. That keeps one record of every refund, so most of the work on these tickets is explaining the provider's rules.
What happened when we ran the agent on two test tickets?
We built an agent called "T4-136-BNPL refund questions" on our Macha Demo test org with three read tools (Zendesk Get Ticket, Shopify Get Order, Shopify Search Orders) and no write tools, then used the agent's Test run, which simulates a new Zendesk ticket on our d3v-macha sandbox and runs the agent against it with only its attached tools. These are the instructions we pasted, verbatim:
You answer "where is my refund" and payment-plan questions on orders paid with a buy now, pay later method: Shop Pay Installments, Klarna, Afterpay, Affirm, Sezzle or Zip. You only read. You never issue a refund, cancel an order or change a payment plan. 1. Read the ticket. Use the order number with Get Order. If there's no order number, use Search Orders with the requester's email. 2. Only discuss an order whose email matches the requester's email exactly. If it doesn't match, share nothing about the order: say you couldn't match the order to this email and ask for the email used at checkout. You can still explain the general refund rules for the provider the customer named. 3. For a matching order, read the payment gateway, the financial status and any refunds. If Shopify shows a refund, give its date and amount and say the provider now adjusts the plan. If the order is paid with no refund, say the refund hasn't been issued yet and that a teammate will check the return. Never promise a date. 4. Once the store has refunded, quote the provider's own timing: - Klarna: reporting the return in the Klarna app pauses payments; a refund goes to the original payment method after up to 14 days unless the customer uses a Klarna balance. - Afterpay: the refund comes off the last installment first; money back to a card can take up to 10 business days. - Affirm and Shop Pay Installments (provided by Affirm): the refund comes off the final payments first; money already paid comes back in 3 to 10 business days, and paid interest isn't refunded. - Sezzle: the plan updates once the store confirms; the refund can take up to 10 business days. - Zip: for a canceled order, up to 13 days from the order date (Zip publishes no separate timing for returns); Report a Return in the Zip app moves the next payment two weeks. 5. Tell the customer to keep paying any installment that falls due until the plan shows the change, unless the provider has paused it. Due dates, schedules and account questions belong to the provider's app. 6. Hand off to a teammate for: partial refunds, a refund the store hasn't issued, anything past the provider's refund window (Klarna on Shopify 180 days, Affirm 120 days from capture), disputes and chargebacks. 7. Finish with the exact reply you would send and say whether a teammate needs to pick the ticket up.
Step 3 asks for the payment gateway, which, as it turned out, Get Order doesn't return. We've left the line as we ran it; in your version, drop it or take the provider from the ticket.
Ticket #1154, Klarna. "Priya" wrote that she'd sent back order #1097 two weeks ago, paid with Klarna, and had a payment due Friday. The agent called Get Ticket and Get Order for #1097. The order exists on our Shopify test store, is marked paid, has no refunds, and its email isn't Priya's. The agent followed step 2: it shared nothing about the order, asked for the checkout email, and explained Klarna's rules (report the return in the app to pause payments, up to 14 days to the original payment method). It marked the ticket as not needing a teammate yet. The run took 10.3 seconds on GPT-5.4.
The Test run created the ticket through the API, and Zendesk stored the customer's text as an internal comment, which is why it's tagged Internal. The agent had no Zendesk write tool, so nothing was posted back.
Ticket #1155, Afterpay partial refund. "Omar" asked us to refund one returned item from an Afterpay order and lower his remaining payments, with no order number. The agent searched Shopify orders by his email, found none, asked for the order number or checkout email, and explained Afterpay's rules correctly: last installment first, up to 10 business days to a card, keep paying until the change shows.
It also said a teammate didn't need to pick the ticket up, which was wrong. Omar asked for a partial refund, which step 6 sends to a person, but the agent read step 6 as applying once an order was found and treated the missing order as the only open question. When Omar replies with his order number, the agent will look it up and should hand off then, but a teammate won't see the ticket until that second round. The fix is to classify the request before the lookup: "If the customer asks to refund part of an order, say a teammate will handle it and hand off, whether or not you found the order." We didn't re-run with that line, so treat it as untested.
Two smaller things we learned. Test runs use only the tools attached to the agent, which is why we used them instead of the dashboard chat, where every tool on the org is available. And creating the agent through the API left it active despite the request saying inactive; we switched it off a minute later, before anything could fire.
Which BNPL refund cases should stay with a person?
Some of these are about authority and some are about what the tools can do.
- Partial refunds. Macha's Create Refund refunds everything still refundable on the order, items and shipping, and can't refund a partial amount. A one-item return on a BNPL order is a person's job in the Shopify admin. (Stripe's refund tool takes an amount, but that only helps on Stripe-charged orders, not Shopify BNPL ones.)
- Refunds past the provider's window. Klarna on Shopify Payments allows refunds within 180 days of the initial charge; after that its docs tell the merchant to return the money "using an external service". Affirm on Shopify allows refunds within 120 days of capture and calls a refund irreversible. Afterpay also says a refund can't be reversed once issued.
- Disputes and chargebacks. When a Klarna shopper opens a dispute, Klarna contacts the customer if it isn't resolved in 21 days, and the merchant then has 7 days to respond (Klarna for Shopify Payments). That's evidence and deadlines, not a chat reply.
- Cash or store-credit workarounds. Afterpay's merchant help says a merchant must never refund cash for amounts a shopper paid through Afterpay. An agent offering "we'll refund you directly" on a BNPL order is making a promise the store can't keep.
- A refund the store hasn't issued. Whether the return has arrived and passed inspection is the returns team's call. The returns apps guide covers what an agent can read there.
A full refund of an order is different. Macha's Create Refund is a Write tool that asks for confirmation in chat, and it goes through Shopify, the path every provider here prefers. For stores on the Klarna payments app, Klarna's docs say any Shopify refund updates the Klarna order; we haven't run Create Refund on a BNPL order, because our test store has none and our tests on this page were reads only. The guide to automating Shopify refunds safely covers when a full refund should run with confirmation and when it shouldn't run at all.
Where Macha fits with BNPL refund questions
Macha suits teams at Shopify brands on Zendesk, Freshdesk, Gorgias, Front, HubSpot or Intercom that offer Klarna, Afterpay, Affirm or Shop Pay Installments and get a steady run of "where is my refund" and "do I still have to pay" tickets. The built-in Shopify connector reads the order and its refunds, and the agent answers with the provider's published timing, in the ticket, on the help desk you already use. Klarna, Afterpay and Affirm order records can be added as read-only custom API tools that Macha's team sets up during onboarding with Basic auth; Sezzle and Zip can't be, because their APIs need tokens that expire or signed requests. Full refunds go through Shopify's Create Refund with a confirmation step; partial refunds stay with your team. Custom tools are included on every plan. Macha costs $299/month for 750 tickets, about $0.40 per ticket, with setup and monitoring by the Macha team included. For the rest of the Shopify stack, see which Shopify apps an AI support agent can work with, and for card and Stripe refunds, the Macha Stripe guide. Our where-is-my-refund guide covers refund-status tickets beyond BNPL.
Frequently asked questions
How long does a Klarna refund take? Klarna's US help center says a refund goes to the original payment method after 14 days if the shopper hasn't turned on Klarna balance refunds or chosen another method. On a pay-over-time plan the refund is deducted from the total balance first. The clock starts when the store issues the refund; for stores on the Klarna payments app, Klarna says a Shopify refund reaches the Klarna order in under 10 minutes.
Do I still have to pay Klarna or Afterpay after returning an item? Until the plan shows the refund, yes, unless the provider has paused the payment. Reporting the return in the Klarna app pauses Klarna payments. Afterpay moves the next payment to a later date when a return is reported, but if the report lands within 24 hours of the due date, Afterpay may not be able to move that payment. Zip's Report a Return delays the next payment by two weeks.
How does a partial refund change Afterpay or Affirm installments? Both apply it from the end of the plan. Afterpay reduces the last installment first, then the one before; Affirm applies refunds starting with the final payments, so the shopper sees fewer payments or a smaller final one rather than every payment shrinking.
Is interest refunded on Shop Pay Installments or Affirm? No. Shopify's FAQ says paid interest on monthly Shop Pay Installments isn't refunded, and Affirm says the same for its loans. Shopify also doesn't return the Shop Pay Installments transaction fee to the merchant.
Should a merchant refund in the Klarna or Afterpay portal? Not on Shopify. Klarna warns that portal refunds put Klarna and Shopify data out of sync and can duplicate refunds, Afterpay asks Shopify merchants to refund through the store rather than its admin portal, and Affirm strongly recommends Shopify for the same reason.
Can an AI agent issue a BNPL refund? Through Shopify, yes, for a full refund: Macha's Create Refund refunds everything remaining on the order after a confirmation step in chat, and the provider adjusts the plan. It can't refund a partial amount, and we wouldn't let an agent call a provider's own refund endpoint on a Shopify store.
How we researched this
- Provider refund rules (shopper side): Shopify's Shop Pay Installments FAQ; Klarna US help articles "How long do refunds take?", "What happens when I report a return?" and "How long does it take for my return to be registered?"; Afterpay US "How do refunds and returns work at Afterpay?"; Affirm help center "Get a refund" and "How refunds work"; Sezzle "How do refunds work for returned or canceled orders"; Zip US "My order was cancelled or did not process. Where is my refund?". All read on 28 September 2026. The Affirm pages load only with JavaScript, so we read them in a headless browser.
- Merchant and platform docs: Klarna's Shopify post-purchase pages for the Klarna payments app and for Klarna for Shopify Payments; Afterpay merchant help "How do I process a refund?"; Affirm "Processing transactions in Shopify" (updated 13 November 2025); Sezzle's Shopify Payments guide; Zip US Shopify guide. Read on 28 September 2026.
- APIs: Klarna Order Management API reference; Afterpay Online API authentication, Get Payment By Order ID and List Payments; Affirm Read Transaction; Sezzle Get a bearer authentication token; Zip US orders refund reference. Read on 28 September 2026. We have no merchant account with any of these providers and never saw a successful response.
- Help desk integrations: Zendesk, Gorgias and Intercom help-center pages, as cited in the section above and checked for our help desk actions matrix on 28 September 2026.
- Arithmetic: Afterpay's example is its own: $100 order, one $25 installment paid, $60 refund. $60 cancels the fourth and third $25 installments ($50) and takes the remaining $10 off the second, leaving $15.
- What we ran live, and what we didn't: on 28 September 2026 we created the "T4-136-BNPL refund questions" agent on our Macha Demo test org with three read tools and ran two Test runs, which created made-up tickets #1154 and #1155 on our d3v-macha Zendesk sandbox. Order #1097 is a test-store order. We built one custom tool with dummy Basic credentials and got HTTP 401 from Afterpay. We didn't run Create Refund, Cancel Order or any provider write, and we didn't test Klarna, Affirm, Sezzle or Zip APIs. Priya, Omar, their emails and both tickets are synthetic.
- Not verified: Shopify App Store install and review counts for the providers' apps, which didn't load for our automated fetch, and whether Klarna-for-Shopify-Payments merchants get Order Management API credentials.
Shopify brands fielding BNPL refund tickets can start a trial with $50 of free usage (about 125 tickets), no credit card, no time limit, and Macha's team will set up any provider read tools during onboarding. Tiers are on the pricing page.
Resolve tickets automatically with AI agents
Macha's AI agents work on top of the help desk you already use — no code.

