Crypto QR Code Generator

Wallet addresses are long and unforgiving. A QR code lets someone scan yours instead of copying it character by character.

Encode a receiving address and nothing else. One code per asset, labeled clearly, because sending one coin to the address of another chain usually destroys it. Check a printed code the way you would check a bank detail: scan it yourself and read the address back before the run.

Used for
  • Donation pages and posters
  • Invoices and payment requests
  • Conference and meetup stands
  • Merchant counter displays
  • Cold storage backup labels
Content categories

Preview

Enter content to generate QR code

How crypto QR codes work

For Bitcoin, Ethereum, Litecoin, Dogecoin and Solana the code holds a payment URI: the coin’s scheme followed by your receiving address, with an optional amount, which wallets recognize and pre-fill. USDT is handled differently and deliberately: it is a token issued on several chains rather than a chain of its own, so there is no scheme that could name it correctly, and the address is encoded bare. Every wallet understands a bare address, and a bare address cannot mislead one about which asset or which chain is meant.

What the code actually contains

Bitcoin, with an amount, and the code holds:

bitcoin:bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh?amount=0.005

The coin name is the URI scheme, which is how a wallet knows what you meant. USDT is the exception and is encoded as a bare address with no scheme and no amount: it is a token issued on several chains, so any scheme we chose would be asserting a chain we were never told.

Only ever encode a receiving address

A receiving address is public by design: it lets people send to you and can never be used to withdraw. A private key or seed phrase is the opposite, and a QR code is a perfectly readable way to hand one to anybody who photographs it. Never put a key, a seed phrase or an exchange login into a code, whatever a support message or a helpful stranger tells you.

One code per asset, labeled

Addresses are chain-specific. Sending an asset to an address on the wrong chain generally destroys it, and no wallet can undo that. Make a separate code for each coin you accept and print the coin and network beside each one — "USDT (TRC-20)", "USDT (ERC-20)" — because with USDT in particular the address alone does not tell the sender which network you meant.

Amounts, and why USDT has none

For the coins encoded as a payment URI, an optional amount is carried in the URI and the sender only confirms it. A bare USDT address has nowhere to put an amount, so it is dropped rather than silently mis-encoded. Print the figure next to the code instead. Better a code that sends to the right place for the wrong amount than one no wallet can read.

Check a printed code the way you would check a bank detail

Substitution is the real attack on a printed crypto code: someone stickers their address over yours. Scan your own code with a wallet before it goes on display, read the first and last characters of the address on the confirmation screen against your own records, and check again periodically. Transactions cannot be reversed, which makes this the one code worth checking on a schedule.

Troubleshooting

The wallet refuses the address
Usually the address and the selected coin are from different chains. Each code should carry one asset, and the network should be printed beside it, because with USDT especially the address alone does not say which chain you meant.
The amount does not appear in the wallet
Either it was left blank, or this is a USDT code, which is encoded as a bare address with nowhere to put one. Print the figure beside the code.

Crypto QR code FAQs

A receiving address is public by design: it lets people send to you and never lets anyone withdraw. What is never safe is encoding a private key or seed phrase, which anyone photographing the code would then hold.

Bitcoin, Ethereum, Litecoin, Dogecoin and Solana are encoded as payment URIs with an optional amount. USDT is encoded as a bare address, because it exists on several chains and no single scheme could describe it correctly.

A bare address has no field for one. Encoding an amount would mean choosing a chain on your behalf, and choosing wrong loses the funds. The amount goes in text beside the code instead.

No. Addresses are chain-specific and sending to the wrong chain usually destroys the transfer. Make one code per asset and label each with the coin and network.

Yes. The amount is carried in the payment URI and most wallets pre-fill it, leaving the sender to confirm.

No. The code is rendered in your browser and the address never leaves your device. We hold nothing about it and could not tell you what any of your codes contain.

No. It is technically possible by encoding a link, and it is a bad idea: a receiving address behind a redirect is exactly the shape of an address-swap scam, and the payer cannot see what they are really sending to until the redirect resolves. Encode the address directly, so what the wallet shows is what the code says.