Recurring revenue,
in stablecoins.
On Base, Polygon, and Arbitrum, a customer approves a spending cap once and every renewal auto-pulls — the card-on-file model, on-chain and non-custodial. On every other wallet and chain, renewals bill with a one-click invoice. Either way, funds settle straight to your wallet — never ours.
const checkout = await os.checkouts.create({
mode: "subscription",
priceId: "price_pro_monthly",
customerEmail: "ada@lovelace.dev",
chain: "base",
token: "USDC",
successUrl: "https://yourapp.com/billing/done",
});
// Redirect — the hosted page offers the one-time
// autopay approval where the rail supports it.
return Response.redirect(checkout.hostedUrl, 303);Sign once, or pay every cycle. We do both.
Crypto wallets don't auto-charge like cards. So OpenSettle ships both mechanics and meets every customer where their wallet is — the difference between recurring revenue you keep and renewals you chase.
Allowance auto-pull
On a supported EVM rail, the customer approves a spending cap once. Each renewal pulls the charge directly from that on-chain allowance — no email, no second signature, revocable any time. It's the closest thing to card-on-file in stablecoins, and it's non-custodial: the pull moves funds straight from the customer's wallet to yours.
- Zero customer action per renewal
- Capped + revocable on-chain
- EOA wallets on Base / Polygon / Arbitrum
One-click invoice
Where auto-pull isn't available, each renewal issues an invoice and emails a one-click pay link. The customer signs the transfer and the subscription renews when the chain-reader sees the deposit. It works on every wallet and chain — the universal fallback that means no customer is ever stranded.
- Works on any wallet, any chain
- One click, one signature
- Dunning + retries built in
Live in one call. Nothing to build for auto-pull.
You don't render the approve-and-sign flow or collect the signature. Create a subscription checkout and the hosted page does the rest.
Create a subscription checkout
One call with a recurring priceId. No autopay flag, no approval UI to build — the same checkout you'd create for any subscription.
The hosted page offers auto-pull
On a supported rail with an EOA wallet, the hosted checkout offers the one-time approve-and-sign step automatically. Otherwise it falls back to invoice-and-pay — the customer is never stranded.
Renewals settle to your wallet
Each cycle pulls (or invoices) and settles 100% on-chain to your wallet. We accrue our fee off-chain and bill it monthly. Funds are never escrowed.
Where auto-pull runs today.
We don't pretend auto-pull works everywhere. It's live on three EVM rails; everywhere else renews with a one-click invoice, so subscriptions still work on every supported chain.
Smart-wallet (ERC-4337) session-key auto-pull is on the roadmap and is sequenced after the allowance work. See the subscriptions docs for the exact mechanics.
The whole recurring-billing surface, already built.
Trial periods, automatic renewal, plan changes at period end.
Failed renewals retry on a backoff with fresh pay links, then cancel cleanly.
Hold a subscription, cancel now or at period end, and reverse a pending cancel.
Active subscriptions, MRR, and success rate — the metrics B2B SaaS runs on.
subscription.created, .renewed, .past_due, .canceled — idempotent, with retries.
A hosted customer portal to manage payment method, view invoices, and cancel.
Recurring, answered.
Not on Base, Polygon, or Arbitrum. There, a customer approves a spending cap once and each renewal auto-pulls from that on-chain allowance — no action per cycle. On other wallets and chains, renewals use a one-click invoice the customer pays each period. You don't choose per customer; the hosted checkout offers auto-pull wherever it's available and falls back to invoice otherwise.
Non-custodial, always. The renewal pull is a direct on-chain transfer from the customer's wallet to your verified settlement wallet — OpenSettle never holds or routes the money. The customer's allowance is capped and revocable on-chain at any time.
Nothing beyond a normal subscription checkout. The approve-and-sign flow lives in the hosted checkout page; every bound parameter (cap ≥ charge, signer = payer, merchant = your verified wallet) is re-verified server-side. See the subscriptions docs for the exact request shape.
Hosted checkout settles USDC/USDT on Base, Ethereum, Polygon, and Arbitrum; Solana and Tron are API-ready with hosted checkout next. Allowance auto-pull is live on Base, Polygon, and Arbitrum today; smart-wallet (ERC-4337) auto-pull is on the roadmap.
Turn one-time crypto checkouts into recurring revenue.
Stablecoin subscriptions for SaaS, memberships, and retainers — non-custodial, with auto-pull where it counts.