QR code type
Bitcoin QR codes — the BIP-21 URI explained
A Bitcoin QR code stores a BIP-21 URI containing an address and optionally an amount, label and message. Wallets prefill a send screen from it. The address is public information, so the code itself is safe to print — but always verify the first and last characters after scanning.
The payload
bitcoin:bc1qar0srrr7xfkvy5l643lydnw9re59gtzzwf5mdq?amount=0.001&label=Coffee
BIP-21 defines the scheme. Parameters:
| Param | Meaning |
|---|---|
amount |
BTC, up to 8 decimal places — not satoshis |
label |
Recipient name shown in the wallet |
message |
Note for the payer |
lightning |
An optional BOLT-11 invoice for a unified QR |
amount=0.001 means one milli-bitcoin. Writing amount=100000 intending satoshis
requests one hundred thousand BTC, which the wallet will happily display. Check the
units before printing.
Uppercase bech32 makes smaller codes
Bech32 addresses (bc1…) are case-insensitive by design, precisely so they can be
uppercased for QR encoding. Uppercase lets the encoder use alphanumeric mode at 5.5
bits per character instead of byte mode at 8 — roughly 30% fewer modules for the same
address.
Legacy base58 addresses (1…, 3…) are case-sensitive and cannot be uppercased.
This is one of several practical reasons to prefer bech32.
Safety
The address is public — publishing it reveals nothing secret, and anyone can send to it. The risks are different in kind:
- Address substitution. Clipboard-hijacking malware and stickers pasted over printed codes both work by swapping the address. After scanning, check the first four and last four characters against what is printed.
- Irreversibility. There is no chargeback. A wrong address is a permanent loss.
- Privacy. A single reused address on public signage makes every payment to you publicly linkable. Rotate addresses, or use a payment processor that derives fresh ones.
Lightning
For small amounts, on-chain fees can exceed the payment. A unified QR carrying both an
on-chain address and a lightning= BOLT-11 invoice lets the wallet choose. Note that
Lightning invoices usually carry an expiry — a printed one dies.
FAQ
What units does the amount parameter use?
BTC, with up to eight decimal places. It is not satoshis. amount=0.001 is one milli-bitcoin; writing a satoshi figure here requests a vastly larger sum.
Is it safe to print my Bitcoin address publicly?
The address itself is public information and reveals no secret. The real risks are someone pasting a different code over yours, and the privacy loss from a single reused address making all your payments linkable.
Why should I use a bech32 address?
Bech32 addresses are case-insensitive, so they can be uppercased and encoded in alphanumeric mode — about 30% fewer modules than a legacy address, giving a code that scans more easily.
Can one QR code hold both on-chain and Lightning?
Yes, using the lightning= parameter alongside the address. Be aware that Lightning invoices normally expire, so this is unsuitable for print.