Articles · GuidesUpdated October 2026

Refunding a deposit is your job, not the App Store's, and a chargeback can give you as little as seven days.

If a customer wants a booking deposit back, you refund it in your payment processor. Apple is not involved, because Apple never held the money. App Review Guideline 3.1.3(e) requires a payment method other than in-app purchase for a service consumed outside the app, so the deposit went to your merchant account on a card and comes back out of your balance. That is worth saying plainly, because the rule is written as a prohibition rather than a favour, and reading it backwards is how people build the version that gets rejected. Deposits sit inside the wider question of app monetisation, but refunds are where the policy meets a card network.

What follows is who owes the refund, the difference between a refund and a reversal, how long you actually have when a customer skips you and rings their bank, and the evidence that decides it. Every figure below comes from Apple's and Stripe's own documentation, read on 14 October 2026.

Work out which move this deposit needs

The short version

Four ways money goes back, and only one of them is a refund.

Cancelling an uncaptured hold costs nothing and the customer never sees a line on a statement. A refund minutes after the charge is usually processed as a reversal, which erases the original charge instead of adding a credit. A refund later on is a real credit that lands in about a week. And a chargeback is not a refund at all: the bank has already paid the customer, pulled the money and a fee out of your balance, and given you days to argue.

The app does not need to be clever about this. It needs to know which of the four happened to each booking, and it needs to have kept the one thing a bank will ask for: the cancellation policy the customer was shown, when they were shown it, and that they agreed.

Who actually refunds a booking deposit?

You do. The deposit was collected on a card in your own merchant account, so the refund comes out of your balance and nobody else has a button for it. The reason is Guideline 3.1.3(e), Goods and Services Outside of the App: if your app enables people to purchase physical goods or services that will be consumed outside of the app, you must use purchase methods other than in-app purchase to collect those payments, such as Apple Pay or traditional credit card entry. Read on 14 October 2026. Note the word must. This is not a kind exemption that lets you skip Apple's billing if you fancy it. It is an instruction, and sending a real world deposit through in-app purchase is the thing that gets rejected.

One guideline next door changes the answer, and it is the one people miss. Guideline 3.1.3(d), Person-to-Person Services, says that if your app enables the purchase of real time person-to-person services between two individuals, naming tutoring students, medical consultations, real estate tours and fitness training, you may use purchase methods other than in-app purchase. The next sentence is the trap: one-to-few and one-to-many real time services must use in-app purchase. A single appointment and a group class are therefore not the same case. If the class happens in your room, it is a service consumed outside the app and 3.1.3(e) is the rule that bites. If the class is delivered live inside the app to several people at once, 3.1.3(d) sends it through in-app purchase, and your deposit stops being yours to refund. Decide which one your app is before you write a refund screen for both.

When the purchase really is an in-app purchase, the refund is Apple's decision and not yours. Apple's own support documentation, checked on 14 October 2026, sends the customer to reportaproblem.apple.com, has them choose Request a refund, pick a reason and select the item, and then tells them to wait 24 to 48 hours for an update. It says that if Apple approves the request it might take additional time for the funds to return to the payment method. You are not in that sentence anywhere. That loss of control is a cost on top of Apple's commission, and it is a good argument for keeping the deposit on a card where the guideline already tells you to.

The ordinary case is unambiguous and should stay that way. One chair, one customer, one appointment, paid for in advance and consumed in a room: a salon booking app takes the deposit on a card, refunds it on a card, and never touches Apple's billing. One last warning, because it circulates in forum answers and in briefs: Guideline 3.1.5 is not about real world services. It is titled Cryptocurrencies. If something pointed you there to justify a deposit, it pointed you at the wrong rule.

Apple, App Review Guidelines, 3.1.3(d) and 3.1.3(e), read 14 October 2026

What is the difference between a refund and a reversal?

Timing. Stripe documents that a refund reaches the customer as a credit approximately 5 to 10 business days later, depending on the bank. But refunds issued shortly after the original charge appear in the form of a reversal instead, and in a reversal the original charge drops off the customer statement and no separate credit is issued. Stripe puts that window at roughly two hours after the payment is captured. The practical effect is a support ticket: a customer who cancelled twenty minutes after booking has nothing to look at and assumes you kept the money. One sentence in the confirmation screen fixes it, and no amount of refund engineering does.

The rest of the mechanics are worth knowing before you promise anything. Refunds can only be sent back to the original payment method, never to a different card or a bank account, so a customer who has changed cards is handled by their issuer, which usually credits the replacement card. Fees from the original transaction are not returned on a refund, though Stripe says it withholds no fees for a reversal, which is another reason speed is worth something. Refunds draw on your available Stripe balance, and if it is short, a card refund sits pending until the balance covers it. A refund can also fail outright, for example on a closed account, in which case the money comes back to your Stripe balance, a process Stripe says can take up to 30 days from the post date. Partial refunds are a plain amount parameter, you can issue several against one charge, and you can never exceed the original total.

There is a cheaper route that most booking apps should take first. Stripe recommends manual authorisation and capture if your business processes a large volume of refunds close to the time of transaction, because you can cancel before capture or capture a smaller amount instead of processing a refund. For a deposit on an appointment that might move twice before it happens, that turns most of your refunds into cancellations that cost nothing. Offering something other than cash helps too, and Stripe's own dispute guidance suggests resolving a complaint amicably with a store credit or a replacement. That is the same ledger a loyalty card app already keeps. Be honest with yourself about the limit: a credit is not a refund, and a customer who is owed money can still go to their bank.

Work out yours

Which move does this deposit need?

Pick the state the booking is actually in. A refund is only one of the answers, and in three of these cases it is the wrong one.

Nothing picked yet. The state of the money decides the move: not captured, captured minutes ago, captured weeks ago, or already pulled back by a bank.

How long do you have to fight a chargeback on a deposit?

Usually 7 to 21 days, depending on the card network. Stripe is blunt about the consequence: if you do not respond before the deadline you automatically lose the dispute and cannot retrieve the disputed funds. The notification arrives by email, in the Dashboard, and as a charge.dispute.created event if your app listens for it. For a one person business the event is the one that matters, because the email lands in the same inbox as everything else and the deadline is measured in working days.

The filing window is the figure that reshapes a booking app. Stripe documents that card networks typically allow cardholders to initiate disputes within 120 days of the original payment, and adds that generally, when a customer pays for a future event or service such as a vacation reservation, a professional services appointment or an event ticket, the dispute window starts on the event date rather than the payment date. Read that twice if you take deposits months ahead. A deposit collected in January for a July wedding is contestable late in the year, which means the booking record, the policy version and the message thread all have to survive longer than the booking itself.

What happens the moment a dispute opens is worth building around. The card network pulls the disputed amount from your Stripe balance, Stripe debits a dispute fee as well, and the funds stay held for the whole case. The fee for receiving a dispute is non-refundable for businesses outside Mexico. Countering adds a dispute countered fee, which Stripe returns if you win. You cannot issue a refund outside the dispute process while the dispute is open, and if a refund was already pending when the customer filed, it fails with the reason charge_for_pending_refund_disputed and Stripe tells you to handle the dispute instead so the customer is not paid twice. If you do submit evidence, the issuer usually takes 60 to 75 days to decide, and the full lifecycle runs 2 to 3 months.

Before a formal chargeback there is sometimes an inquiry, which American Express and Discover still use. An inquiry can be closed without a dispute fee by giving satisfactory evidence or issuing a full refund, and Stripe warns that failing to respond can signal implicit acceptance and escalate into a formal and likely unwinnable chargeback. An inquiry left open for 120 days without escalation is marked closed. Treat an inquiry as the cheapest version of the same problem and answer it the day it arrives.

Stripe, respond to disputes, read 14 October 2026

What evidence wins a disputed deposit?

Two of Stripe's dispute categories cover almost every contested deposit. Credit not processed is the customer claiming they are entitled to a refund you have not given, after cancelling or not fully using what they bought. Product not received is the customer claiming the service never happened. Stripe classes a prepaid booking as an offline service, which it describes as a purchase made in advance such as an event ticket or a reservation, where evidence of a cancellation policy can be material. That sentence is the whole brief for your database schema.

For a credit not processed claim on an offline service, Stripe asks for four things, each with its own Dashboard label. The language of your refund policy as provided to the customer, as cancellation policy or refund policy. An explanation of how and where you provided that policy before the purchase, as cancellation policy disclosure. Your explanation of why the customer is not entitled to a refund, as cancellation rebuttal. And whether the customer tried to resolve the issue with you before filing, as customer communication, with Stripe adding that if they did not reach out first you should say so clearly. For a product not received claim it wants documentation showing the service was provided, including the date the cardholder received or began receiving it, as service date and service documentation, plus a signature where you have one.

Work backwards from that list and the booking record almost designs itself. Each booking needs the exact policy text that was on screen, not a pointer to today's version. It needs the screen and the timestamp at which it was shown, the acceptance itself, the service date, a mark for whether the person attended, and the thread of messages you exchanged. A boolean column saying the terms were accepted proves nothing, because the question a bank asks is what they accepted and when.

The submission rules then decide whether any of it lands. You have only one opportunity to respond: Stripe forwards your files to the issuing bank immediately and you cannot edit the response or add anything later. You can submit one file per evidence type, so combine several pages into one document. Keep the total under 4.5 MB, and under 19 pages for Mastercard. And this is the one that trips up developers: banks evaluating the dispute will not review any external content, so no audio or video, no requests to call or email, and no links to click. The instinct to paste a link to the booking in your admin panel loses the case. Screenshot it instead, which is a good reason to build an admin view that prints cleanly.

Stripe, respond to disputes and dispute category guidelines, read 14 October 2026

The routes money can take back out, and what each costs you

The routeWho starts itWhat it costs youCustomer sees a credit
Cancel before captureYou, while the hold is uncapturedNothingNo
ReversalYou, within roughly two hours of captureLess than a refund: Stripe withholds no fees for reversalsNo
RefundYou, after the charge succeedsThe original processing fee, kept by StripeYes
Chargeback you loseThe cardholder, through their bankThe amount plus a non-refundable dispute feeYes
Chargeback you winThe cardholder, through their bankThe dispute received fee, and your timeNo

Fee amounts vary by country and are on Stripe's pricing page. The shape does not: the earlier you act, the less it costs, and the cheapest refund is a hold you never captured.

Where this lands if a builder generated your app

None of it changes because an AI wrote the code. The merchant account is yours, the refund button is yours, the dispute response is yours, and on iOS you are the one who submits. Guideline 4.2.6 is why: apps created from a commercialized template or app generation service will be rejected unless they are submitted directly by the provider of the app's content. Read on 14 October 2026. The refund policy comes with that, because the policy is a statement about your business and nobody else can make it.

Newly is an AI app builder. You describe the app in plain English and it writes a real React Native and Expo project that you own, with two-way GitHub sync, so the booking record and the refund screens are code you can read and change. It uploads iOS builds to TestFlight, publishes to Google Play internal testing and builds a standalone Android APK. It does not submit to the App Store for you, for the reason above. It is $25 a month and there is no free tier.

The useful thing to ask it for is the record rather than the button. A refund is a few lines against a payment intent. The part that decides a dispute four months later is a booking row that stored the policy text it showed, the moment it showed it, the acceptance, the service date, the attendance and the thread. Ask for that first, and ask for an admin screen that prints the lot onto a page. The honest limit: no builder writes your cancellation policy, and no builder wins a chargeback for you.

Questions people ask about refunding a deposit

In your payment processor, not in the App Store. A deposit for an appointment or a table is money for a real world service, and App Review Guideline 3.1.3(e), Goods and Services Outside of the App, says that if your app enables people to purchase physical goods or services that will be consumed outside of the app, you must use purchase methods other than in-app purchase to collect those payments, such as Apple Pay or traditional credit card entry. Read on 14 October 2026. Because Apple never took the money, Apple cannot give it back. You create a refund against the original charge in Stripe, from the Dashboard or the Refunds API, and the money moves off your balance.

Describe the booking, then store what settles the argument

Write the cancellation policy first, show it on the booking screen, and keep the version each customer agreed to. The refund is then a single call, and the dispute is a folder you already have.

Start building