Solana QR code generator
A Solana Pay request: address, amount in SOL, and an optional label the wallet shows the payer. The payer approves in their own wallet.
A Solana QR code stores a solana: transfer request with the recipient and an optional amount, which a Solana wallet opens ready to send.
Style this code — colour, shape, branding, frame and output
Colour & contrastThe ink, the paper behind it, and the three eyes. Every choice is contrast-checked as you make it.
ShapeHow the squares are drawn. The three eyes are styled apart from the data, because a scanner finds the code by them.
BrandingYour mark on the code. Every picture here costs scanability — the notes say how much, and the preview is the truth.
Frame & captionA border and a line of text around the code — the "scan me" that tells a passer-by what it is for.
OutputWhat comes out of the download buttons, and what the symbol actually carries.
Print-ready PDF
A press file at the finished size: 3mm bleed, crop marks and a trim box a print shop’s checks read. The code is drawn black on white whatever the design above — how a colour prints is something only a test print can show.
Amounts in SOL, not lamports
Solana Pay takes the amount in the units a person types — 0.5 means half a SOL. There is no conversion to get wrong here, which makes it the most forgiving of the payment standards we build.
What we can check, and what nobody can
A Solana address is a 32-byte public key written in base58. We verify it decodes to exactly 32 bytes. There is no checksum in the format, so a typo that still lands on 32 bytes is undetectable — by us, by the wallet, by anyone. Scan the printed code with your own wallet before you print a thousand of them.
Label, message and memo
The label names you in the payer’s wallet and the message describes the payment; the memo travels on-chain with the transaction. All three are percent-encoded, so an ampersand in a shop name cannot break the request.
Solana QR codes
Does this work for USDC or USDT on Solana?
USDT has its own page, which fills in the mint address for you. This page builds a native SOL transfer.
What is a transaction request?
Solana Pay also defines a form where the code points at a server that returns a transaction to sign. That is a live integration rather than a printed code, and we do not generate one.
Can the payer change the amount?
Yes. The wallet prefills what the code carries and the payer confirms or edits before anything is signed.
Why does my address look shorter than the example?
Base58 drops leading zero bytes into single characters, so a valid address can be 43 characters instead of 44. Both are 32 bytes.

Built to ISO/IEC 18004:2024 (the QR code symbology) · Solana Pay specification (the solana: transfer request)