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.
| Category | type | Representative payment methods | Region |
|---|---|---|---|
| Credit/debit card | CARD | Credit Card (payletter), Card (Worldpay) | US, JP, TW |
| Mobile wallet | WALLET | LINE Pay, JKO Pay, PayPay, GCash, K Plus, etc. | TH, JP, TW, PH, ID |
| Instant bank transfer | BANK_TRANSFER | PromptPay, Bank Transfer | TH, ID |
| Convenience/telco voucher | VOUCHER | 7-Eleven, Indomaret, Alfamart, Chunghwa Tel, etc. | TW, ID, PH, TH |
| Cryptocurrency | CRYPTO | Binance Pay, CROSS Pay (USDT / CROSSD) | Global |
Card payments
Visa, Mastercard, JCB, and Amex are supported.
Test cards
| Card number | Result |
|---|---|
4242 4242 4242 4242 | Success |
4000 0000 0000 0002 | Declined (card_declined) |
4000 0027 6000 3184 | 3DS authentication required |
- 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
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 method | provider | pg_fee_rate | Billing currencies |
|---|---|---|---|
| Binance Pay | binancepay | 1.00 % | USDT (default) |
| CROSS Pay | crosspay | 0.00 % | USDT, CROSSD |
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.
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 request | Crypto options in the quotes |
|---|---|
currency: "USD" — flag omitted or true | Stablecoins pegged to USD (USDT / USDC / CROSSD) appear alongside the fiat methods (1 USD ≈ 1 USDT peg) |
currency: "USD", include_pegged_assets: false | None — the checkout stays fiat-only |
currency: "USDT" — flag has no effect | Exactly 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 thecountryrequest 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 method | Token | Chain (slug) | chain_id | decimals | Token contract |
|---|---|---|---|---|---|
| Binance Pay | USDT | ethereum | 1 | 6 | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
| Binance Pay | USDT | bsc | 56 | 18 | 0x55d398326f99059fF775485246999027B3197955 |
| CROSS Pay | USDT | ethereum | 1 | 6 | 0xdAC17F958D2ee523a2206206994597C13D831ec7 |
| CROSS Pay | USDT | bsc | 56 | 18 | 0x55d398326f99059fF775485246999027B3197955 |
| CROSS Pay | USDT | cross | 612055 | 18 | 0x1c37d4F44ed3eC86d96868001CfA89e97112a85C (Bridge USDT) |
| CROSS Pay | CROSSD | cross | 612055 | 18 | 0xff42C13D927a6b9265236619161Accb227b6d452 |
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.
- Send an activation request via support@crosspay.ai or your partner channel, specifying the country, currency, and payment method.
- When the PG contract / review is complete, the operations team enables the method for the merchant.
- Verify that the method appears in the
GET /v1/checkout/{checkout_id}/quotesresponse.
Activation status can only be checked via the
GET /v1/checkout/{checkout_id}/quotes response.