Supported chains & currencies

Discover supported chains and tokens at runtime.

payzum supports a range of blockchain networks and tokens. Because the supported set evolves as chains are added or updated, payzum exposes a live endpoint that is always authoritative.

GET /v1/currencies — the live source of truth

curl -s "$PAYZUM_BASE/v1/currencies" | jq .

This endpoint requires no authentication. It returns every (chain, symbol) tuple currently accepted by payzum. Always query this endpoint at runtime to discover supported currencies — do not hardcode a static list in your integration.

The response contains two representations:

  • currencies — the flat array of currency codes (legacy, kept for compatibility).
  • currencies_detailednew, and preferred for integrations: one object per currency with full metadata:
{
  "code": "usdttrc20",
  "symbol": "USDT",
  "chain": "tron",
  "standard": "trc20",
  "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
  "decimals": 6,
  "min_amount_usd": 100
}

min_amount_usd carries the same values (including operator overrides) as GET /v1/min-amount, so you can build a currency picker with minimums from a single call.

Do NOT hardcode contract addresses or currency codes in your codebase. Contract addresses and supported tokens change as chains are added or updated. Use GET /v1/currencies to fetch the live set before rendering currency pickers or validating user input.

Suffix-style currency codes

payzum uses a suffix-style encoding for currency codes that combines the token symbol with a chain identifier:

usdttrc20   →  USDT on Tron
usdterc20   →  USDT on Ethereum
usdcmatic   →  USDC on Polygon

The suffix identifies the chain; the prefix identifies the token. Pass these codes as the pay_currency field when creating an invoice:

curl -s "$PAYZUM_BASE/v1/currencies" | jq '.currencies'

In the flat currencies array, native coins carry no chain suffix — and eth in particular appears once per network it is native on (ethereum, arbitrum, optimism, base), so the code alone is ambiguous. To disambiguate, use currencies_detailed (each entry carries an explicit chain) or pass the pay_currency + network pair when creating an invoice.

Supported asset categories

At a high level, payzum accepts two categories of assets across its supported networks:

Native coins — the base currency of each chain (for example, BTC, ETH, TRX, SOL, LTC, DOGE, BNB, POL, and others). Native coins are transferred directly on-chain without a token contract.

Stablecoins — fiat-pegged tokens such as USDT, USDC, and DAI deployed across multiple chains. These typically offer faster settlement confirmation than volatile assets and are widely preferred for merchant invoicing.

Note: on BNB Chain only USDT is listed — USDC is not available there. This is a deliberate registry decision, not a bug or omission; always confirm the live set via GET /v1/currencies.

Example: list all available codes

export PAYZUM_BASE=https://merchant.payzum.com   # staging/sandbox: https://staging.payzum.com
 
# Print all supported currency codes
curl -s "$PAYZUM_BASE/v1/currencies" | jq '.currencies'
 
# Count how many are supported
curl -s "$PAYZUM_BASE/v1/currencies" | jq '.currencies | length'

Using currencies in invoice creation

Pass any code returned by /v1/currencies as pay_currency in POST /v1/payment. If you supply an unknown or unsupported code payzum returns 400 CURRENCY_NOT_SUPPORTED.

curl -X POST "$PAYZUM_BASE/v1/payment" \
  -H "x-api-key: $PAYZUM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "price_amount": 25.00,
    "price_currency": "usd",
    "pay_currency": "usdttrc20"
  }' | jq .pay_currency

See the API reference for the full list of invoice parameters.

Each network has a minimum payment amount — see Minimum amounts.