General
Solana Pay

Solana Pay

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 and message: 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

Contents
View Source
Blueshift © 2025Commit: fd080b2