Back to blog

Finance

Coinbase Commerce is shutting down — here's how to migrate in 10 minutes

QBitFlow Team

9 min read

On this page · 8 sections

March 31, 2026. That's the deadline. Coinbase Commerce is done.

If you're one of the 8,000+ merchants who built your crypto payment flow on Coinbase Commerce, you have 10 days to figure out what comes next. Coinbase's answer is "Coinbase Business", a custodial service limited to the US and Singapore. For most of you, that's not an answer at all.

We built QBitFlow as a non-custodial crypto payment processor. When Coinbase announced this shutdown, our inboxes started filling up. This post is the migration guide we keep sending people, now public so everyone can use it.


What's actually happening

Coinbase is folding Commerce into a new product called Coinbase Business. Here's what that means in practice:

Your self-managed wallets are gone. Coinbase Commerce was non-custodial: you held your own keys, and funds went to your wallet. Coinbase Business is custodial. Coinbase holds your funds. Full stop.

Geographic lockout. Coinbase Business is only available in the United States and Singapore. If you're a merchant in Europe, Asia, Latin America, Africa, or anywhere else, there is no migration path. You're just... cut off.

The seed phrase disaster. This is the part that made security researchers lose their minds. Coinbase published a migration form asking merchants to paste their 12-word seed phrases into a web page. Your seed phrase. Into a browser form. On the internet.

ZachXBT flagged it. evilcos (SlowMist founder) called it out as dangerous. And they're right: this goes against every security principle in crypto. Your seed phrase is the master key to your wallet. You don't type it into web forms. Ever. Not even if Coinbase asks nicely.

The fact that a company as large as Coinbase shipped this tells you something about how much thought went into this transition.


Why this should worry you

You chose Coinbase Commerce for a reason. Probably several:

  • Self-custody. You controlled your funds. No intermediary could freeze, delay, or seize your money.
  • Simplicity. Clean API, hosted checkout, webhook notifications.
  • Trust. The Coinbase brand gave your customers confidence.

Coinbase Business throws away the first one. And without self-custody, the other two don't matter much. There are plenty of custodial payment processors out there, most of them better established than a brand-new Coinbase product.

Here's what migrating to Coinbase Business actually means:

  • Someone else controls your money. Coinbase can freeze your account, delay withdrawals, or comply with seizure orders, all without your consent.
  • Geographic exclusion. Not in the US or Singapore? You literally cannot use it.
  • The seed phrase risk. If you already pasted your seed phrase into that form, move your funds to a new wallet immediately. That key is compromised.

QBitFlow: the non-custodial alternative

QBitFlow is what Coinbase Commerce should have become. Here's the short version:

Non-custodial, for real. Payments flow directly from your customer's wallet to yours through open-source smart contracts. We never touch your funds. We never hold your keys. We can't freeze your account because there's nothing to freeze.

No seed phrases. Ever. You give us a public wallet address and sign a message proving it's yours. That's it. We don't need your private keys, we don't want your seed phrase, and we will never ask for them.

Multi-chain support. Ethereum, Base and Solana, with stablecoins like USDC, USDT and EURC and the chains' major tokens on each. The docs list every supported coin.

You choose which chains and tokens to accept. Your customers pay in their preferred token, and you receive that exact token: no forced conversions, no auto-swaps eating into your margins.

Subscription billing. This is something Coinbase Commerce never offered. QBitFlow supports recurring payments enforced by smart contracts: spending caps, billing on each due date, trial periods. More on this below.

Marketplace model. If you're a platform (think: creator economy, multi-vendor marketplace), QBitFlow supports organization-level accounts with automatic fee splitting. Set your fee per seller, and the smart contracts take it from each payment. No manual reconciliation.

0.99%, down to 0.5% with volume. No withdrawal fees (there's nothing to withdraw). No conversion fees. No monthly minimums. No premium plans: the rate drops on its own as you grow. The network fee is separate, and your customer pays it on top.


Side-by-side: Coinbase Commerce vs QBitFlow

FeatureCoinbase CommerceQBitFlow
Custody modelNon-custodial (was), custodial (forced migration)Non-custodial, always
Seed phrase requiredYes (migration form)Never: public address only
Geographic availabilityUS + Singapore only (Coinbase Business)Self-serve sign-up, by email
Supported chainsEthereum, Bitcoin, Litecoin, othersEthereum, Base and Solana
Supported tokensLimitedStablecoins and major tokens on each chain
One-time payments✅✅
Subscription billing❌✅ (smart contract-enforced)
Marketplace / fee splitting❌✅ (organization and members)
Hosted checkout✅✅ (your branding)
API & SDKREST APIREST API + SDKs (TypeScript, Python, Go, PHP)
Webhook verificationHMAC-SHA256HMAC-SHA256 + timestamp
Fee1% (but now custodial)0.99%, down to 0.5% with volume, network fee apart
Withdrawal feesVariesNone: funds land in your wallet
Hidden feesConversion fees on some tokensNone
Open-source contractsNoYes
Status after March 31Shut downFully operational

Migration guide: 4 steps, 10 minutes

This is the part you came for. Here's exactly how to move from Coinbase Commerce to QBitFlow.

Step 1: sign up on QBitFlow (2 minutes)

  1. Go to qbitflow.app/get-started
  2. Sign up with your email
  3. Add your public wallet address for each chain you want, and sign a message to prove it's yours
  4. Create an API key in the dashboard

No seed phrases. No private keys. Just a wallet address.

Step 2: create your first product (2 minutes)

You can do this through the dashboard or via the API. Set your product name, description, and price in USD. The conversion between USD and the currency your customer picks happens at checkout. Done.

Step 3: swap your API integration (5 minutes)

If you're using Coinbase Commerce's API to create charges, here's the before and after.

Coinbase Commerce (old):

Python

import requests response = requests.post(    "https://api.commerce.coinbase.com/charges",    headers={"X-CC-Api-Key": "your-api-key"},    json={        "local_price": {"amount": "100.00", "currency": "USD"},        "redirect_url": "https://merchant.com/success",        "cancel_url": "https://merchant.com/cancel",        "metadata": {"order_id": "12345"}    })checkout_url = response.json()["data"]["hosted_url"]

QBitFlow (new):

Python

import os import qbitflow client = qbitflow.QBitFlow(os.environ["QBITFLOW_API_KEY"]) session = client.checkout_sessions.create_payment(    product_name="Your Product",    description="Product description",    price=100.00,  # USD    reference="order-12345",  # your order id: unique per space    # QBitFlow replaces the placeholder with the session's id when it redirects the customer.    success_url=f"https://merchant.com/success?uuid={qbitflow.PLACEHOLDER_UUID}",    cancel_url="https://merchant.com/cancel",) checkout_url = session.link

The structure is nearly identical. You're swapping one call for another. If you had a wrapper function around Coinbase's API (and you probably did), you're changing the internals of one function.

Step 4: update your webhook handler (1 minute)

Coinbase Commerce webhooks used a single X-Cc-Webhook-Signature header with HMAC-SHA256 verification and events like charge:confirmed and charge:failed.

QBitFlow signs each delivery in one QBitFlow-Signature header (a timestamp and an HMAC-SHA256), and the SDK's router checks it for you. Create the endpoint in your dashboard (Settings → Webhooks) and keep its whsec_… secret. Here's a complete FastAPI handler:

Python

import os import qbitflowfrom fastapi import FastAPI router = qbitflow.WebhookRouter(os.environ["QBITFLOW_WEBHOOK_SECRET"])  @router.on("payment.completed")  # the handler gets the typed data, then the eventdef fulfil(data: qbitflow.PaymentCompleted, event: qbitflow.Event) -> None:    # At least once: the same event can arrive twice, deduplicate on event.id.    mark_order_paid(data.reference or data.uuid, event_id=event.id)  @router.on("checkout.expired")def release(data: qbitflow.CheckoutExpired, event: qbitflow.Event) -> None:    release_order(data.reference)  app = FastAPI()# Verifies the QBitFlow-Signature header on the raw body, parses the event, runs the handler# for its type, and answers the status QBitFlow expects (200, 400 or 500).app.add_api_route("/webhooks/qbitflow", router.fastapi_endpoint(), methods=["POST"])

Map your existing Coinbase event handlers:

  • charge:confirmed → payment.completed
  • charge:failed → nothing to do yet. A failed attempt isn't final: your customer can try again from the same checkout. If it's never paid, checkout.expired tells you, and you release the order.

Fulfil on the webhook, never on the redirect to your success page (anyone can open that URL).

That's it. Four steps. Your checkout flow is now running on QBitFlow.


Bonus: subscriptions (something Coinbase Commerce never had)

One of the most requested features Coinbase Commerce never shipped was recurring billing. If you were hacking together subscription logic on top of one-time charges, you can stop.

QBitFlow handles subscriptions natively with smart contract-enforced spending caps:

Python

session = client.checkout_sessions.create_subscription(    product_name="Pro plan",    description="Monthly access",    price=4.99,  # USD per period    frequency=qbitflow.Duration(value=1, unit=qbitflow.DurationUnit.MONTHS),    trial_period=qbitflow.Duration(value=7, unit=qbitflow.DurationUnit.DAYS),    reference="order-12346",    success_url=f"https://merchant.com/success?uuid={qbitflow.PLACEHOLDER_UUID}",    cancel_url="https://merchant.com/cancel",)print("Send the customer to", session.link)  # sub@…: the subscription's id once signed

Here's how it works:

  1. Your customer opens the checkout link and signs one allowance for a number of periods, with a maximum per period
  2. The first period is billed at signing (with a free trial, when they confirm it)
  3. QBitFlow bills one period on each due date, within what they signed: no manual triggers, no cron jobs on your end
  4. Funds stay in the customer's wallet until each bill
  5. When the allowance runs low, they're prompted to top up. They top up or cancel from their own page

Subscriptions are paid in tokens (stablecoins like USDC), not in a chain's native coin. No seed phrases involved. No custody. The smart contracts are open-source, so anyone can read exactly what they do.

This is genuinely new infrastructure that didn't exist on Coinbase Commerce. If you've been wanting to offer crypto subscriptions, now you can.


Pricing: the real math

Let's talk numbers honestly.

QBitFlow: 0.99%, down to 0.5% as you grow. No withdrawal fees, no conversion fees, no monthly fees, no premium plans. Your first $5,000 go at 0.5%; then you pay 0.99% on each transaction, 0.75% once your last 30 days pass $50,000 and 0.5% from $100,000. The network fee is separate, and your customer pays it on top.

Coinbase Commerce was 1%, but that product is dead. Coinbase Business pricing hasn't been fully disclosed, and it comes with custodial strings attached.

How does this compare to traditional payments?

Stripe charges 2.9% + $0.30 in the US, or 1.5% + €0.25 in Europe. Add international card fees (1-2%), currency conversion fees, and chargeback fees ($15 per dispute whether you win or not).

Quick math (example): on a $100 transaction, Stripe takes $3.20 (US) or €1.75 (EU). QBitFlow takes $0.99. On a $50 transaction, Stripe takes $1.75 (US). QBitFlow takes $0.50.

On those rates, QBitFlow's fee is lower at every amount. And there are no chargebacks in crypto: that alone saves some merchants thousands per year.

What about other crypto processors? Many advertise rates below 1%, but read the fine print. Withdrawal fees, conversion fees, premium plan requirements, and minimum thresholds add up fast. QBitFlow's schedule is the real number: what you see is what you pay.


Time's running out

March 31 is 10 days away. Coinbase Commerce will stop processing payments. If you haven't migrated, your checkout breaks.

You have three options:

  1. Move to Coinbase Business, if you're in the US or Singapore and you're okay with custodial. Paste your seed phrase into their form if you want (please don't).
  2. Find another processor. There are several. Do your research.
  3. Move to QBitFlow: non-custodial, a 10-minute setup, and you keep your keys.

We built QBitFlow because we believe merchants shouldn't have to choose between convenience and self-custody. You can have both.

Start your migration →

Setup takes about 10 minutes. If you hit any snags, reach out to us at support@qbitflow.app. We're helping merchants migrate all week.

Your keys. Your funds. Your business.

Subscribe to our newsletter

New posts in your inbox. You confirm your address first.

Take your first payment today. In test mode, for free.