Accepting SPL Token Payments: USDT, USDC, and Beyond

Published Sep 2, 2026 · 6 min read

What SPL tokens are

SPL is Solana's equivalent of ERC-20: a token standard implemented by the on-chain Token Program. Every SPL token has a mint account (the token's identity), and each holder has an associated token account that stores their balance for that mint. USDC, USDT, and thousands of other tokens on Solana all follow the same interface.

The upside for merchants is that once your gateway can accept one SPL token, it can accept any of them with minimal extra work — the transfer instructions are structurally identical, and only the mint address changes.

Which stablecoins we support

Solpaygate supports two SPL stablecoins out of the box, plus native SOL:

When a customer pays in SOL, we quote a rate at payment creation and settle at that rate. If you want to weigh the tradeoffs between the two stablecoins for a payments use case, the USDT vs USDC business comparison covers redemption rails, network fees, and counterparty risk in more depth.

Associated token accounts explained

An associated token account (ATA) is a deterministic per-mint sub-account for a given wallet. If you hold USDC, the runtime has computed a specific ATA address that stores your USDC balance for that wallet; if you hold USDT, there's a different ATA for that mint. The main wallet address doesn't hold token balances directly — it only owns the ATAs.

This matters for merchants in two places. First, if your master wallet has never held a given token, its ATA for that mint doesn't exist yet, and a small rent-exempt deposit (roughly 0.002 SOL) is needed to create it. Second, if a payer sends tokens to a raw wallet address rather than the ATA, the transaction will fail. Solpaygate handles both automatically; you never have to think about ATAs when using the hosted checkout.

Fee-payer pattern

Solana network fees are paid in SOL, always. If you're accepting USDC and the customer's wallet only has USDC, the transaction can't ship because no one is paying the network fee. This trips up plenty of first-time integrators, and it's the single most common cause of "the pay button doesn't do anything" support tickets.

There are two ways around it. Either the customer keeps a small SOL balance in their wallet — typically 0.01 SOL is more than enough for months of activity — or the merchant sponsors the fee via a fee-payer pattern, a co-signed transaction where a merchant-owned wallet pays the SOL fee for the customer's token transfer.

Solpaygate's hosted checkout at app.solpaygate.com/pay guides customers through the SOL-for-fees requirement automatically and shows a warning if their wallet balance is too low. If you're rendering your own UI via POST /api/company/{companyId}/payment-direct, plan on displaying the fee estimate yourself.

Adding more tokens

Beyond USDC and USDT, merchants occasionally ask us for payment support in tokens like PYUSD, EUROC, or a specific in-app token. Adding a new SPL token to your account involves three things:

  1. Whitelisting the mint address on your Solpaygate merchant profile so we know it's an accepted currency.
  2. Configuring a swap route — optional, but useful if you want incoming payments converted to your preferred stablecoin at confirmation time.
  3. Ensuring your master wallet has (or will lazily create) an ATA for that mint.

Not every SPL token is a good fit for payments. Look at daily on-chain volume before whitelisting — if the token trades a few hundred dollars a day, you'll get slippage on any swap route, and settlement will surprise you. Native, well-liquid stablecoins are the safe choice for anything above a few dollars per transaction.

For a step-by-step tour of wiring up a merchant integration end-to-end, including custom SPL support, see the developer walkthrough of the Solana payment gateway API.

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