Skip to main content

Supported Countries & Payment Currencies

CROSS Pay currently serves 53 countries. Each country supports one or more fiat currencies and/or the crypto currencies (USDT / CROSSD). For chain metadata and token contracts, see Chain & Token Contracts.

The tables below are a reference snapshot. For the live, merchant-specific mapping (including decimals), call GET /v1/catalog. Note that crypto currencies are hidden in countries under an active crypto restriction.

Why currencies, not providers

This page lists the payment currencies available per country, not the specific payment-method brands or underlying providers behind them. The available brands change often; the currencies a country can pay in are stable.

Unregistered countries are rejected

Any country code that is not on this 53-country whitelist fails at POST /v1/payments with 422 UNSUPPORTED_COUNTRY.

Coming soon
  • A public sandbox environment (test keys, test cards / test tokens)
  • Tron chains (tron-nile, etc.)
  • USDC token
GroupCountriesPayment currencies
Global (crypto only)1USDT / CROSSD
Local currency + crypto5THB / JPY / TWD / IDR / PHP (+ USDT / CROSSD)
USD + crypto47USD (+ USDT / CROSSD)

Country catalog

🌐 Global — crypto currencies (GL)

CountryCodePayment currencies
GlobalGLUSDT / CROSSD

Local currency + crypto

Each country supports its local fiat currency plus the crypto currencies (USDT / CROSSD).

CountryCodeLocal currencyCrypto
ThailandTHTHBUSDT / CROSSD
JapanJPJPYUSDT / CROSSD
TaiwanTWTWDUSDT / CROSSD
IndonesiaIDIDRUSDT / CROSSD
PhilippinesPHPHPUSDT / CROSSD

🌍 USD + crypto (47 countries)

These countries support USD as the fiat currency, plus the crypto currencies (USDT / CROSSD).

CodeCountryCodeCountry
USUnited StatesKWKuwait
GUGuamPYParaguay
KHCambodiaBHBahrain
AUAustraliaDODominican Republic
GBUnited KingdomPLPoland
CACanadaCOColombia
FRFranceNZNew Zealand
MPNorthern Mariana IslandsINIndia
ARArgentinaIEIreland
VNVietnamEGEgypt
UYUruguayPAPanama
DEGermanyECEcuador
ESSpainCHSwitzerland
LKSri LankaHUHungary
MXMexicoBGBulgaria
PTPortugalBEBelgium
SASaudi ArabiaSESweden
UAUkraineSGSingapore
PEPeruBRBrazil
QAQatarMYMalaysia
AMArmeniaHKHong Kong
CLChile
NONorway
ITItaly
NLNetherlands
SVEl Salvador

Currencies

Currency decimals

amount is always passed as a decimal string (to avoid JS Number precision loss). The decimal places follow ISO 4217; invalid precision is rejected with 422 INVALID_AMOUNT.

CurrencyTypedecimalsNotes
USDFIAT2'9.99'
THBFIAT2Thai Baht
JPYFIAT0Integers only ('500')
TWDFIAT2New Taiwan Dollar
IDRFIAT2Indonesian Rupiah
PHPFIAT2Philippine Peso
USDTCRYPTOPer chain (6 or 18)Ethereum=6, BSC=18, CROSS=18
CROSSDCRYPTO18Native CROSS Dollar (CROSS chain)
JPY and IDR

JPY has no decimal places — '500.50' is rejected. IDR is nominally 2 decimals but rounded in practice; round on the merchant side before sending.

Using the country parameter

Listing supported countries

GET /v1/countries is a public API.

GET /v1/countries HTTP/1.1
Host: api.crosspay.io

Responses are sorted by name ascending, and metadata is always an object. The currently used key for UI is metadata.image_url.

{
"countries": [
{
"country_code": "US",
"name": "United States",
"metadata": {
"image_url": "https://static.crosspay.ai/flags/us.svg"
}
}
]
}

Countries whose operational data has not yet been seeded may return metadata: {}. Clients do not need to add null-handling branches.

Payment catalog API

GET /v1/catalog (merchant API key required) returns, per supported country, the currencies payable through your provisioned payment methods, with the display decimals of each. Countries in which your merchant has nothing payable are omitted.

GET /v1/catalog HTTP/1.1
Host: api.crosspay.io
Authorization: Bearer sk_live_...
{
"updated_at": "2026-06-01T09:00:00Z",
"countries": [
{
"country_code": "JP",
"name": "Japan",
"currencies": [
{ "currency": "JPY", "decimals": 0 },
{ "currency": "USDT", "decimals": 4 },
{ "currency": "CROSSD", "decimals": 4 }
]
}
]
}
  • decimals is the payment/display precision (ISO 4217 for fiat, project convention 4 for crypto symbols) — not the per-chain on-chain token decimals. For smallest-unit conversion, use the chain/token metadata from Chain & Token Contracts.
  • Crypto currencies are excluded for countries under an active CRYPTO restriction (see below).
  • Responses carry an ETag and Cache-Control: private, max-age=300; revalidate with If-None-Match to get a cheap 304 Not Modified.

Country-level crypto restrictions

An admin-managed restriction list (independent of the FDS country blocklist, which blocks payment entry entirely) selectively limits crypto features per country:

TypeWhat it restrictsCountry signal used
CRYPTOCrypto payment methods on the hosted checkout, and crypto currencies in GET /v1/catalogBuyer's request IP (CloudFront-Viewer-Country — not forgeable)
ONRAMPFiat→crypto on-ramp (AlchemyPay) orderscountry parameter in the request body

South Korea (KR) carries an ONRAMP restriction by default (migrated from the former on-ramp country blacklist). The list is operated by the CROSS Pay admin service; there is no merchant-facing toggle. Response shapes are unchanged by restrictions — only the returned sets narrow.

country in payment creation

POST /v1/payments accepts an optional country field in the request body.

{
"currency": "USD",
"amount": "9.99",
"payer_uid": "user-456",
"country": "US"
}
  • Only 2-character ISO 3166-1 alpha-2 values are accepted.
  • Propagated to the response's checkout_url only, as ?country=US.
  • Not persisted to the database.
  • Not preserved in the checkout URL returned by subsequent GET /v1/payments/{payment_id} or GET /v1/checkout/{checkout_id} calls.

country in the Checkout API

GET /v1/checkout/{checkout_id} responses may include suggested_country, a UI hint derived from geo-resolution.

GET /v1/checkout/{checkout_id}/quotes accepts an optional country query parameter. When omitted, the backend uses the geo-resolution result, falling back to a default country if resolution fails.

GET /v1/checkout/cs_abc123/quotes?currency=USD&country=US
Do not use hints for authorization decisions

country and suggested_country should only be used as defaults for billing country or as the initial selection in dropdowns. Tax, routing, authentication, and access control must be driven by server responses and FDS results.

Merchant activation

Activating a new merchant or changing payment-currency exposure follows a managed process — no self-service UI is provided today.

  1. Complete the PG contract and KYC.
  2. Send an activation request to CROSS Pay specifying the target countries / currencies.
  3. The operations team applies the changes.
  4. Validate the flow.
  5. Activate.

Contact: support@crosspay.ai

Next steps