Home › Tools › Bitcoin payment link and QR code

Bitcoin payment link and QR code generator (BIP 21 / BIP 321)

Build a bitcoin: payment link with an address, amount, label and message, and get a QR code you can download as SVG. Or paste a link to see every field and whether a wallet should accept it under BIP 321, the update to BIP 21.

Updated · 4 min read

Free, and runs entirely in your browser: nothing you type is sent anywhere.

  1. In Build a link, enter your Bitcoin address. The tool checks it as you type (for a full breakdown of any address, use the address checker).
  2. Add an amount in BTC, and optionally a label (who is being paid) and a message (what for). Under More ways to pay you can add a Lightning invoice, a BOLT 12 offer or a silent payment address.
  3. Copy the link, or download the QR code as an SVG file that stays sharp at any size, for an invoice, a website or a printed sign.

To check a link someone gave you, switch to Read a link and paste it. Each field is listed with what it means, and the tool says whether a wallet should reject the link and why. The page starts with the example from BIP 21, whose address is deliberately invalid so nobody can pay it by accident.

What a bitcoin: URI looks like

A Bitcoin URI is the scheme bitcoin:, then an address, then optional parameters after a ?, separated by &:

bitcoin:175tWpb8K1S7NmH4Zx6rewF9WQrcZv245W?amount=50&label=Luke-Jr&message=Donation%20for%20project%20xyz
Parameter Meaning Defined in
amount Amount in BTC, decimal, with a period BIP 21
label Name of the recipient BIP 21
message Description of the payment BIP 21
lightning A Lightning BOLT 11 invoice BIP 321
lno A Lightning BOLT 12 offer BIP 321
sp A silent payment address BIP 321, BIP 352
bc, tb Extra SegWit addresses, keyed by their prefix BIP 321
pop, req-pop A proof-of-payment callback BIP 321
pj A payjoin endpoint BIP 78

Text in values is UTF-8 and percent-encoded: a space becomes %20 and an & inside a message becomes %26, so it isn't read as the start of a new parameter. The builder does this for you.

What BIP 321 changes from BIP 21

BIP 21, by Nils Schneider and Matt Corallo (building on Luke Dashjr's BIP 20), defined the scheme in 2012. BIP 321, by Matt Corallo, replaces it and mostly writes down how wallets already use these links:

  • The address may be empty, as in bitcoin:?lightning=lnbc..., if at least one payment instruction is given in the parameters.
  • Bech32 and Bech32m addresses (bc1q, bc1p) are explicitly allowed in the address part.
  • Payment instructions have standard keys: lightning, lno, sp and pay. New address formats should go in a parameter named after their prefix (bc=, tb=) rather than in the address part, so older wallets can still pay the fallback address.
  • Parameter names are case-insensitive (BIP 21 made them case-sensitive), which suits uppercase QR codes.
  • No duplicates for label, message, pop or amount; payment instructions may repeat.
  • Proof of payment: a pop parameter gives a URI the wallet can open after paying, so the app that asked for the payment learns it went through. Wallets must not open web (http, https) or other browser links this way.

The BIP 21 vs BIP 321 comparison goes through each change.

Amounts are always in BTC

The amount is in decimal BTC with a period, never satoshis and never with commas: amount=0.0015 asks for 150,000 sats, and amount=50,000.00 is invalid. Bitcoin's smallest unit is 0.00000001 BTC, so the tool rejects more than 8 decimal places. The unit converter converts sats to BTC exactly.

Required parameters: the req- prefix

A parameter whose name starts with req- is required. If a wallet doesn't understand it, it must treat the whole link as invalid rather than pay without it. Parameters without the prefix can be ignored safely. That lets a future feature be optional or mandatory. The only required parameter BIP 321 defines is req-pop, so the parser flags any other req- name as a link wallets must reject.

Why some Bitcoin QR codes are uppercase

QR codes have a compact alphanumeric mode for digits, capital letters, space and $ % * + - . / :. BIP 173 notes it is 45% more compact than byte mode, and recommends uppercase Bech32 addresses inside QR codes. The scheme and Bech32 addresses are case-insensitive, so BITCOIN:BC1Q... means the same as the lowercase form and makes a smaller, easier-to-scan code. This generator does that when the link is just a Bech32 address.

Characters such as ?, = and & aren't in the alphanumeric set, and Base58 addresses (starting with 1 or 3) are case-sensitive, so any other link is encoded exactly as shown. Every code uses error correction level M and the standard 4-module quiet zone, the blank margin scanners need.

Privacy and safety

BIP 321 says a link containing an on-chain address is a one-time payment request, not a permanent identifier: generate a new address for each payment, because reused addresses link your payments together. Reusable instructions such as BOLT 12 offers and silent payment addresses can be shared many times. Wallets must ask before paying a link, so always check the address and amount your wallet shows. Everything here runs in your browser; nothing you type is sent anywhere.

Frequently asked questions

What is a BIP 21 URI?

It's a link that starts with bitcoin: and packs payment details into one string: an address plus an optional amount, label and message, for example bitcoin:bc1q...?amount=0.001&label=Alice. Wallets open these links and QR codes with the details filled in. BIP 21 defined the format in 2012, and BIP 321 replaces it with a few additions.

How do I create a Bitcoin QR code with an amount?

Enter your address and the amount in BTC in the builder above, then copy the link or download the QR code. The amount goes into the link as amount= in decimal BTC with a period, such as amount=0.0025 for 250,000 sats. A wallet that supports BIP 21 fills in the amount when it scans the code, and still asks you to confirm.

Is the amount in a bitcoin: link in BTC or satoshis?

Always BTC. BIP 21 and BIP 321 require a decimal BTC amount with a period as the separator and no commas, so amount=50 means 50 bitcoin, not 50 sats. To request 50,000 sats, write amount=0.0005. There can be at most 8 decimal places, because one satoshi is 0.00000001 BTC.

What is the difference between BIP 21 and BIP 321?

BIP 321 is the update to BIP 21. It allows an empty address when the link carries another payment method, explicitly allows bc1 addresses, makes parameter names case-insensitive, standardizes keys for Lightning invoices (lightning=), BOLT 12 offers (lno=) and silent payments (sp=), forbids duplicate labels, messages and amounts, and adds an optional proof-of-payment callback.

Can a bitcoin: link include a Lightning invoice?

Yes. BIP 321 defines lightning= for a BOLT 11 invoice and lno= for a BOLT 12 offer. A Lightning wallet pays the invoice, and an on-chain wallet uses the address. The address may even be left out, as in bitcoin:?lightning=lnbc..., for a Lightning-only request.

Why do some Bitcoin QR codes use uppercase letters?

QR codes store uppercase letters and digits in a compact alphanumeric mode that BIP 173 says is 45% more compact than byte mode. Since the bitcoin: scheme and bc1 addresses are case-insensitive, writing BITCOIN:BC1Q... makes a smaller code that scans more easily. Legacy addresses starting with 1 or 3 are case-sensitive and must never be uppercased.

BIPs in this article

  • BIP 321: URI Scheme: Complete. Defines the "bitcoin:" link format that wallets use for payment requests in QR codes and clickable links. It specifies how to include an amount, label, message, and alternative payment methods, so…
  • BIP 21: URI Scheme: Closed. Defines the "bitcoin:" link format that packages an address, amount, label and message into one string, often shown as a QR code. Wallets read these links to fill in payment details automatically,…
  • BIP 173 (Bech32): Base32 address format for native v0-16 witness outputs: Deployed. Introduces Bech32, an address format for native SegWit outputs, recognizable by addresses starting with "bc1". It uses only lowercase letters and numbers and a strong checksum that catches typing…
  • BIP 352: Silent Payments: Complete. Silent Payments let someone publish one static address that anyone can pay, while each payment lands at a different, unlinkable address on the blockchain. Unlike similar schemes, it needs no extra…
  • BIP 20: URI Scheme: Closed. An early proposal for "bitcoin:" links that bundle an address and amount, so clicking or scanning one opens a wallet ready to pay. It was superseded by BIP 21.
  • BIP 78: A Simple Payjoin Proposal: Deployed. Defines Payjoin, a way for the payer and the recipient to both contribute coins to a single payment transaction. Because the result looks like an ordinary payment but breaks common assumptions used…
  • BIP 353: DNS Payment Instructions: Complete. Defines how to store Bitcoin payment instructions in DNS, the internet's naming system, so a person can be paid via a human-readable name such as an email-like address. Security extensions to DNS…

Learn more

Guides

Free tools

Glossary