General
Solana Pay

Solana Pay

This content is being translated and will be available here when ready.

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

Blueshift © 2025Commit: fd080b2