Skip to main content
SouthPay separates two ideas: the fiat currency you price a payment in, and the crypto assets a customer can pay with. You always set the price in fiat. SouthPay handles the conversion to crypto and tells the customer exactly how much to send.

How currency works in a payment

When you create a payment intent, you pass a fiat amount and currency:
That currency does two things:
  1. It sets the price the customer sees and the settlement_currency on the intent. A 149.00 EUR intent always settles as 149.00 EUR, whatever crypto the customer sends.
  2. It is the basis for the exchange rate. SouthPay converts the fiat amount to the equivalent crypto amount for each asset at a rate it locks at creation time (the exchange_rate_snapshot on every payment address).
You do not pick the crypto asset. The customer does, at checkout, from the assets your store has enabled.

How payment addresses get created

On every payment intent, SouthPay generates one deposit address per crypto asset your store has enabled. Each address carries the exact crypto amount due at the locked rate.
A few things follow from this:
  • The token list is per store, not per request. If an intent has addresses for ETH and USDC on Ethereum, it is because the store enabled those two assets. Enable or disable assets from the dashboard; you do not choose them in the API call.
  • One address per enabled asset. Enable five assets and every intent returns five addresses. The customer pays exactly one of them.
  • Amounts are atomic. crypto_amount_atomic is in the asset’s smallest unit. Divide by 10^atomic_decimals for a human-readable amount.
  • An asset is skipped if no rate is available. If a live rate cannot be fetched for an enabled asset at creation time, that address is left off the intent rather than failing the whole request.
The definitive list of assets a given store accepts is whatever that store has enabled. The tables below are the full catalog you can enable from, not what any single store accepts by default.

Fiat currencies

These ten are the values accepted for currency on a payment intent. The intent settles in the same currency.
The two lists are not the same length, and nothing warns you. A payout schedule’s minimum_fiat_currency accepts only the first six. Set it to DKK, CHF, SEK or NOK and it falls back to USD. Your threshold is then interpreted as US dollars, silently.A bank account on a fiat payout destination can be denominated in any of the ten.

Crypto assets

Customers can pay with any of the assets below that your store has enabled. The list is grouped by token, so you can scan for the coin first and see which networks carry it. The asset_id is the value returned under supported_asset.asset_id on each payment address, so you can match an address back to its token and network.
Need a network or token that is not listed here? Email [email protected] and ask for it. We add assets on request.
Native ether is ETH. There is no ETH_ETH and no ETH_ETH_ERC20. There is no deposit asset on BNB Smart Chain, Arbitrum, Base, Optimism or Algorand. A customer cannot pay you on any of those.
USDC on Stellar carries 7 decimals, not 6 like every other USDC. Read atomic_decimals off the asset rather than assuming a value per token.

Deposit chains are not payout networks

These are two different lists and conflating them is the most common mistake on this page. A payout must go to a destination on the same network as the asset. See Payout destinations. Only USDT and USDC are eligible for the fiat off-ramp. Every other asset can be paid out on-chain only.

Test mode

In test mode you get exactly one asset, and it is not one of the ones above. Sepolia USDT and USDC exist in the catalogue but are inactive, so no test payment intent ever returns an address for them. Anything that depends on which assets a customer sees has to be validated in live mode. See Environments.
Last modified on August 21, 2026