A refund policy says "7 days" and a buyer asks on day 12. You can say no. What you cannot do is make no the last word, because the buyer has a second place to ask and its deadline is not yours. Card networks "typically allow cardholders to initiate disputes within 120 days of the original payment."[1] Your window closes on day 7. The bank's is still open for another sixteen weeks.
We know how little a refund window can mean because we shipped one that meant nothing. Volta was our product, a platform for creators selling access and downloads, built between April and June 2026 and retired that August. Every creator who made an offer filled in a field labelled "Refund window (days)". It defaulted to 7. We saved the number and never read it again.
The field that nothing read
The setup form would not accept more than 30. The server behind it accepted anything up to 365, so the two halves of the product disagreed about the limit. Neither mattered, since no other part of the product looked at the value.
A buyer asked for a refund by sending the bot a command with an order number. The bot checked that the order was theirs and that it was paid. It did not compare the purchase date with the window, though both were sitting in the same database. A request on day 300 was accepted like a request on day 2, and the buyer got the same reply: the creator would respond within 48 hours.
Nothing timed the 48 hours either. And when a creator declined, we recorded their reason, wrote an audit entry, and sent the buyer nothing. From the buyer's side, a declined refund and an ignored one were the same silence.
So the product had a window nobody enforced, a response time nobody measured, and a no that nobody delivered. All three are how a refund request becomes a dispute.
Your clock is the shortest one
Your policy is one clock. It is a promise you publish, and it binds only as far as the buyer accepts it.
The platform you sell on may run a second one over the top of yours. Gumroad lets sellers set their own policy and then says it "reserves the right to issue refunds within 90 days of purchase, at its discretion, to prevent chargebacks."[2] Local law can add another: the same page notes that a buyer in Brazil has 7 days to withdraw and that Gumroad honours it "even when the product is set to no refunds."[2]
Then there is the card network's clock, the 120 days above, which no seller policy shortens. Other payment methods run longer. Stripe says local methods such as Klarna and PayPal "typically allow customers up to 180 days to file a dispute."[1]
Telegram Stars are the odd rail out, and in the seller's favour. A bot can "return the Stars to the purchaser in full via the relevant Telegram Bot API method, with no penalty", and Telegram puts the whole question on the seller: every bot "must be able to respond to the command /paysupport and process user requests regarding payment issues."[3] Ours answered a command we had named ourselves and had no handler for the one the terms require. If a dispute does end in a refund there, it "will be deducted" from the bot's balance.[3]
What a no costs on a $10 sale
Take a US seller on Stripe's standard card rate, 2.9% + 30 cents, with a $15 fee when a dispute is received and another $15 to contest it.[4] The sale was $10, so $9.41 arrived. Here is where the seller ends up, measured against never having made the sale.
| What happens | Seller's position |
|---|---|
| Refund when asked | -$0.59 |
| Decline, buyer lets it go | +$9.41 |
| Decline, buyer disputes, you accept it | -$15.59 |
| Decline, buyer disputes, you contest and win | -$5.59 |
| Decline, buyer disputes, you contest and lose | -$30.59 |
The refund costs 59 cents because the processing fee is not handed back: "Stripe's processing fees from the original transaction aren't returned."[5] A dispute removes the $10 and the first $15 together, since Stripe "debits the disputed amount, plus a dispute fee."[1]
Winning returns the $10 and the fee for contesting, and stops there. "Unless otherwise stated in your Stripe contract, we never return the dispute received fee."[1] You proved the buyer wrong and you are $5.59 worse off than if the sale had never happened.
There is no changing your mind halfway, either. Once a dispute is open, "you can't issue a refund outside the dispute process."[1] The cheap exit closes the moment the buyer picks up the phone to their bank.
The share of buyers that decides it
Declining is a bet with two outcomes. If the buyer lets it go, you are $10 better off than if you had refunded: $9.41 against -$0.59. If they dispute and you accept the loss, you are $15 worse off: -$15.59 against -$0.59. The processing fee is gone either way, so it drops out.
That makes the break-even easy to state. Declining pays only while the share of declined buyers who go to their bank stays under the price divided by the price plus fifteen dollars.
| Price | Declining pays if fewer than this share dispute |
|---|---|
| $5 | 25% |
| $10 | 40% |
| $25 | 62.5% |
| $50 | 77% |
| $100 | 87% |
At $5, one disputer in four turns a strict policy into a loss. At $100 almost nobody has to walk away for it to work. A refund window is therefore not one decision for the whole shop. The same "7 days, no exceptions" that protects a $100 course is a bad bet on a $5 download.
The table leaves out one cost, because it does not come in dollars. Among the first effects Stripe lists for receiving a dispute is that "your dispute rate with that card network increases."[1] A seller already watching that rate should read every percentage above as too generous.
What a window is for
None of this argues for refunding everyone forever. A stated window does real work: it sets the buyer's expectation before the sale and gives you one consistent answer to give. What it cannot do is end the conversation on its own.
So write the window for the price. On cheap products, treat the window as a guide for when you refund without asking why, and refund late requests anyway unless you would be glad to pay $15 to make the point.
Answer every request, including the ones you refuse. A buyer who hears "no, and here is why" has something to weigh. One who hears nothing, as ours would have, has only the bank left.
And if your platform asks you for a refund window, find out what it does with the number. Ask whether a late request is blocked, flagged or passed straight through, and whether the buyer is told when you decline. On ours the answers would have been passed through, and no.
Disclosure. The refund window field that was saved and never read, the mismatched limits of
30 and 365 days, the unmeasured 48-hour reply, the decline that notified nobody and the missing
/paysupport handler are from our own build of Volta, so they carry no citation below. Volta
was our product and it is retired; it closed before any buyer tested these paths with real
money. Nothing here recommends it. The break-even shares are arithmetic on Stripe's published
US fees and assume the seller accepts a dispute without contesting it. Every external quote is
cited to the provider's own page.
