QR Code Generator

Get paid in Bitcoin without anyone retyping your address

A Bitcoin address is 26 to 62 characters of case-sensitive gibberish. Reading one aloud or copying it by hand is how money gets lost. A QR code hands the wallet the exact string plus, if you want, the amount to send.

The single most important thing about a payment code is that there is no undo. A scanned address goes straight into a transaction the sender signs. If the address in the code is wrong, the coins are gone — so the value of encoding it is precisely that it removes human retyping error.

Networks are not interchangeable

A Bitcoin address only works on the Bitcoin network. It is not an Ethereum address, and sending BTC to an address from a different chain, or coins from a different chain to a BTC address, usually means permanent loss.

If you accept more than one currency, generate a separate code per network and label each one clearly. Never rely on a single code for 'crypto' in general — wallets match the address format to the chain, and a mismatch fails or, worse, sends to the wrong place.

What the sender's wallet shows on scan

When you include an amount, most wallets pre-fill it and show the fiat equivalent at the current rate, so the sender sees '0.005 BTC ≈ $x' before confirming. Without an amount, the wallet opens the address with an empty amount field for the sender to type.

Pre-filling the amount cuts a second source of error and speeds up point-of-sale payments. For a donation code where any sum is welcome, leave the amount blank.

Double-check the address before you print

Copy the address directly from your wallet — never retype it. After generating, scan your own code with the receiving wallet and confirm the address it shows matches character-for-character. Print a code once and it may hang on a wall for months; a single wrong character means every payment it collects is lost.

How to create a Bitcoin payment code

  1. Paste your receiving address. Copy it from your wallet's receive screen. Pasting avoids the case-sensitivity mistakes that come with typing.
  2. Add an amount if the price is fixed. For a product with a set price, enter the BTC amount so the sender can't underpay by mistake. Leave it blank for donations.
  3. Verify by scanning your own code. Open your wallet, scan the generated image, and check the address matches before you trust it.
  4. Download at high resolution. Export SVG or a large PNG so the fine pattern of a long address stays crisp when printed.

Technical details

  • Maximum characters: 2953
  • Recommended error correction: Q (quartile) — payment codes get printed and handled, and the higher recovery guards a string where one wrong module is unacceptable.
  • Payload format: bitcoin:<address>?amount=<btc> following BIP-21.
  • The amount is in BTC, not satoshis or fiat; wallets convert to the local currency for display only.

Frequently asked questions

Is it safe to share my Bitcoin address publicly?
Yes. A receiving address is meant to be public — it only lets people send you coins, not take them. Be aware that a reused address makes your incoming payments visible on the public ledger; generate a fresh address per campaign for privacy.
Can I set the amount in dollars instead of BTC?
No. The code carries a BTC amount because the exchange rate moves constantly. The sender's wallet shows the fiat equivalent at scan time, but the fixed value in the code is denominated in Bitcoin.
What happens if someone scans an old code after the price changed?
If you encoded a fixed BTC amount, that amount is unchanged; only its dollar value differs. If you encoded no amount, the sender simply enters the current price. For volatile pricing, leave the amount out and quote the price separately.
Does this work for Lightning payments?
This generates a standard on-chain Bitcoin address code. Lightning invoices use a different format and are usually single-use, so they are generated fresh per payment rather than printed.
Can I recover coins sent to a wrong address?
No. On-chain Bitcoin transactions are irreversible and there is no support line. This is exactly why encoding the address in a code — rather than trusting a hand-typed one — matters.
Why is my code so dense?
Long addresses plus an amount make a lot of data. Print larger and keep a white margin; don't shrink a payment code to fit a small label.

See also

Related generators