Between April and June 2026 we built a subscription platform for creators selling access to their audience. It was called Volta, it was ours, and we retired it in August. In those ten weeks it grew 933 commits and three working payment rails: Stripe cards, Telegram Stars and crypto. It handled the parts nobody demos, which is refunds, disputes, failed renewals and payouts.
We made a pricing mistake early on that is worth more to you than anything we got right.
Our Stars conversion was set at 50 Stars to the dollar, so a $10 offer displayed to the buyer as 500 Stars. That felt like a clean round number. Telegram's developer terms say a developer receives "an equivalent of 0.013 USD worth of rewards for each Telegram Star."[1]
Five hundred Stars is $6.50.
The mistake was pricing forwards from the dollar figure we had in mind. On Stars you have to price backwards from $0.013, and to actually receive $10 you have to charge 770 Stars. Telegram does not explain the gap between what a Star costs a buyer and what it pays a developer, and their terms do not need to. It is your job to look up the payout rate before you set a price, and we did it in the wrong order.
That is a specific error with a specific fix. The general version of it is the point of this article: the headline percentage is the number everyone compares between payment providers, and it is the one that matters least.
What each rail pays on a $10 sale
| You receive | The charge | |
|---|---|---|
| Stripe, one-off card | $9.41 | 2.9% + $0.30 [2] |
| Stripe, subscription | $9.34 | the above, plus 0.7% Billing |
| Telegram Stars, priced right | $10.01 | 770 Stars at $0.013 each [1] |
| Telegram Stars, priced wrong | $6.50 | 500 Stars at $0.013 each |
| Crypto via NOWPayments | $9.90 | 1% service fee [3] |
Every rate above is from the provider's own pricing page or terms, listed at the bottom.
Read as a table, Stars priced correctly beats everything and crypto comes second. That reading is wrong, for three reasons that no fee schedule mentions.
When the money arrives
Stripe pays out on a rolling schedule and a standard payout is free. If you want the money sooner, Instant Payouts cost 1.5% with a 50 cent minimum,[2] which on small transactions is a bigger bite than the processing fee that got you the money in the first place.
Telegram holds Stars for up to 21 days. Their terms put it plainly: Stars "may not become available for advertising credits or rewards for up to 21 days after their receipt."[1] Then you withdraw through Fragment, a separate platform Telegram outsources rewards to. So your $10 is not $10 today. It is $10 three weeks from now, in a different system, and the Stars themselves expire three years after you receive them.
Crypto settles in minutes once the chain confirms, which sounds like the win it is not. You quote a price in dollars and get paid in a coin whose value moved while the buyer was finding their wallet. Somebody absorbs that difference and it is you.
Three weeks of float is a working capital problem, and it never appears in a fee comparison.
What happens when a sale goes backwards
This is where we spent the most engineering time and where the pricing pages are quietest.
Stripe refunds keep the fee. Stripe's documentation is explicit: "Stripe's processing fees from the original transaction aren't returned."[4] Refund a $10 sale and you are out the $0.59 you already paid. There is one exception, and it is free money if you know it: a refund issued very shortly after the charge can go through as a reversal instead, and Stripe does not withhold fees on reversals.[4] If you are going to refund, refund fast.
Stars refunds are free. Telegram's terms say a bot can return Stars to the purchaser "in full via the relevant Telegram Bot API method, with no penalty."[1] The rail with the longest payout delay has the cleanest refund. If you sell something people change their mind about, that single line moves Stars up the table.
Crypto refunds are somebody's job. There is no reverse on a blockchain. We built an approval queue where an operator reviewed each crypto refund by hand and sent funds back deliberately, because there was no other honest way to do it. And when NOWPayments told us a payment had been refunded on their side, our webhook handler deliberately did nothing to the buyer's access. It raised an alert for a human instead. Automatically revoking someone's access on an event whose meaning you cannot verify is how you ban a paying customer at 3am.
The crypto rail also has a state with no equivalent anywhere else, and it took us a while
to accept that it needed a design decision rather than a bug fix. A buyer can underpay.
NOWPayments reports this as partially_paid, which is neither a success nor a failure. In
our handler it changed nothing at all: the order stayed pending and the buyer kept seeing
"confirming on-chain" until it either resolved or expired. Somebody has to decide what a
three-quarters-paid order means. On cards that somebody is Visa. On crypto it is you.
Disputes make cheap products unsellable on cards
A dispute is not a refund. When a cardholder disputes a charge, in Stripe's own words the issuer "immediately reverses the payment," pulling the money and the network fees, after which "Stripe debits your balance for the payment amount and dispute fee."[5] Stripe's pricing lists $15 for a dispute received, and another $15 to counter one manually.[2]
Run that on a $10 product. The dispute lands and $25 leaves your balance the same day. Challenging it is billed at a further $15, so mounting a defence costs more than the sale was worth before you have spent a single minute assembling evidence. You can win and have the funds reinstated, and it will still not have been worth the hour.
So the honest advice for anyone selling a cheap digital product on cards is to accept disputes rather than fight them, and to price with a dispute rate already baked in. Two disputes a month on a $10 product need fifty clean sales to cover.
Stars avoid this completely, because there is no card issuer behind the transaction for a buyer to appeal to. That is worth real money and it is not in anybody's fee table.
Failed renewals are an access-control problem
Sell a recurring membership on cards and some share of renewals fails every month. Expired cards, insufficient funds, issuer declines. Nothing you can do about the rate.
What we built was three retries, at 24, 48 and 72 hours after the failure, with the
subscriber held in a grace state throughout. The first retry also messages them a link
to update their card, because silently retrying a cancelled card just fails three times
for the same reason. Only after the last retry fails does access get revoked.
That is not a fee. It is a state machine you either build or do without, and doing without means choosing between cutting off paying customers over a temporary decline and letting people keep access forever after they stop paying.
Then there is the constraint that decided the most for us, and the one we would want to know first if we were choosing a rail today. Telegram Stars cannot do recurring. Stars are a one-time purchase, full stop. We ended up writing a rule into the codebase that offered Stars only on lifetime purchases and hid the option entirely on recurring memberships. Picking a rail did not just set our fee, it deleted a product tier. If your business is memberships, the entire Stars column of that table above is unavailable to you, whatever it pays.
A smaller version of the same problem: Stars are integers. You cannot charge half a Star, so our conversion rounded up to the next whole one, and a price like $2.49 is simply not expressible. The buyer pays something slightly different from the number you set.
Three questions instead of a fee table
How often do you refund? A high refund rate pushes you toward Stars, where refunds cost nothing, and away from cards, where every single refund also costs you the original processing fee. Work out your actual refund rate before you compare percentages. At a 10% refund rate you pay the 2.9% on a tenth of your sales and keep none of the revenue, which adds roughly 0.3% to what processing really costs you, before the fixed 30 cents.
Is it a subscription? Then Stars are out, you are on cards, and you own dunning, grace periods and disputes.
What do you charge? Below roughly $15 the fixed 30 cents does real damage and card disputes stop being a line item. On a $3 sale, 2.9% + $0.30 is 12.9%, not 2.9%.
The rail sets what you are allowed to sell, when you get paid, and who eats the failures. It also has a percentage attached, which is the part everyone reads and the smallest number on the list.
Disclosure. The retry schedule, the crypto refund approval queue, the partially_paid
handling, the Stars rounding rule, the recurring restriction and the mispricing at the top
are all from our own implementation rather than anyone's documentation, so they carry no
citation below. Volta is our product, it is retired, and nothing here is a recommendation
to use it.
