Skip to main content

Payment Methods

Payment methods supported by CROSS PAY and their regional availability.

Supported payment methods

CROSS Pay provides payment methods in the following categories. For full availability by country and currency, see Supported countries & payment currencies.

CategorytypeRepresentative payment methodsRegion
Credit/debit cardCARDCredit Card (payletter), Card (Worldpay)US, JP, TW
Mobile walletWALLETLINE Pay, JKO Pay, PayPay, GCash, K Plus, etc.TH, JP, TW, PH, ID
Instant bank transferBANK_TRANSFERPromptPay, Bank TransferTH, ID
Convenience/telco voucherVOUCHER7-Eleven, Indomaret, Alfamart, Chunghwa Tel, etc.TW, ID, PH, TH
CryptocurrencyCRYPTOBinance Pay, CROSS Pay (USDT / CROSSD)Global

Card payments

Visa, Mastercard, JCB, and Amex are supported.

Test cards

Card numberResult
4242 4242 4242 4242Success
4000 0000 0000 0002Declined (card_declined)
4000 0027 6000 31843DS authentication required
Expiration / CVC
  • Expiration: 12/26 (any future month)
  • CVC: any 3 digits

Wallet payments (PromptPay, GCash, etc.)

The user is redirected from the payment screen into the corresponding app, or scans a QR code.

PromptPay flow

User clicks the pay button
→ QR code is displayed
→ User scans it with their mobile banking app
→ User approves the payment
→ onSuccess callback
Testing wallet payments

A public sandbox that simulates payment success / failure without a real app integration is coming soon.

Cryptocurrency payments

Crypto payments are offered via two global payment rails. Both rails are mapped to country=GL (Global) and operate with tax_manager=SERVICE.

Payment methodproviderpg_fee_rateBilling currencies
Binance Paybinancepay1.00 %USDT (default)
CROSS Paycrosspay0.00 %USDT, CROSSD
Coming soon

USDC and Tron USDT support is planned for a post-launch phase.

Pegged stablecoins on fiat payments (include_pegged_assets)

When a payment is created in a fiat currency, the hosted checkout can additionally offer stablecoins pegged to that fiat (USD → USDT / USDC / CROSSD) as crypto payment options. Whether they appear is controlled by the optional include_pegged_assets flag on POST /v1/payments. The resolved value is persisted at creation and echoed on every Payment response.

Default flipped in v0.7.55 (BREAKING)

include_pegged_assets was introduced in v0.7.51 as opt-in (omitted = false, stablecoins hidden). Since v0.7.55 it is opt-out (omitted = true, stablecoins shown). If your integration relied on omitting the flag to keep stablecoins hidden, you must now send an explicit include_pegged_assets: false.

How the flag changes the checkout quotes (GET /v1/checkout/{checkout_id}/quotes):

Creation requestCrypto options in the quotes
currency: "USD" — flag omitted or trueStablecoins pegged to USD (USDT / USDC / CROSSD) appear alongside the fiat methods (1 USD ≈ 1 USDT peg)
currency: "USD", include_pegged_assets: falseNone — the checkout stays fiat-only
currency: "USDT" — flag has no effectExactly USDT (direct symbol match). Other pegged assets (USDC / CROSSD) are never added

Given a payment created without the flag:

POST /v1/payments
{ "currency": "USD", "amount": "9.99", "payer_uid": "user-123" }

When the buyer opens the checkout, then the quotes include both the fiat methods for the buyer's country and crypto options such as crosspay-usdt, crosspay-crossd quoted at the 1 USD ≈ 1 USDT peg.

Given the same payment with "include_pegged_assets": false, then the quotes contain the fiat methods only — no stablecoin option is offered.

Country-level crypto restrictions

Crypto payment methods are not offered everywhere. An admin-managed restriction list controls two independent gates:

  • CRYPTO — the hosted checkout hides all crypto payment methods when the buyer's IP-resolved country (CloudFront-Viewer-Country — an authoritative signal the client cannot forge) is on the list. Selecting a crypto quote from a restricted country is rejected server-side as well.
  • ONRAMP — fiat→crypto on-ramp (AlchemyPay) orders are blocked based on the country request parameter. South Korea (KR) is restricted by default (migrated from the former on-ramp country blacklist).

GET /v1/catalog applies the same CRYPTO gate: crypto currencies are excluded from restricted countries, so the catalog matches what the checkout actually offers there. Response field structures are unchanged — only the returned sets narrow.

Supported tokens / chains

The same token symbol may have different decimals and contracts per chain, so always reference the token metadata when converting to amount_smallest_unit.

Fetch the full contract address and ABI via GET /v1/chains/{slug} (public, no auth). This page is a reference snapshot — at runtime, always trust the API response values.

Payment methodTokenChain (slug)chain_iddecimalsToken contract
Binance PayUSDTethereum160xdAC17F958D2ee523a2206206994597C13D831ec7
Binance PayUSDTbsc56180x55d398326f99059fF775485246999027B3197955
CROSS PayUSDTethereum160xdAC17F958D2ee523a2206206994597C13D831ec7
CROSS PayUSDTbsc56180x55d398326f99059fF775485246999027B3197955
CROSS PayUSDTcross612055180x1c37d4F44ed3eC86d96868001CfA89e97112a85C (Bridge USDT)
CROSS PayCROSSDcross612055180xff42C13D927a6b9265236619161Accb227b6d452

For the full mapping across all 53 countries, see the Supported Countries & Payment Method Catalog.

Payment flow

User clicks the pay button
→ Selects chain / token
→ Deposit address + amount is displayed
→ User sends from their wallet
→ Wait for block confirmations (1-2 minutes)
→ payment.succeeded webhook

On-chain payment exchange rate

When a session created with USD is processed via CROSS Pay, the token amount is automatically calculated using the rate at payment time (based on the 1 USDT ≈ 1 USD peg).

{
"currency": "USD",
"amount": 9900
}
// → USDT 9.9 (paid in USDT on the selected chain, 1 USDT = 1 USD peg)

You can also call with a stablecoin symbol such as USDT / USDC / CROSSD directly as the currency — in that case the token amount is charged as-is, without conversion.

Additional on-chain payment fields

Payment completion responses include chain-level details in the payment_method_detail field.

{
"payment_method_detail": {
"chain": "ethereum",
"token": "USDT",
"to_address": "0x7a2…F3e",
"amount_token": "9.9",
"tx_hash": "0xabc…123",
"block_number": 12345678,
"confirmed_at": "2025-06-01T09:12:34Z"
}
}

Activating payment methods

Per-merchant activation of payment methods does not yet have a self-service UI; the process is as follows.

  1. Send an activation request via support@crosspay.ai or your partner channel, specifying the country, currency, and payment method.
  2. When the PG contract / review is complete, the operations team enables the method for the merchant.
  3. Verify that the method appears in the GET /v1/checkout/{checkout_id}/quotes response.

Activation status can only be checked via the GET /v1/checkout/{checkout_id}/quotes response.