How to Accept Bitcoin Payments: Self-Hosted vs Hosted Gateway Comparison
Bitcoin Payments Are Going Mainstream
PayPal announced in 2025 that US businesses can accept 100+ cryptocurrencies. Visa keeps pushing crypto-enabled cards. Gnosis and Karsa launched self-custody Visa cards in Europe. Self-custody infrastructure is booming — and Bitcoin payments are no longer an edge case in 2026.
The question for merchants isn't "should I accept Bitcoin?" It's "how should I accept it?" Sign up for CoinGate? Deploy BTCPay Server on a VPS? Run Xcash with full multi-chain support?
Short answer: if you're processing under $10K/year in crypto, a hosted gateway is fine. Above that, self-hosted wins on cost and security.
Hosted Gateways: Easy Setup, but Someone Else Holds Your Keys
Hosted payment gateways are the most common way merchants accept Bitcoin today. Here's how they work:
- Sign up → Pass KYC verification
- Generate a payment address (the gateway controls the private key)
- Customer sends Bitcoin to that address
- Gateway takes 0.5%-1% fee and settles to your bank account (T+1 or slower)
Popular options: CoinGate (1%), OpenNode (0.5-1%), Coinbase Commerce (0.5%), NOWPayments (0.5%).
The upside is obvious: no servers, no private key management, no technical issues. Sign up and you're live.
The downsides?
- You never actually hold the funds. Every payment passes through the gateway's wallet first
- Fees scale with revenue. At $100K/month, that's $6K-$12K/year in platform fees
- KYC is mandatory. Not available in all countries. Some regions simply can't use these services
- Platform risk is your risk. If they get hacked or shut down, your funds are at risk. FTX and Celsius weren't that long ago
Self-Hosted Gateways: Your Keys, Your Money
Self-hosted flips the model entirely: you run the payment gateway on your own server. The private keys never leave your infrastructure. Customer payments go directly to your chain wallet — no middleman.
How it works:
- Spin up a Linux server (any cloud provider)
- One Docker command starts the full gateway stack
- Generate invoices, payment addresses, webhook notifications — all on your machine
- Payments confirm directly to your on-chain wallet
Leading options: Xcash (100+ chains, 3-minute deploy), BTCPay Server (Bitcoin only, more complex setup).
Why go self-hosted:
- Zero platform fees. Every cent goes to your wallet
- Full fund control. Private keys stay on your hardware
- No KYC. Your server, your node, your wallet
- Total customization. Risk rules, withdrawal policies, API permissions — all yours
Hosted vs Self-Hosted at a Glance
| Hosted Gateway | Self-Hosted Gateway | |
|---|---|---|
| Private key control | ❌ Gateway holds them | ✅ You hold them |
| Platform fee | 0.5% - 1% | Zero |
| Settlement | T+1 to bank account | Instant to your wallet |
| KYC required | Usually yes | No |
| Chains supported | 10-50 (varies) | 100+ with Xcash |
| Setup time | 5 minutes (sign up) | 3 minutes (Docker) |
| Downtime risk | Platform down = can't get paid | You control uptime |
| Customizability | Limited to gateway API | Full control |
The Cost Math
Say your e-commerce store does $50K/month, 20% from crypto ($10K/month). With a hosted gateway at 0.5%: $600/year in fees. Over five years: $3,000.
Scale that to $50K/month in crypto payments: $3,000/year in pure platform fees. For what? Someone else holding your keys.
A self-hosted gateway? A low-tier Linux server costs about $5/month ($60/year). One year of server costs is less than one month of hosted gateway fees.
The only "cost" of self-hosted is the 3 minutes it takes to run docker compose up -d.
Self-Hosted Options Compared
| Feature | Xcash | BTCPay Server | OpenNode (Hosted) | CoinGate (Hosted) |
|---|---|---|---|---|
| Self-custody | \u2705 | \u2705 | \u274c | \u274c |
| Bitcoin | \u2705 | \u2705 | \u2705 | \u2705 |
| EVM chains (ETH, BSC, Polygon, etc.) | \u2705 100+ | \u274c | Some | Some |
| USDT (ERC-20/TRC-20/BEP-20) | \u2705 | \u274c | \u274c | \u2705 |
| Platform fee | Zero | Zero | 0.5%-1% | 1% |
| Deploy time | 3 min | 30 min+ | Sign up | Sign up |
| Built-in risk scoring | \u2705 (MistTrack) | \u274c | \u274c | \u274c |
| Deposit & withdraw | \u2705 | \u274c | \u274c | \u274c |
| Webhook notifications | \u2705 | \u2705 | \u2705 | \u2705 |
When to Pick Hosted vs Self-Hosted
Choose hosted if:
- Personal blog or micro-site, under $1K/month in crypto transactions
- Zero server experience and no desire to learn
- Testing the market — you'll reassess in 3 months
Choose self-hosted if:
- SaaS platform, e-commerce store, or cross-border business, over $1K/month in crypto
- You care about self-custody and don't want a third party holding your keys
- You need multi-chain (not just Bitcoin — also USDT, ETH, BSC)
- You can run a Docker command
How to Start Accepting Bitcoin Payments
Three paths, depending on your choice:
Option A: Hosted (5 minutes)
1. Sign up at CoinGate.com or OpenNode.com
2. Pass KYC (passport/ID)
3. Get your API key
4. Plug into your checkout page Option B: Self-hosted with Xcash (3 minutes)
git clone https://github.com/xca-sh/xcash.git
cd xcash && ./scripts/init_env.sh && docker compose up -d Option C: Self-hosted with BTCPay Server (30 minutes, Bitcoin only)
# Bitcoin only — no USDT, no ETH, no multi-chain
curl -o btcpay.sh https://raw.githubusercontent.com/btcpayserver/btcpayserver-docker/master/btcpay.sh
# Manual env vars, domain config, SSL setup required
chmod +x btcpay.sh && ./btcpay.sh --version "1.12.3" BTCPay Server is solid if you only need Bitcoin and have time to configure it. But if you want Bitcoin + 100+ EVM chains + USDT on three networks out of the box, Xcash is the more complete self-hosted solution.
The Bottom Line
Accepting Bitcoin payments isn't a technical challenge in 2026. The real question is: how much are you willing to pay for convenience?
Hosted gateways take 0.5%-1% forever in exchange for zero setup friction. Self-hosted takes 3 minutes of your time in exchange for full fund sovereignty and zero platform fees.
If your business is growing — even as a side project — going self-hosted now is cheaper than migrating later. Every transaction you process through a hosted gateway is one where someone else takes a cut.
Deploy Xcash in 3 minutes:
git clone https://github.com/xca-sh/xcash.git
cd xcash && ./scripts/init_env.sh && docker compose up -d Or check out the cloud-hosted version at xca.sh.
FAQ
Do I need to pay taxes when accepting Bitcoin payments?
Tax treatment varies by jurisdiction. Generally, crypto payments received as business income are taxable. Capital gains tax may apply if you convert to fiat. A self-hosted gateway doesn't change your tax obligations — they depend on how you report income, not the tool you use to collect it. Consult a local accountant.
What cryptocurrencies do self-hosted gateways support?
BTCPay Server only supports Bitcoin. Xcash supports Bitcoin, Ethereum, BSC, Polygon, Arbitrum, Optimism, and 100+ EVM chains, plus USDT/USDC across ERC-20, TRC-20, and BEP-20 networks. If you need multi-chain, Xcash is the most complete self-hosted gateway available.
Do I need a static IP for a self-hosted gateway?
No. Your gateway communicates through blockchain nodes and webhook callbacks — no static IP required. Nginx reverse proxy with a domain name works fine. Most merchants use AWS Lightsail or Alibaba Cloud at the lowest tier (~$5/month), which is more than enough.
How fast do payments arrive?
With hosted gateways: block confirmations + T+1 settlement = 1-2 days total. With self-hosted: funds arrive in your on-chain wallet as soon as the blockchain confirms the transaction — typically 10-60 minutes depending on the network's confirmation requirements. You can move them to cold storage any time.