Accept BTC payments without Stripe or a Lightning node

A practical exact-sat order flow for small sites.

Accepting Bitcoin on a small site does not require Stripe, Coinbase Commerce, or a Lightning node. A practical pattern is:

  1. Create a unique BTC address and a unique satoshi amount for each order.
  2. Show a BIP21 URI and QR code.
  3. Poll Mempool.space for the address/amount pair.
  4. Unlock the digital download after the transaction is confirmed.
# Minimal order model
# address, amount_sats, status

Why exact sats? A shared address becomes usable when the invoice amount is unique. Combine a derived address with a randomized suffix of satoshis, and the payment can be matched without an index server or custodial processor.

For a small digital product, the server only needs the public address and order status. Keep private keys off the web server. Sweep funds separately. Use mempool.space as a convenience API, but consider your own Electrum instance for production.

I built a compact Python + HTML example with exact-sat invoicing, QR generation, payment polling, and download unlock:

https://mtg-arbitrage-desk.loca.lt/checkout-lite

A $1 payment-widget-only version is also available. The point is not that this is the right solution for every business, but that small sites can accept BTC without paying a recurring SaaS fee.


Write a comment