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

Stablecoin subscriptions on Solana: how automatic renewals work.

A stablecoin subscription is a recurring payment in a stablecoin such as USDC, collected from the customer's wallet on a fixed schedule after the customer approves it once. On Solana, a public program enforces the schedule and the cap on chain. This is how a renewal happens, what it costs, and how it stops.

On this page
What a stablecoin subscription isWhat changed on SolanaHow a renewal works, step by stepWhat the customer pays, and what the merchant paysStablecoin subscription versus card billingCancellingSetting one upSourcesQuestions
TL;DR
  • A stablecoin subscription is a recurring payment in a stablecoin such as USDC, collected from the customer's wallet on a schedule after one approval.
  • On Solana, the Subscriptions program enforces the schedule and the cap on chain. The customer approves once; every later renewal is automatic.
  • With Fianto the merchant pays nothing. The customer pays a flat 0.01 USDC with each charge today. There is no Fianto fee during the beta.

What a stablecoin subscription is

A stablecoin subscription is a recurring payment in a stablecoin, such as USDC, that is collected from the customer's wallet on a fixed schedule after the customer approves it once. It replaces the card on file. The money goes from the customer's wallet to the merchant's wallet in one Solana transaction, with no bank, no card network and no payment processor holding it in between.

For years, recurring payments were the hard part of getting paid in crypto. A wallet only sends money when its owner signs. A card can be charged by the merchant; a wallet cannot. So most "crypto subscriptions" were a reminder email and a manual payment every month.

Merchants describe the result the same way. A SaaS founder on r/SaaS put it in eight words: "Each month the user has to manually pay." A creator selling access for USDC wrote this:

I currently handle everything manually, verify USDC/USDT transactions, update access, track renewals. It's a lot of manual work.

A creator on r/CreatorsAdvice

What changed on Solana

In 2026 the Solana Foundation released the Subscriptions program, a public program on Solana for managed token delegations, recurring payments among them. The customer signs once and accepts a plan's terms. The program then lets an approved party collect within those terms, each billing period, and refuses anything else.

Three facts about the program matter to a merchant:

  1. The limits live on chain. The amount per billing period, the wallets the money may go to and the period length are fixed in the plan, and the subscription is bound to them when the customer signs. A collection that breaks any of them is refused by the program, not by a company policy.
  2. The code is audited and verified. Cantina's audit reports are published in the program's repository, and the program deployed on mainnet is a verified build of its public source.
  3. It is not custodial. Nothing is prepaid and nothing is held. USDC stays in the customer's wallet until the due date, then moves straight to the merchant's wallet.

Fianto runs the merchant side of this program: the plan, the hosted checkout, the collection on each due date, the retries, the webhooks and the dashboard. The program does the enforcing.

How a renewal works, step by step

  1. The merchant creates a product with a monthly price in USDC. When the first customer opens a checkout for that price, Fianto publishes a plan on chain with the amount, the period and the wallets the money goes to: the merchant's receiving wallet, and Fianto's for the network fee.
  2. The customer opens the checkout and signs one transaction from their own wallet. That transaction sets up the subscription with a cap per billing period and pays the first period.
  3. On each due date Fianto asks the program to collect. The program checks three things before anything moves: the amount is within the cap, the money goes only to the plan's wallets, and the new period has started.
  4. If every check passes, the price moves from the customer's wallet to the merchant's wallet in that transaction, and the network fee to Fianto's. The merchant's server gets a signed webhook with the transaction signature.
  5. If the customer's wallet is short, nothing is taken. The subscription is past due and Fianto tries again one hour, six hours and one day into the period. If the fourth attempt fails, the subscription ends and that period is never charged later.
The hosted checkout before the wallet opens: what is charged today, when the next charge is, the network fee, the most the merchant can take per period, and the SOL the customer pays as account rent.

A monthly plan renews every 30 days and a yearly plan every 365 days. The program never takes part of an amount: a charge either happens in full or not at all. The retry schedule is in failed renewals and retries.

The merchant dashboard lists every subscription with its state: Active, Past due after a failed try, Ended after the fourth failure or a cancel.

Sell a membership in USDC without code. Open a shop, pick a theme, share the link. No Fianto fee during the beta.

See how a plan is billed

What the customer pays, and what the merchant pays

The merchant pays nothing. The price the merchant sets is the amount that lands in the merchant's wallet. The customer pays:

CostAmountWhen
Network fee of the Solana transaction they signUnder $0.01Once, at checkout
Account rent for the subscription accountAbout 0.00197 SOL today, returned when the customer reclaims it after the subscription endsOnce, at checkout
Account rent for the wallet setup accountAbout 0.00163 SOL today, not returned when the subscription endsOnce, on the wallet's first subscription
Flat network fee toward the subscription's running costs0.01 USDC with each charge today, the first one includedEvery charge
Fianto feeNone during the beta. Any later fee is added on top of the merchant's price, paid by the customer, with at least 30 days noticeEvery charge

Rent is a Solana rule, not a fee: an account must hold a small SOL balance for as long as it exists, and that balance comes back when the account is closed. The hosted checkout shows the rent and the fee before the customer approves anything. More in account rent and reclaim and on the pricing page.

Stablecoin subscription versus card billing

The comparison below uses the assumptions on Fianto's pricing page: a published US rate for domestic cards of 2.9% plus $0.30 per charge, 1 USDC counted as $1, and no future Fianto fee.

Card billingStablecoin subscription on Fianto
Who approvesThe customer enters a card; the merchant charges itThe customer signs once in their wallet
Merchant cost on a 19.00 monthly plan$0.85 per charge, $10.21 over twelve charges0
Customer cost per chargeUsually nothing visible0.01 USDC
Where the money waitsProcessor balance, then a payoutNowhere: wallet to wallet in one transaction
ChargebacksPossibleNone. A refund is the merchant sending USDC back
Who can use itCountries and business types the processor acceptsAnyone with a Solana wallet, USDC and a little SOL

Card billing still has what wallets do not: the customer needs no wallet, no SOL and no USDC. A stablecoin subscription fits a merchant whose customers already hold stablecoins, or who cannot get a card processor at all.

Cancelling

The customer sees every subscription their wallet pays in the customer portal at fianto.xyz/my, and cancels there with one signature. Signing in is a signed message, not a transaction, so it moves nothing. A cancelled subscription runs to the end of the paid period and then stops.

Setting one up

There are two ways to offer a stablecoin subscription with Fianto.

Without code

Create a product with a monthly price, open a shop, pick a theme, edit the text on the page and publish. Share the shop link anywhere. Customers subscribe from the shop, approve once, and renew automatically.

With code

Create a checkout session from your server with the Fianto SDK for Next.js, Hono or Express, render the checkout button, and grant or revoke access from signed webhooks. The events are named for what happened: subscription.created, subscription.renewed, subscription.past_due, subscription.ended. A subscription creates no order, so order.paid never fires for it. The webhook route from the SDK's Next.js example:

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

export const POST = Webhooks({
  secret: process.env.FIANTO_WEBHOOK_SECRET,
  onSubscriptionCreated: async (event) => {
    // grant access for the first period; dedupe on event.id
  },
  onSubscriptionRenewed: async (event) => {
    // extend access by one period
  },
  onSubscriptionPastDue: async (event) => {
    // a renewal could not be charged: tell the customer
  },
  onSubscriptionEnded: async (event) => {
    // revoke access
  },
});

Keys, sessions and events are on the developers page; the full reference is at docs.fianto.xyz.

Sources
Questions

Questions about stablecoin subscriptions.

Does the customer have to sign every month?

No. The customer signs once at checkout. Every later renewal is collected by the program within the cap the customer approved.

Can Fianto take more than the customer approved?

No. The cap per billing period, the price plus the network fee, is fixed on chain when the customer signs. The program refuses any collection above it, or to a wallet the plan does not name.

What happens if the customer's wallet is empty on the due date?

Nothing is taken. The subscription is past due. Fianto tries again after one hour, six hours and one day. If the customer tops up before a try, that try collects. After the fourth failure the subscription ends.

Which stablecoins and networks work today?

USDC on Solana. Other tokens and networks are not accepted yet.

Does the merchant need to hold SOL for fees?

No. The merchant never pays a network fee. The customer's wallet pays the network fees of the transactions it signs, plus a flat 0.01 USDC with each charge today.

Bill in USDC without holding a cent.

Your customer approves once. The program checks every collection.

New posts are announced on X and Discord.