DEV Community

Cover image for Coinbase Commerce Is Shutting Down — Here's How to Migrate in 10 Minutes
QBitFlow
QBitFlow

Posted on • Originally published at qbitflow.app

Coinbase Commerce Is Shutting Down — Here's How to Migrate in 10 Minutes

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, 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.
  • KYB/KYC friction. Custodial means compliance requirements. More paperwork, more delays, more reasons for your account to get flagged.
  • 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, you should 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. That's it. We don't need your private keys, we don't want your seed phrase, and we will never ask for them.

Global by default. No geographic restrictions. If you have a wallet and an internet connection, you can accept payments through QBitFlow. Merchants in 100+ countries already do.

Multi-chain support. Ethereum and Solana, with a wide range of tokens on each:

  • Ethereum: ETH, WETH, USDC, USDT, LINK, UNI, ARB, POL
  • Solana: SOL, WSOL, USDC, USDT, LINK, DAI, JUP, RAY, HNT, BAT, PUMP

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, automatic billing cycles, 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 a platform fee percentage, and smart contracts enforce the split on every transaction. No manual reconciliation.

1.5% flat fee. No withdrawal fees. No conversion fees. No monthly minimums. No premium tiers. One number.


Side-by-Side: Coinbase Commerce vs QBitFlow

Feature Coinbase Commerce QBitFlow
Custody model Non-custodial (was) → Custodial (forced migration) Non-custodial — always
Seed phrase required Yes (migration form) Never — public address only
Geographic availability US + Singapore only (Coinbase Business) Global
Supported chains Ethereum, Bitcoin, Litecoin, others Ethereum + Solana (expanding)
Supported tokens Limited 8 on Ethereum, 11+ on Solana
One-time payments
Subscription billing ✅ (smart contract-enforced)
Marketplace / fee splitting ✅ (org→user model)
Hosted checkout ✅ (customizable theme + logo)
API & SDK REST API REST API + SDK (Python, JavaScript, Go)
Webhook verification HMAC-SHA256 HMAC-SHA256 + timestamp
Fee 1% (but now custodial) 1.5% flat
Withdrawal fees Varies $0
Hidden fees Conversion fees on some tokens None
Open-source contracts No Yes
KYC/KYB required Yes (Coinbase Business) No
Status after March 31 Shut down Fully 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. Connect your wallet — just paste your public wallet address (Ethereum, Solana, or both)
  4. Grab your API key from the dashboard

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

Step 2: Create Your First Product (2 minutes)

You can do this through the dashboard UI or via the API. Set your product name, description, and price in USD — conversion between USD and the currency the user chooses to pay with is handled automatically during 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):

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"]
Enter fullscreen mode Exit fullscreen mode

QBitFlow (new):

from qbitflow import QBitFlow

client = QBitFlow(api_key="your_api_key")

response = client.one_time_payments.create_session(
    product_name="Your Product",
    description="Product description",
    price=100.00,
    success_url="https://merchant.com/success",
    cancel_url="https://merchant.com/cancel",
    webhook_url="https://merchant.com/webhook",
    customer_uuid="customer-uuid"
)

checkout_url = response.link
Enter fullscreen mode Exit fullscreen mode

The structure is nearly identical. You're swapping one SDK 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 webhooks use two headers (X-Webhook-Signature-256 and X-Webhook-Timestamp) and fire on status: completed and failed.

Here's a complete FastAPI webhook handler:

from fastapi import FastAPI, Request, Header, HTTPException
from qbitflow import QBitFlow
from qbitflow.dto.transaction.session import SessionWebhookResponse
from qbitflow.dto.transaction.status import TransactionStatusValue

app = FastAPI()
client = QBitFlow(api_key="your_api_key")

@app.post("/webhook")
async def handle_webhook(
    request: Request,
    x_webhook_signature_256: str = Header(),
    x_webhook_timestamp: str = Header()
):
    body = await request.body()

    if not client.webhooks.verify(
        payload=body,
        signature=x_webhook_signature_256,
        timestamp=x_webhook_timestamp
    ):
        raise HTTPException(status_code=401)

    event = SessionWebhookResponse.model_validate_json(body)

    if event.status.status == TransactionStatusValue.COMPLETED:
        # Payment successful — fulfill the order
        pass
    elif event.status.status == TransactionStatusValue.FAILED:
        # Payment failed — notify the customer
        pass

    return {"received": True}
Enter fullscreen mode Exit fullscreen mode

Map your existing Coinbase event handlers:

  • charge:confirmedTransactionStatusValue.COMPLETED
  • charge:failedTransactionStatusValue.FAILED

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:

from qbitflow import QBitFlow, Duration

client = QBitFlow(api_key="your_api_key")

response = client.subscriptions.create_session(
    product_id=1,
    frequency=Duration(value=1, unit="months"),
    trial_period=Duration(value=7, unit="days"),
    webhook_url="https://your-domain.com/webhook",
    customer_uuid="customer-uuid",
)

print(response.link)  # Send this to your customer
Enter fullscreen mode Exit fullscreen mode

Here's how it works:

  1. Your customer clicks the checkout link and authorizes a spending cap via smart contract
  2. The smart contract allows your merchant wallet to pull payments on the defined schedule
  3. Billing happens automatically each cycle — no manual triggers, no cron jobs on your end
  4. Funds stay in the customer's wallet until each payment executes
  5. The customer can revoke authorization at any time

No seed phrases involved. No custody. The smart contract is the escrow, and it's open-source so anyone can audit it.

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: 1.5% flat. That's the whole pricing page. No withdrawal fees, no conversion fees, no monthly fees, no premium tiers. You pay 1.5% on each transaction. Period.

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: on a $100 transaction, Stripe takes $3.20 (US) or €1.75 (EU). QBitFlow takes $1.50. On a $50 transaction, Stripe takes $1.75 (US). QBitFlow takes $0.75.

QBitFlow is cheaper than Stripe for any transaction over ~$17. And there are zero 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 1.5% 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, global, 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.

Top comments (0)