How to Accept Solana Payments in 10 Minutes
Why Solana for payments
Solana isn't the only chain for merchant crypto, but for point-of-sale and web checkout it fits the constraints well. Transactions finalize in about one second and cost fractions of a cent, so a $5 coffee purchase doesn't get eaten by a $3 network fee like it would on Ethereum L1.
Solana natively supports SOL and any SPL token. In practice that means you can accept USDC, USDT, or SOL through the same integration — no additional contract deployment per token, no per-chain reconciliation. Wallet coverage in 2026 is broad: Phantom, Solflare, Backpack, and Glow on the native side, plus multi-chain wallets like Trust Wallet, Exodus, and Coinbase Wallet that all speak SPL out of the box.
Choose your integration approach
Solpaygate exposes two endpoints for creating a payment. Which you use depends on how much of the checkout UI you want to render yourself:
- Payment session (
/payment-session) — returns a token; openapp.solpaygate.com/pay?token=...in the customer's browser. Zero UI work on your end, hosted QR and countdown timer included. - Payment direct (
/payment-direct) — returns a raw deposit address you render inside your own checkout. Good when you want your own branding on the pay screen.
The hosted checkout is faster to ship and handles mobile wallet deep-links, QR rendering, and the countdown timer for you. For a longer comparison, see payment sessions vs payment links.
Add the API call
Once you have a company ID and API key from the dashboard, one POST is enough to create a payment:
const res = await fetch(
`https://api.solpaygate.com/api/company/${COMPANY_ID}/payment-session`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": API_KEY,
},
body: JSON.stringify({
amount: 25.00,
currency: "USDC",
reference: order.id,
returnUrl: `https://yourstore.com/order/${order.id}/thanks`,
webhookUrl: "https://yourstore.com/hooks/solpay",
}),
}
);
const { token } = await res.json();
Swap currency for "SOL" or "USDT" depending on what you're pricing in. The reference field is round-tripped back to your webhook so you can join the payment to an order in your database without extra bookkeeping.
Show the pay URL
Redirect the customer's browser to the hosted pay page:
https://app.solpaygate.com/pay?token=<token>
They see a checkout with the amount, a QR code, and a copyable Solana address. Any Solana wallet — Phantom, Solflare, Backpack, or Trust Wallet on mobile — can scan and pay in one confirmation. The session token itself is valid for 30 minutes to hand off to the customer; once the payment is opened, it expires 15 minutes after creation so stale QR codes don't linger.
If you set returnUrl, the customer's browser redirects there after payment. If you didn't set one, they see a success page hosted by Solpaygate. Either way, your webhook fires independently — do not rely on the browser redirect to update your order state, since customers close tabs.
Handle the webhook
Configure your webhookUrl to receive a POST when the payment confirms on-chain. The body contains the payment ID, amount, currency, the merchant reference you supplied, and the on-chain transaction signature. Verify the HMAC signature header, update your order in your database, then fulfill.
Retries are automatic if your endpoint doesn't return a 2xx — several attempts with backoff, so a brief outage won't lose the confirmation. For the how-to on securing and testing the webhook receiver, read our crypto webhooks guide.
That's the entire integration. Signup and dashboard setup take a few minutes, the API call is ten lines, and the webhook handler is another twenty. Ten minutes is the actual budget for a working end-to-end payment on a fresh account, not a marketing figure.
Ready to accept crypto payments?
Solpaygate lets your business accept SOL, USDT, and USDC on Solana with a single API call. Non-custodial, no smart contract to deploy.
Start for free