2026-11-17
Stripe USDC Payments vs a Non-Custodial Gateway

If you already run on Stripe, stablecoins are a setting away. Turn on the crypto payment method, and customers can pay a Checkout session or an invoice in USDC while you keep receiving dollars in your Stripe balance. For a lot of businesses, that's the end of the evaluation.
The other route is a non-custodial gateway like Klap, where the customer's USDC goes to your own wallet and stays USDC. In practice the choice comes down to what you want to hold at the end of the day.
What Stripe does with a USDC payment
When a customer picks crypto in Stripe Checkout, they're sent to crypto.stripe.com to connect a wallet and pay. Per Stripe's stablecoin docs, that covers USDC on four networks, plus USDP and USDG on some of them.
The payment then settles in your Stripe balance in your local currency. You never touch the stablecoin. From your books' point of view it looks like any other Stripe payment, and it pays out to your bank on your normal schedule.
A few details from the docs that matter in practice:
- Accepting it requires a US business today. A few other regions, the EU among them, are in private preview.
- A single payment is capped at $10,000.
- Refunds go back as stablecoins to the customer's original wallet.
- There are no disputes. A stablecoin payment can't be charged back.
- It works across most of Stripe's products, Billing subscriptions included.
On price, Stripe's developer blog gives 1.5% per transaction, settled as fiat. Check the current pricing page before you plan around it.
What a non-custodial gateway does with it
With Klap, the customer pays an address that belongs to that one charge. That address is a contract that can only pay out to the recipients it was created with, and after the payment it sends the USDC to your wallet. Klap detects the transfer and tells your backend about it with a webhook. It never holds the funds or keeps a balance for you.
const charge = await klap.charges.create({amount: 250.0,expiresIn: 3600,acceptedPayments: [{ token: 'USDC', network: 'base' },{ token: 'USDT', network: 'arbitrum' },],externalRef: order.id,})
What you end up with is the stablecoin the customer sent, in a wallet you control. If you want dollars in a bank, that's a second step you take with an exchange or an off-ramp, on your own schedule.
Klap charges 0.5% per settled payment, with no monthly fee, and you pick whether you or the customer pays it. The customer also covers the gas for paying you out, which is quoted on the charge.
Side by side
| Stripe stablecoin payments | Klap | |
|---|---|---|
| What you receive | Local currency in your Stripe balance | The stablecoin, in your own wallet |
| Who holds the money in between | Stripe | Nobody: the charge's contract pays out directly |
| Tokens | USDC, USDP, USDG | USDC, USDT |
| Networks | Ethereum, Solana, Polygon, Base | Ethereum, Base, Optimism, Arbitrum, Polygon, Avalanche, BNB Chain, plus USDC on Arc |
| Listed fee | 1.5% (per Stripe's dev blog) | 0.5% |
| Per-payment limit | $10,000 | No fixed cap |
| Subscriptions | Stripe Billing | A charge per renewal, or Klap Link's recurring links |
| Splits between wallets | Through Connect, as fiat | Up to five wallets on the charge |
| Checkout | Stripe-hosted wallet page | Your own UI, components or a hosted link |
The fee gap is the line people notice first. On $50,000 a month in stablecoin volume, 1.5% is $750 and 0.5% is $250. It matters less than it looks if you'd pay an off-ramp to get from USDC to dollars anyway, because that cost lands on the Klap side and not on Stripe's.
When Stripe is the better choice
You want dollars, not stablecoins. If every USDC payment would be converted to fiat on the same day, Stripe already does that for you, inside the accounting and payouts you have.
You already bill subscriptions on Stripe. Stripe Billing supports stablecoin subscriptions. On Klap's API, each renewal is a new charge and the reminders are yours to build. Klap Link's recurring links email an invoice before each renewal, but they're a separate product from your existing billing. Crypto payment gateway for SaaS covers what that takes.
You don't want to manage keys. With a non-custodial gateway the wallet that receives the money is yours, and so is its security. Self-custody crypto payments covers how much work that is.
You need Solana. Klap doesn't support it.
When a non-custodial gateway is the better choice
You want to keep the stablecoin. If you pay suppliers or contractors in USDC, you'd convert to dollars and back again, and pay for it twice. Receiving USDC into your own wallet skips both.
Your customers hold USDT. Stripe's list doesn't include it, and outside the US it's the most used stablecoin by a wide margin. USDC vs USDT for merchants has the numbers.
You move larger amounts. A $10,000 cap per payment rules out a lot of B2B invoices.
You don't want a balance anyone can hold back. With a custodial processor, an account review can pause payouts. With per-charge contracts, there's no balance at Klap to pause. Direct on-chain settlement explains how that works.
Using both
Nothing stops you from running both. One way to divide it is Stripe for cards and for customers who want a familiar checkout, and a non-custodial gateway for USDT payers and invoices above the cap. Both are driven by webhooks keyed to your own order ID, so your order system doesn't care which one confirmed the payment.
Klap is in closed beta. Evaluating Klap lists the routes we support and the gaps, if you want to check before you plan around it.