No Fianto fee during the beta. Any fee comes with at least 30 days notice. See pricing
Compare9 min read

Stablecoin and card subscriptions fail in different ways, so they need different dunning.

Card renewals fail when a card has expired, been replaced or been declined, and card billing answers with automatic card updates, processor emails and long retry windows: Stripe recommends 8 tries within 2 weeks. A USDC subscription on Fianto counts a failure only when the wallet is short, its approval was removed, or its USDC account is frozen or closed, and Fianto tries four times within about a day before ending it. There are no chargebacks on USDC and Fianto emails no subscribers, so the merchant does the reminding, from webhooks.

On this page
What changes when a subscription moves from cards to stablecoins?Why do card renewals and stablecoin renewals fail for different reasons?How does a failed USDC renewal play out, hour by hour?Who tells the customer that a payment failed?What happens to disputes and chargebacks?Is cancelling easier for a stablecoin subscriber?Which rail keeps more subscribers?SourcesQuestions
TL;DR
  • Cards: renewals fail on expiry, replacement and declines; Stripe updates many saved cards automatically and recommends 8 retries within 2 weeks (Stripe docs, 15 October 2026).
  • USDC on Fianto: a wallet never expires; renewals fail on an empty wallet or a removed approval, are tried at the boundary, +1 h, +6 h and +24 h, and end after the fourth failure.
  • No chargebacks on USDC, and Fianto sends customers no emails: message them yourself from subscription.payment_failed.

What changes when a subscription moves from cards to stablecoins?

What changes is the reason a renewal fails, how long you get to recover it, and who can take the money back afterwards. The card column below is Stripe Billing as its documentation describes it on 15 October 2026. The stablecoin column is a USDC subscription on Fianto, which publishes this post.

Card subscription (Stripe Billing)USDC subscription (Fianto)
Main causes of a failed renewalExpired or replaced cards, issuer declines, insufficient fundsNot enough USDC, a removed approval, a frozen or closed USDC account
Automatic fixAutomatic card updates from the networks, where issuers take partNone needed for expiry: a wallet does not expire
RetriesSmart Retries; recommended default 8 tries within 2 weeks, configurableFixed: at the period boundary, then +1 h, +6 h and +24 h
After the last retryYour setting: cancel, mark unpaid, leave past due, or pauseThe subscription ends; the missed period is never billed later
Who emails the customerStripe, if you turn on its failed-payment and expiring-card emailsYou. Fianto sends subscribers no email
DisputesCardholders can usually dispute within 120 days; $15.00 fee per dispute received (US pricing)No chargebacks. A refund is USDC you send back
Cost to the merchant per charge2.9% + 30 cents for a domestic US card, plus BillingNothing; the customer pays 0.01 USDC per charge today

The fee side is worked through for a 20.00 plan in USDC vs card fees. This post is about the subscribers you lose, and the money you lose after the fact.

Why do card renewals and stablecoin renewals fail for different reasons?

A card renewal fails when the bank says no, and a stablecoin renewal fails when the wallet cannot cover it. Involuntary churn, losing a subscriber who never meant to leave, comes from different places on each rail.

Cards

Cards expire and get replaced. Stripe's docs say it "automatically attempts to update saved card details whenever a customer receives a new card", and that this is "widely supported in the United States", while "international support varies from country to country." Some declines cannot be retried at all: Stripe lists hard decline codes such as lost_card, stolen_card and revocation_of_authorization, for which retries only run once a new payment method appears.

USDC subscriptions on Fianto

A Solana wallet has no expiry date and no issuer, so the card-updater problem does not exist. Fianto counts only four failure reasons against a subscription: not enough USDC (INSUFFICIENT_FUNDS), the wallet's approval for the Subscriptions program removed (DELEGATION_REVOKED), a frozen USDC account and a closed one. Anything else, such as a network error, is retried without counting. For the customer the fix is usually simple: put USDC back in the wallet that pays.

How does a failed USDC renewal play out, hour by hour?

A failed USDC renewal on Fianto plays out within about 24 hours of the period boundary. Take a monthly subscription whose 30-day period ends on 12 December 2026 at 09:41 UTC, with an empty wallet, and nothing delaying the tries:

  1. 09:43, two minutes after the boundary: the first attempt fails. Fianto sends subscription.payment_failed with failure.attempt_no 1 and the next attempt time, plus subscription.past_due once. The subscription shows "Past due" in the customer portal.
  2. 10:41, one hour after the boundary: the second attempt. If the customer has topped up, the charge goes through, subscription.renewed fires and the subscription is active again.
  3. 15:41, six hours after the boundary: the third attempt.
  4. 13 December, 09:41, a day after the boundary: the fourth and last attempt. If it fails, Fianto sends subscription.payment_failed with next_attempt_at null, then subscription.ended with end_reason PAYMENT_FAILED.
A merchant's webhook log for one subscription: subscription.created at signup, subscription.renewed a period later, then subscription.past_due two minutes after the next boundary, when the wallet could not cover the charge.

Compare Stripe: its Smart Retries page says you can retry "a specific number of times within a time period: 1 week, 2 weeks, 3 weeks, 1 month, or 2 months", and that "the recommended default setting is 8 tries within 2 weeks." A card subscriber who is short for a week can still be recovered. A Fianto subscriber who is short for more than a day loses the subscription and has to subscribe again. In our view that is the biggest churn cost of the stablecoin rail, and the schedule is not a merchant setting. More on the four attempts in failed renewals and retries.

Who tells the customer that a payment failed?

On Fianto, you do: Fianto sends subscribers no emails at all, not before a renewal and not after a failure. On the card side, Stripe Billing can do it for you: with "Send emails when card payments fail" turned on, its docs say "Stripe automatically sends an email to your customer after each failed payment." That setting names card payments. Stripe's stablecoin subscription guide instead tells you, on invoice.payment_failed, to "email the customer and request that they attempt the payment again."

A Fianto renewal failure gives your server what a good message needs. The failure object carries the reason, how many counted failures the period has had, and when the next attempt is (null when none is left). With the SDK's Next.js handler:

app/api/webhooks/fianto/route.ts
import { Webhooks } from '@fianto/nextjs';

export const POST = Webhooks({
  secret: process.env.FIANTO_WEBHOOK_SECRET,
  onSubscriptionPaymentFailed: async (event) => {
    const failure = event.data.failure;
    // failure?.reason: INSUFFICIENT_FUNDS, DELEGATION_REVOKED, ...
    // failure?.next_attempt_at: when Fianto tries again, or null after the last try
    // Tell the customer to add USDC before next_attempt_at; dedupe on event.id
  },
  onSubscriptionEnded: async (event) => {
    // event.data.end_reason is PAYMENT_FAILED after the fourth failure: revoke access
  },
});

Send it on the first failure, because the window is short. For INSUFFICIENT_FUNDS, ask for a top-up before the next attempt. For a removed approval, point the customer to the portal, which offers to renew the approval when that was the reason the renewal failed. A webhook-driven access setup covers granting and removing access; every event and its fields are listed on the docs page Event types.

Bill a monthly USDC plan with fixed retries and signed webhooks for every failure.

Read about stablecoin subscriptions

What happens to disputes and chargebacks?

Disputes are where stablecoin subscriptions are plainly better for the merchant. Stripe's docs say card networks "typically allow cardholders to initiate disputes within 120 days of the original payment", that Stripe debits "the disputed amount, plus a dispute fee" from your balance, and its US pricing page lists a $15.00 fee for each dispute received. A full dispute "can take 2-3 months to complete." On a subscription, a customer who forgot to cancel can dispute the renewal instead of asking you for a refund.

A USDC payment on Solana cannot be pulled back by the payer, so there are no chargebacks on Fianto. Even Stripe's own stablecoin payments page lists dispute support as "No". The flip side is that refunds are manual: Fianto has no refund API, and a refund is USDC you send from your own wallet. Chargebacks vs crypto refunds covers the refund policy side.

Is cancelling easier for a stablecoin subscriber?

Cancelling a USDC subscription on Fianto takes one signature in the customer portal at fianto.xyz/my, and the subscription runs to the end of the paid period. The portal has no undo. You can cancel from your side too, through POST /v1/subscriptions/{id}/cancel with at set to now or period_end, or from the dashboard.

An easy, visible cancel loses some subscribers who would have stayed through inertia, and it also removes the main reason a card subscriber files a dispute. Our view is that the trade is worth it, but measure it: the dashboard's Needs attention page lists past-due subscriptions, and the subscriptions CSV export gives you the end reasons. If a renewal never went through, why a USDC subscription didn't renew is the checklist to send the customer.

Which rail keeps more subscribers?

Neither wins everywhere, and nothing stops you offering both. A rule of thumb from the mechanics above:

  • Your customers have no crypto wallet: cards. Nothing on the stablecoin side helps a customer who would have to buy USDC and SOL first.
  • Your customers often run short and top up late: cards, because a two-week retry window recovers payments that a one-day window cannot.
  • Your customers hold USDC on Solana, or you lose money to disputes and card fees: a USDC subscription, with the dunning message sent from your own webhook.
  • You sell internationally where card updates are patchy: USDC removes the expiry problem entirely, though not the empty-wallet one.

Fianto bills USDC on Solana only, monthly (every 30 days) or yearly (every 365 days), with no free trials. The merchant pays nothing; the customer pays the 0.01 USDC network fee with each charge today and no Fianto fee during the beta, then about 0.1 to 0.5% on top after it. The head-term page on stablecoin subscriptions has the rest.

Sources
Questions

Questions about stablecoin and card subscriptions.

Do stablecoin subscriptions have less involuntary churn than cards?

They remove card expiry and issuer declines, but a short wallet still fails the renewal. On Fianto the retry window is about a day, against a recommended two weeks on Stripe, so a customer who tops up late can be lost.

Can a customer charge back a USDC subscription payment?

No. A USDC transfer on Solana cannot be reversed by the payer, so there are no chargebacks. Refunds are sent by the merchant from its own wallet.

How many times does Fianto retry a failed renewal?

Four attempts in all: two minutes after the period boundary, then one hour, six hours and 24 hours after it. After the fourth counted failure the subscription ends, and the missed period is never billed later.

Does Fianto email customers when a renewal fails?

No. Fianto sends subscribers no emails. Use the subscription.payment_failed webhook, which carries the reason and the next attempt time, to message them yourself.

Is there a card updater for crypto wallets?

There is nothing to update: a wallet address does not expire or get reissued. The equivalent problem is a customer moving their USDC to another wallet, which fails the renewal.

Read next.

Compare8 min read

Chargebacks versus crypto refunds: what a merchant needs to know

No: a USDC payment on Solana cannot be reversed by the payer. There is no card issuer to file a dispute with, so there are no chargebacks. Once Solana has finalized the transfer, the money stays in the merchant's wallet unless the merchant sends it back. That makes refunds the merchant's job, and a clear refund policy the merchant's responsibility.

CompareData8 min read

USDC vs credit card fees: a 20.00 subscription and a 120.00 sale, worked through

On a 20.00 monthly plan, a US card at Stripe's published 2.9% plus 30 cents costs the merchant 0.88 a charge, 10.56 a year. Stripe's stablecoin rate of 1.5% costs 0.30 a charge, 3.60 a year. With Fianto the merchant pays nothing, and the customer pays 0.01 USDC a charge today plus a few small SOL costs at checkout. The catch: the customer needs USDC and SOL in a Solana wallet.

WalletsGuides8 min read

Why didn't my USDC subscription renew? A payer's checklist

A USDC renewal on Fianto counts as failed for one of four reasons, all on the wallet side: not enough USDC for the whole charge, a removed approval, a frozen USDC account or a closed one. The subscription turns Past due, Fianto tries again one hour, six hours and 24 hours after the period ended, and if the fourth counted try fails it ends. Sign in at fianto.xyz/my with the paying wallet: the portal names the reason and the next try.

Send the first reminder yourself.

Hook subscription.payment_failed before your first renewal date.

New posts are announced on X and Discord.