Skip to main content
Subscriptions

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.

One call. The hosted page handles auto-pull.
subscription-checkout.ts
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);
How a renewal happens

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.

Live · Base, Polygon, Arbitrum

Allowance auto-pull

Customer signs once

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
Live · every wallet, every chain

One-click invoice

Customer pays each cycle

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
Integration

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.

01

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.

02

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.

03

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.

Coverage

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.

Tron
TRC20
RenewalInvoice · auto-pull roadmap
Base
Base
RenewalAllowance auto-pull
Polygon
Polygon
RenewalAllowance auto-pull
Arbitrum
ARB
RenewalAllowance auto-pull
Solana
SOL
RenewalInvoice (no allowance)
Ethereum
ETH
RenewalInvoice (L1 gas)

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.

Lifecycle

The whole recurring-billing surface, already built.

Trials & renewals

Trial periods, automatic renewal, plan changes at period end.

Dunning cascade

Failed renewals retry on a backoff with fresh pay links, then cancel cleanly.

Pause, cancel, uncancel

Hold a subscription, cancel now or at period end, and reverse a pending cancel.

MRR & churn analytics

Active subscriptions, MRR, and success rate — the metrics B2B SaaS runs on.

Signed webhooks

subscription.created, .renewed, .past_due, .canceled — idempotent, with retries.

Self-service portal

A hosted customer portal to manage payment method, view invoices, and cancel.

FAQ

Recurring, answered.

Do my customers have to re-pay every month?

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.

Is auto-pull custodial? Where do the funds go?

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.

What do I have to build for auto-pull?

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.

Which chains and tokens are supported?

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.