Transfer Requests
Transfer requests are Solana Pay's most straightforward payment method, designed for simple SOL or SPL token transfers without requiring any server interaction. When a user scans a QR code or clicks a transfer request link, their wallet has everything needed to compose and execute the transaction immediately.
The beauty of transfer requests lies in their simplicity: all payment information is encoded directly in the URL, making them completely self-contained and instantly executable.
URL Structure and Parameters
Transfer request URLs follow a standardized format that any Solana wallet can interpret:
solana:<recipient>?<optional-query-params>
Required Parameter:
recipient
: A base58-encoded public key representing the destination wallet. This is the only mandatory field, ensuring payments go directly from customer to merchant without intermediaries.
Optional Parameters:
amount
: Specifies the exact transfer amount as a decimal value. Without this, wallets prompt users to enter an amount manually—perfect for donations or flexible payment scenarios.spl-token
: The mint address for SPL token transfers. Transforms a SOL transfer into any token transfer, from USDC payments to custom loyalty tokens.reference
: A unique identifier for tracking payments on-chain. Since merchants don't control transaction signatures, references serve as searchable identifiers for payment reconciliation and customer support.label
andmessage
: User-facing strings that explain payment context. Label typically identifies the merchant, while message describes the specific purchase.memo
: Creates an on-chain record using Solana's memo program. Valuable for compliance, accounting, or providing permanent transaction context.
Example
Here's a transfer request for 1 SOL that demonstrates practical parameter usage:
solana:22222222222222222222222222222222222222222222?amount=1&label=Blueshift%20Subscription&message=1%20Month&memo=Order12345&reference=abc123def456
For businesses accepting stablecoins, here's a USDC transfer request:
solana:22222222222222222222222222222222222222222222?amount=200&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&label=Blueshift%20Subscription&message=1%20Month&memo=Order12345&reference=abc123def456
When to Use Transfer Requests
Transfer requests excel in scenarios where payment details are predetermined and unchanging:
Perfect Use Cases:
- E-commerce checkouts with fixed pricing
- Donation campaigns where users choose amounts
- Subscription payments with known amounts
- Point-of-sale systems for in-person transactions
- Invoice payments with specific amounts
Key Advantages:
- Non-Interactive Nature: Once generated, these URLs work independently of your servers. Perfect for situations where network connectivity might be unreliable or when you want to minimize infrastructure dependencies.
- Guaranteed Execution: Payment parameters are locked in the URL, ensuring customers pay exactly what you expect without dynamic pricing changes.
- Offline Capability: URLs can be generated locally on devices like POS terminals, enabling payments even if backend systems are temporarily unavailable.
- Reduced Server Load: No API calls needed during payment processing, making them highly scalable for high-volume scenarios.
- Universal Compatibility: Any Solana wallet can process these requests without requiring wallet-specific integrations.
Consider transfer requests when you need guaranteed payment amounts, want to reduce server dependencies, or require a payment method that works reliably in all network conditions.
Example
As fully fledged example, you can use the Payment Flow Merchant Example from Solana Foundation