Cryptocurrency Payment URI

 

 

The URI Schemes Used by Different Blockchains

 

Each major blockchain has a defined URI scheme that standardises how payment requests are encoded in scannable links and QR codes. These schemes define which parameters are required, which are optional, and how they are formatted:

 

Network

URI Scheme

Example

Bitcoin

bitcoin:

bitcoin:1A1zP1...?amount=0.005&label=Order123

Ethereum (ETH)

ethereum: (EIP-681)

ethereum:0xAbCd...?value=1e18

Ethereum (ERC-20 tokens)

ethereum: with function call

ethereum:0xTokenAddr/transfer?address=0xRecip&uint256=1000000

Solana

solana:

solana:4zMMC...?amount=1.5&label=Payment

Litecoin

litecoin:

litecoin:LdP8Qo...?amount=10

Bitcoin Lightning (BOLT11)

lightning:

lightning:lnbc100m1pj...

 

 

BIP21 — the Bitcoin Payment URI Standard

 

BIP21 (Bitcoin Improvement Proposal 21), published in 2012, defines the bitcoin: URI scheme and remains the foundation of Bitcoin payment URIs. A BIP21 URI has the format: bitcoin:[address]?amount=[BTC amount]&label=[payer label]&message=[description]. The amount field is in BTC units (decimal), so a €200 payment at €40,000/BTC would encode as amount=0.005. All fields except the address are optional, though payment gateways always include the amount to prevent customer error.

A critical property of BIP21 is that unknown parameters are ignored by compliant wallet software, allowing forward-compatible extensions. The Bitcoin Payment Protocol (BIP70, later superseded by BIP321) extended BIP21 with signed payment requests, but BIP70 was deprecated due to complexity and security concerns. Modern implementations use BIP21 URIs with the payment amount and address as the complete request.

 

EIP-681 — the Ethereum Payment URI Standard

 

Ethereum's EIP-681 is significantly more complex than BIP21 because Ethereum payments can involve native ETH transfers or ERC-20 token transfers, which require different transaction types. A native ETH transfer encodes as ethereum:[address]?value=[amount in wei]. An ERC-20 token transfer encodes as a function call to the token contract: ethereum:[token_contract_address]/transfer?address=[recipient]&uint256=[amount in token units].

The encoding of token amounts in the smallest unit (wei for ETH, or the token's own smallest denomination) rather than in decimal creates a precision requirement: USDT with 6 decimal places encodes 100 USDT as uint256=100000000, while USDC with 6 decimal places uses the same format. Payment gateways generating Ethereum payment URIs must handle this precision correctly for each supported ERC-20 token to avoid amount errors.

 

Deep Linking and Mobile Wallet Integration

 

Payment URIs work not only in QR codes but also as clickable hyperlinks. On mobile devices, clicking a bitcoin: or ethereum: URI triggers the operating system to open the default wallet app registered for that URI scheme, with the transaction pre-populated. This enables a mobile-optimised checkout flow where the customer taps a 'Pay with Wallet' button, their wallet opens automatically, and they simply confirm the pre-filled transaction.

Deep linking only works if the customer has a compatible wallet app installed and registered as the handler for the URI scheme. On desktop, the browser's handling of custom URI schemes depends on the OS and installed applications. As a fallback, payment gateways always display the address and amount as text alongside any clickable URI, ensuring customers without a registered URI handler can still complete the payment manually.

 

 

Compliance Note: This glossary entry is provided for general educational purposes only and does not constitute financial, investment, legal, or tax advice. Industry terminology may vary across jurisdictions and providers; definitions herein may not directly reflect the specific features, terms, or specifications of Finassets' services. For details on Finassets' offerings, please refer to official product documentation or contact our team directly.