Subscribe
← All articles
Oct 9, 2026

The refund window you set, and the 120-day one you did not

By Built and shut down a subscription platform on Stripe Connect, Telegram Stars and crypto payouts

Close view of an hourglass against a black background, sand falling onto the pile in its lower bulb

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 happensSeller'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.

PriceDeclining pays if fewer than this share dispute
$525%
$1040%
$2562.5%
$5077%
$10087%

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.

Sources

Every external figure in this article is cited to the provider's own published terms, checked 11 October 2026.

  1. 1.Stripe, How disputes work - card networks typically allow cardholders to initiate disputes within 120 days of the original payment; local payment methods typically allow up to 180 days; Stripe debits the disputed amount plus a dispute fee; no refund can be issued outside the dispute process while a dispute is open; the dispute received fee is never returned and the dispute countered fee is returned on a win
  2. 2.Gumroad, Gumroad's refund policy - sellers set their own refund policies; Gumroad reserves the right to issue refunds within 90 days of purchase, at its discretion, to prevent chargebacks; buyers in Brazil have 7 days to withdraw even when the product is set to no refunds
  3. 3.Telegram, Bot Platform Developer Terms of Service - section 6.2.1: a bot can return Stars to the purchaser in full with no penalty; every bot selling digital goods must respond to the /paysupport command; a dispute that results in a refund is deducted from the developer's balance
  4. 4.Stripe, Pricing - 2.9% + 30¢ per successful transaction for domestic cards; $15.00 dispute received fee; $15.00 dispute countered fee, returned for won disputes
  5. 5.Stripe, Refund and cancel payments - Stripe's processing fees from the original transaction are not returned on a refund