When to use it
Shops and cafés that accept Bitcoin, donation pages and posters, a freelancer’s invoice, a conference booth. A code removes the one thing nobody should ever do with a Bitcoin address: type it by hand.
The example code on this page uses a placeholder address that no wallet will accept. Never encode an address you have not copied directly from your own wallet.
How it behaves on phones
iPhone: the built in Camera app recognises the bitcoin: scheme only if a wallet app has claimed it, in which case it offers to open that wallet. Otherwise it shows the raw text. In practice people open their wallet app and use its scanner, which reads the address, amount and label and shows a confirmation screen.
Android: most Android scanners hand bitcoin: to an installed wallet or show a chooser. Without a wallet the text is shown with a copy button. Wallet apps’ own scanners behave as on iPhone.
Common mistake
Encoding an address you retyped from a screen, or one copied from a chat where a character was autocorrected. Bitcoin addresses have a checksum so a wallet will usually refuse a mistyped one, but not always, and a payment to a valid wrong address is gone. Copy straight from the wallet’s receive screen, then scan your own code and compare every character.
Gotchas
BIP 21 format. bitcoin: then the address, then optional ?amount=, &label=, &message=. Amount is in BTC with a decimal point. Label and message must be percent encoded if they contain spaces.
Typos are unrecoverable. There is no bank to call. Modern bech32 addresses starting bc1 detect most typos and a wallet will refuse them, but the safe habit is copy, encode, scan back, compare.
Uppercase trick. Bech32 addresses are valid in all capitals, and the BIP 173 standard mentions this exact use: BITCOIN:BC1Q... fits the compact alphanumeric mode and makes a smaller code. The ?, = and & in the query part break it, so it only helps for a bare address.
Address reuse. A printed code means one address for every payer. That is fine for a donation tin and poor for a shop that wants tidy accounts. Point of sale systems generate a fresh code per sale for that reason.
Lightning. Lightning invoices use a different scheme, lightning:, and are single use, so they are not printable. Some wallets accept a unified code with both; that is beyond a static poster.
Size. The example payload is 78 characters and fits version 5 at level Q, 37 modules wide.
Try it in QR Studio
QR Studio has a Bitcoin type that takes an address, optional amount and label, encodes them as a BIP 21 URI, and shows the decoded result so you can check it against your wallet before you export.
Print advice
Level Q. A payment code that fails to scan costs a sale, and one that scans wrongly cannot happen with error correction, only with a wrong payload. 4 cm on a counter card, 8 cm on a poster. Print the first and last six characters of the address in text beside the code so a payer can check the wallet shows the same ones.
Try it yourself
Upload the code you made and read the address back, character by character, before it goes to print.