Best Crypto Payment Gateway for SaaS: What to Look For
A crypto payment gateway for SaaS has more work to do than a checkout for one-off orders. It has to bill the same customer every month, run free trials, handle failed renewals and tell your app when to turn access on or off. Many crypto gateways were built for single payments, and the gaps show up in billing.
This guide lists what to check before you choose one: how renewals are collected, what fees do to a $10 plan, which coins your customers can pay with, the API and webhooks, and where the money goes. Every competitor figure links to the provider's own page.
Disclosure: OrcaRail publishes this blog and is one of the gateways below. Competitor facts come from each provider's own pages, linked, with the date we checked. Pricing changes, so confirm with the provider before you decide.
Why SaaS billing is harder with crypto
With cards, the processor keeps the card on file and charges it every month. A crypto wallet works the other way: nobody can take tokens from it unless the owner signs a permission. So a gateway can collect a renewal in one of two ways:
- A payment link each cycle. The gateway sends an invoice or a link, and the customer pays it from their wallet by hand.
- A pre-approved pull. The customer signs once, and the gateway pulls each renewal. On EVM chains this is an ERC-20 allowance; on Solana it is an SPL token delegation.
Every manual renewal is a chance for the customer to forget, so for monthly plans the second model matters. SaaS billing also needs small payments to stay cheap, and your app needs a webhook when a renewal succeeds or fails.
What to look for in a crypto payment gateway for SaaS
| What to check | Why it matters for SaaS | OrcaRail |
|---|---|---|
| Renewals that charge on their own | Fewer missed renewals on monthly plans | Auto-charge on EVM chains and Solana, or a payment link each cycle |
| Fees on small payments | A fixed fee per invoice takes a big share of a $10 plan | 0.5% per completed transaction, first 100 free, no fixed fee |
| Coins your customers hold | Customers pay with what is already in their wallet | USDC, USDT and other tokens on 70 mainnets |
| Trials, pauses and cancellations | Standard rules for any SaaS plan | trial_period_days, pause_collection, cancel_at_period_end |
| Subscription webhooks | Your app turns access on or off from events | 13 subscription events, signed like every OrcaRail webhook |
| API and SDKs | Your backend creates and manages subscriptions | REST API, Node and PHP SDKs, Laravel Cashier, MCP server |
| Where the money goes | Custody risk and cash flow | Forwarded to your own wallets; no balance held |
| Sandbox | Test renewals before real customers pay | Free sandbox organizations on testnets |
Renewals that charge on their own
OrcaRail has both collection methods on the same subscription object:
| Payment link each cycle | Auto-charge | |
|---|---|---|
collection_method | send_payment_link (default) | auto_charge |
| Customer action each cycle | Opens the link and pays | None after the first approval |
| When a renewal fails | The link goes overdue after days_until_due, and the status becomes past_due | The pull fails, the status becomes past_due, and the customer is emailed |
| Good for | Annual plans, or customers who want to approve every payment | Monthly SaaS plans, memberships and API plans |
With auto-charge, the customer approves once and OrcaRail pulls each period's amount from that approval. It runs on EVM chains and Solana, not on Bitcoin. The customer can revoke the approval from their wallet at any time. See auto-charge for the approve and revoke steps, and recurring crypto payments for a longer comparison of the two models.
Fees on a $10 plan
SaaS plans are often small monthly amounts, so a fixed fee per invoice matters as much as the percentage.
| Gateway | Published fee | Fee on a $10 payment | Recurring billing | Checked |
|---|---|---|---|---|
| OrcaRail | 0.5% per completed transaction, first 100 free | $0.05 | Payment link each cycle, or on-chain auto-charge | 11 Nov 2026 |
| Stripe stablecoin payments | 1.5% | $0.15 | Stripe Billing; stablecoin subscriptions in private preview | 10 Nov 2026 |
| NOWPayments | From 1%; +1% when coins differ | From $0.10 | Recurring invoices | 10 Nov 2026 (fee), 31 Oct 2026 (recurring) |
| CoinGate | 1% (Standard plan) | $0.10 | Scheduled bills | 10 Nov 2026 |
| MoonPay Commerce | 2%, or 1% with a HelioX Pass | $0.20 ($0.10 with the pass) | Monthly or annual subscriptions | 10 Nov 2026 |
| BitPay | 2% + 25¢ under $500K a month | $0.45 | Email billing (invoices) | 10 Nov 2026 |
Network (gas) fees come on top for most providers; Stripe's fee includes gas sponsorship. On a $10 plan, BitPay's fixed 25¢ alone is 2.5% of the payment. For the details behind each row, see BitPay alternatives and our list of crypto payment gateways.
Coins your customers hold
Stablecoins suit SaaS because the price stays the same in dollars from one cycle to the next. An OrcaRail subscription bills a fixed amount in a currency such as usd, paid in the token and network you choose, for example USDC on Base or USDT on Polygon. OrcaRail covers 70 mainnets: EVM chains, Solana and Bitcoin. Tron is not supported yet. See Networks and tokens.
Trials, pauses and cancellations
- Free trials: set
trial_period_days(ortrial_end). The subscription starts astrialing, and OrcaRail emails the customer about 3 days before the trial ends. See trial periods. - Intervals:
day,week,monthoryear, withinterval_countfor periods such as every 3 months. - Fixed terms:
total_cyclesends the plan after a set number of periods. - Pause and resume:
pause_collectionstops billing until you resume. - Cancel at period end:
cancel_at_period_end: truelets the customer keep the period they paid for.
See manage subscriptions for every updatable field.
Subscription webhooks that control access
| Event | What your SaaS app does |
|---|---|
subscription.created | Save the subscription ID on the customer's account |
subscription.payment_link.paid | Keep access on until the new current_period_end |
subscription.payment_link.payment_failed | Show a "renewal failed" notice; the status is past_due |
subscription.auto_charge.allowance_insufficient | Ask the customer to approve a new allowance |
subscription.canceled | Remove access, or schedule it for the end of the paid period |
Verify the signature on every event before you act on it. See subscription webhooks and webhook signatures.
Where the money goes
OrcaRail holds no balance. Each payment is forwarded automatically to withdrawal addresses you control. Other providers work differently: Stripe and BitPay can settle in fiat, and some hosted gateways keep the funds in an account until you withdraw them. Check this before you sign up, because it decides who holds your revenue between payments.
How to set up crypto subscriptions for SaaS with OrcaRail
-
Open a sandbox. Sign up at app.orcarail.com and create a sandbox organization with an
ak_test_key. Sandboxes use testnets, so no real funds move. -
Pick what you bill in, for example USDC on Base. List the options with
GET /payments/networksandGET /payments/networks/:id/tokensand keep the token and network IDs. -
Set withdrawal addresses for EVM and Solana, so renewals reach your own wallets.
-
Create a subscription from your backend when a customer picks a plan. With the Node SDK:
import OrcaRail from '@orcarail/node'const orcarail = new OrcaRail(process.env.ORCARAIL_API_KEY!,process.env.ORCARAIL_API_SECRET!,{ baseUrl: 'https://api.orcarail.com/api/v1' })const subscription = await orcarail.subscriptions.create({description: 'Pro plan',amount: '10.00',currency: 'usd',token_id: tokenId,network_id: networkId,interval: 'month',collection_method: 'send_payment_link',metadata: { account_id: 'acct_123' },})Send the customer to
subscription.latest_payment_link?.linkto pay the first cycle. -
Offer auto-charge. Use
collection_method: 'auto_charge'so customers approve once and renewals are pulled on their own. The auto-charge guide covers the approval and the API calls. -
Turn access on and off from webhooks, using the events in the table above.
-
Test renewals. In the sandbox, open a cycle's payment link and click Simulate payment. The payment goes through the normal flow and fires the usual webhooks. See simulate payments.
-
Go live with a live organization and an
ak_live_key.
On Laravel? Cashier OrcaRail keeps subscription state in your database and syncs it from signed webhooks. Prefer no code? A pricing widget with a recurring price starts a subscription when the customer picks the plan. See OrcaRail subscriptions for an overview.
FAQ
What is the best crypto payment gateway for SaaS?
The best one renews without a manual payment each cycle, keeps fees low on small plans, accepts the stablecoins your customers hold, and has an API and webhooks your app can use. OrcaRail covers these with auto-charge on EVM chains and Solana, 0.5% per completed transaction with the first 100 free, USDC and USDT on 70 mainnets, and 13 subscription webhook events. Compare other options in our list of crypto payment gateways.
Which crypto payment gateways have recurring billing?
Of the providers we checked: OrcaRail (a payment link each cycle or on-chain auto-charge), MoonPay Commerce (monthly or annual subscriptions) and Stripe (stablecoin subscriptions in private preview). NOWPayments and CoinGate send recurring invoices or bills, and BitPay offers email billing.
Can crypto subscriptions charge automatically?
Yes, once the customer approves it. On EVM chains the customer signs an ERC-20 allowance; on Solana, an SPL token delegation. The gateway then pulls each renewal within the approved amount, and the customer can revoke the approval at any time. OrcaRail auto-charge does not run on Bitcoin.
Do customers need a crypto wallet to subscribe?
Yes. Customers pay from a wallet that holds the token, such as USDC on Base. With auto-charge, they also sign the approval from that wallet.
Can I offer a free trial with crypto subscriptions?
Yes. Set trial_period_days when you create the subscription. It starts as trialing, no payment is collected during the trial, and OrcaRail emails the customer about 3 days before the trial ends.
