Solana USDC Payments Verified End-to-End

Published: October 18, 2026
The full x402 flow on the Solana rail — 402 challenge, transaction construction, partial signing, fee payer signature, on-chain settlement, and the retry that returns data — is now verified against live mainnet USDC. The interactive API docs have been updated to explain both rails.

What was verified

We ran an end-to-end payment against https://xrplme.online/wc/v1/thailand/bot-solana and confirmed the complete cycle:

  1. POST with no payment → 402 Payment Required with terms
  2. Construct a Solana transaction with 3 instructions: SetComputeUnitLimit, SetComputeUnitPrice, and TransferChecked (USDC)
  3. Partially sign the transaction with the buyer's wallet only
  4. Send the payment payload as X-PAYMENT-SIGNATURE
  5. Facilitator adds its fee payer signature and simulates on-chain
  6. HTTP 200 with data
network   : solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
asset     : EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v   # native USDC
amount    : 1000000                                            # 1.00 USDC
payTo     : 5KMiN7b7qBAqE2o5ucoCJ5xH9vZaFfzvq3dHeiGGvcMw
feePayer  : 32jx1jS6Dkkf7fuGv33h1rVgbAaMHNtnVbGkTWhW8heL
qrData    : solana:5KMiN7b7qBAqE2o5ucoCJ5xH9vZaFfzvq3dHeiGGvcMw?amount=1.00&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

What makes the Solana flow different

On the XRPL, the buyer signs a payment and sends two headers (X-PAYMENT-SIGNATURE + X-INV-ID). On Solana, the transaction must be partially signed by the buyer's wallet, then the facilitator adds a second signature from its fee payer wallet — because the buyer may hold USDC but no SOL for network fees.

Three things that trip up clients

Wallet roles

RoleHoldsKey location
Collector (payTo)All USDC revenueNot on the server — Phantom address only
Fee payerSOL for network feesServer 0600 env file
Payer (buyer)USDC onlyBuyer’s wallet

The revenue wallet never has its key on the server. Separating gas from revenue means the collector address can be a cold wallet.

Pricing

TierXRPL (XRP)Solana (USDC)
Standard1 XRP1.00 USDC
AI-enhanced5 XRP7.00 USDC

Prices settle nightly from server_solana.py (PRICE_STD / PRICE_AI) and are also returned live in every 402 response. Query xrplme_get_pricing for the current values.

Interactive docs updated

The API docs page now includes a payment rail selector (XRP vs USDC), correct pricing labels for both tiers, and Solana-specific 402 handling — it reads qrData (Solana Pay URI), feePayer, and displays the right retry instructions.

For AI agents and developers

A complete, runnable example is in the xrplme-mcp-client repository . It walks through:

Try it
curl -X POST https://xrplme.online/wc/v1/thailand/bot-solana \
  -H "Content-Type: application/json" \
  -d '{"message":"What are the current visa and entry requirements?"}'

Expect a 402 with the terms above. Coverage spans 30 countries. Data is informational only.


Related: