Networks

How to Accept Bitcoin Payments on Your Website

Learn how to accept bitcoin payments on your website, from choosing a gateway and pricing in fiat to confirmations, fees, replace-by-fee risk and refunds.

Flexrix Pay··7 min read

To accept bitcoin payments on your website, you need a receiving address for each order or customer, a price in BTC that is locked for a short time, and a reliable signal that the payment has enough confirmations to be safe. You can run that yourself with your own wallet and node, or use a bitcoin payment gateway that creates the address, watches the chain and notifies your back end. This guide covers both routes and the Bitcoin-specific details that matter: confirmations, fees, replace-by-fee and refunds.

Three ways to accept bitcoin payments online

ApproachSetup effortOrder matchingBest for
Static wallet addressMinimalManualA few invoices a month
Self-hosted processorHigh (node, wallet, server)AutomaticTeams with ops capacity
Bitcoin payment gatewayLowAutomaticMost online businesses

A static address on your checkout page costs nothing, but you cannot tell two customers apart, you match payments by hand, and you have no screening of incoming funds.

A self-hosted processor gives you full control of keys and data, but you run a Bitcoin node, keep a hot wallet secure and handle upgrades yourself.

A gateway creates a fresh address per order, tracks confirmations, converts fiat prices to BTC and sends your server a webhook when the payment is final. If you are new to the concept, our guide to what a crypto payment gateway is and how it works explains the moving parts.

How to accept bitcoin payments for business, step by step

  1. Pick your route from the table above. Most businesses start with a gateway.
  2. Decide how you price. Almost every store prices in a fiat currency and converts to BTC at checkout. Lock the rate for a limited time, because bitcoin's price moves. You can follow it on the Bitcoin price page or test a conversion with the converter.
  3. Generate a unique payment request per order. One address per order (or a stable address per customer) lets payments be matched without guesswork.
  4. Show a QR code with a payment URI. The bitcoin: URI scheme bundles the address and amount into one scannable code. It was first defined in BIP 21, which has been replaced by BIP 321. Most wallets pre-fill the payment from it.
  5. Wait for confirmations scaled to the value at risk (see below), then mark the order paid.
  6. Write down your policy for underpayments, overpayments, late payments and refunds before you launch.

If you sell by chat or email rather than through a checkout, a hosted link is enough; see how to create a crypto payment link.

Bitcoin confirmations: when is a payment safe?

A Bitcoin payment goes through stages:

  1. Broadcast. The customer's wallet sends the transaction to the network. It waits in the mempool (the pool of unconfirmed transactions).
  2. First confirmation. A miner includes it in a block.
  3. Further confirmations. Each new block on top adds one more confirmation.

The network targets one block about every ten minutes on average, but individual gaps vary widely. The Bitcoin developer guide's payment processing section advises that unconfirmed transactions should generally not be trusted without risk analysis, and notes that at six confirmations the network has spent about an hour protecting a transaction against double spends. The Bitcoin whitepaper shows why more blocks help: the chance that an attacker can rewrite history falls exponentially with each block added.

A practical rule is to scale the wait to what you lose if the payment is reversed:

SituationSensible response
In the mempool, unconfirmedShow "waiting for confirmation"; do not deliver
Replaced before confirmingTreat the original as unpaid
A few confirmations, typical orderUsually acceptable
High-value orderWait for more confirmations

Flexrix Pay credits Bitcoin payments after 3 confirmations, which typically takes around 30 minutes. That makes Bitcoin slower than stablecoins on networks such as TRON or Solana, where Flexrix Pay typically credits in about a minute, so tell customers what to expect on the payment page.

Replace-by-fee: why zero-confirmation is risky

Replace-by-fee (RBF) lets a sender replace an unconfirmed transaction with a new version that pays a higher fee. It is useful when a payment gets stuck during a fee spike. It also means an unconfirmed payment can be replaced by one that sends the same coins elsewhere.

RBF was originally opt-in, signaled inside the transaction as described in BIP 125. With Bitcoin Core 28.0, the default of the mempoolfullrbf option changed to 1, so nodes running that default accept replacements whether or not the original signaled. The practical rule for merchants: treat every unconfirmed bitcoin payment as replaceable, and never deliver anything valuable on zero confirmations.

Bitcoin fees: priced by size, set by demand

Bitcoin fees are not a percentage of the amount sent. They depend on how much block space a transaction uses and how much other users are bidding for that space at the same moment.

Since the SegWit upgrade, size is measured in virtual bytes (vbytes); BIP 141 defines virtual size as transaction weight divided by four. Fees are quoted as a rate, for example satoshis per vbyte. Three consequences for a merchant:

  • Sending $10 and $10,000 can cost the same fee if the transactions have the same structure.
  • Fees rise and fall with demand. A payment with a low fee rate can wait in the mempool for a long time when the network is busy. Fees vary a lot, so never quote a fixed figure to customers.
  • Address type matters when spending. Native SegWit addresses (starting bc1q, defined in BIP 173) and Taproot addresses (starting bc1p, using BIP 350) generally produce smaller inputs than older formats starting with 1 or 3.

UTXOs, in one paragraph

Bitcoin does not keep account balances. It tracks unspent transaction outputs (UTXOs), discrete pieces of bitcoin that are either spent or unspent, as the developer guide describes. Every payment you receive is a separate UTXO, and spending many small ones later makes a larger, more expensive transaction. If you run your own wallet, consolidating small UTXOs when fees are low is routine housekeeping. With a custodial gateway, that work is handled for you.

Underpayments, late payments and the expiry window

Customers sometimes send less than requested, often because an exchange deducted a withdrawal fee from the amount. Others pay after the quote expires. Decide in advance whether you ask for the rest, accept a small shortfall, honor the original price or refund.

Bitcoin adds one wrinkle: a payment can be broadcast before the quote expires but confirmed after it, especially when the customer chose a low fee. Make the expiry window long enough for a normal payment, and tell customers to use their wallet's standard fee setting.

On Flexrix Pay, every on-chain payment above the network minimum to an invoice or deposit address is credited to your balance once it is confirmed and screened, including underpayments, overpayments and late payments. The invoice is marked paid, underpaid or overpaid, a webhook is sent, and you decide whether to deliver, ask for the remainder or refund. Whether a payment was on time is decided by the block time recorded on-chain, not by when a server noticed it.

Refunds and recurring payments

Bitcoin has no chargebacks, and no merchant can pull funds from a customer's wallet. Two consequences:

  • Refunds are new outgoing transactions. Ask the customer for a refund address, confirm it and send. Decide whether you refund the original BTC amount or its fiat value at refund time, and put that rule in your terms. On Flexrix Pay, refunds are made by payout, and Bitcoin payouts can go to SegWit (bc1q), Taproot (bc1p) or legacy (1, 3) addresses.
  • No automatic recurring billing. You cannot charge a bitcoin wallet each month. Send a new invoice or payment link each period instead. Flexrix Pay does not offer recurring billing automation.

Tax and accounting treatment of bitcoin received as payment depends on where you operate. Consult a qualified accountant or lawyer.

FAQ

How many bitcoin confirmations should I wait for?

It depends on the value at risk. Never deliver on zero confirmations; for typical orders a few confirmations is common, and high-value orders justify more. Flexrix Pay credits after 3 confirmations, typically around 30 minutes.

Do I need my own Bitcoin node to accept bitcoin payments?

Only if you self-host a payment processor. A bitcoin payment gateway runs the infrastructure, watches the chain and notifies you, so you only integrate its API or share its payment links.

Can customers pay bitcoin from an exchange account?

Usually yes, as long as the exchange sends on the Bitcoin network to the address shown. Exchange withdrawals may arrive slightly short if a fee is deducted, so decide how you treat small underpayments.

Should I accept stablecoins as well as bitcoin?

Many businesses do. Bitcoin suits customers who hold BTC; stablecoins suit customers who want to pay a fixed dollar amount quickly. Our guide on how to accept crypto payments as a business covers choosing a mix.

Key takeaways

  • To accept bitcoin payments, use a unique address per order, a time-limited BTC quote and a confirmation policy.
  • Treat unconfirmed payments as replaceable; since Bitcoin Core 28.0, full replace-by-fee is the default.
  • Fees depend on transaction size and network demand, not on the amount sent, and they vary.
  • Refunds are new transactions, and recurring billing means sending a new request each period.
  • A gateway removes the need to run a node, track UTXOs and match payments by hand.

Try it with Flexrix Pay

Bitcoin is live on Flexrix Pay alongside stablecoins and other assets, with payments credited after 3 confirmations. Create a free account to send a payment link or invoice, and see the API reference for the bitcoin network and BTC asset.

Keep reading