Skip to main content

GET /v1/currencies

Returns the currencies this account has enabled for deposits or withdrawals, with per-currency limits and fees. Call this first when building a "choose a currency" picker — the response lists exactly what the user can deposit into or withdraw from on this account.

Method & pathGET /v1/currencies
Required permissionlist_currencies
AuthHMAC — see Authentication

Currencies are enabled per-account from the dashboard's Currencies page. A row appears in this response only if the merchant has toggled deposit_enabled or withdrawal_enabled (or both) for that currency, and the currency remains globally active on the gateway.

Query parameters​

None. The response is always the full enabled set for the calling account.

Response​

{
"success": true,
"message": "OK",
"data": [
{
"currency": "USDT",
"network": "ETH",
"name": "Tether USD",
"is_token": true,
"contract_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
"decimals": 6,
"deposit_enabled": true,
"withdrawal_enabled": true,
"min_deposit_amount": "0.000000000000000000",
"min_withdrawal_amount": "10.000000000000000000",
"withdrawal_fee_flat": "5.000000000000000000",
"withdrawal_fee_percent": "0.000000"
},
{
"currency": "ETH",
"network": "ETH",
"name": "Ether",
"is_token": false,
"contract_address": null,
"decimals": 18,
"deposit_enabled": true,
"withdrawal_enabled": false,
"min_deposit_amount": "0.000000000000000000",
"min_withdrawal_amount": "0.010000000000000000",
"withdrawal_fee_flat": "0.001000000000000000",
"withdrawal_fee_percent": "0.000000"
}
],
"data_count": 2
}
FieldTypeDescription
currencystringCurrency symbol (e.g. USDT, ETH). Use this value verbatim as the currency field when calling POST /v1/deposit-addresses or POST /v1/withdrawals.
networkstringNetwork code (e.g. ETH, BSC, TRX). Pair with currency to disambiguate same-symbol tokens across chains (USDT-ETH vs USDT-TRX).
namestringDisplay name. Safe to render in the user's currency picker.
is_tokenbooleanfalse for native chain currencies (ETH on Ethereum, BNB on BSC, TRX on Tron). true for ERC-20 / TRC-20 / BEP-20 tokens.
contract_addressstring | nullToken contract address. null for native currencies.
decimalsintegerOn-chain decimal precision. All amount fields on the API are in human units, not base units — you don't need this for arithmetic, only for display formatting.
deposit_enabledbooleanWhether the merchant has enabled deposits for this currency. When false, POST /v1/deposit-addresses will reject this currency + network pair.
withdrawal_enabledbooleanWhether the merchant has enabled withdrawals for this currency. When false, POST /v1/withdrawals will reject this currency + network pair.
min_deposit_amountstringMinimum deposit amount (decimal string, human units). Deposits below this are still credited but flagged in the dashboard. "0..." means no minimum.
min_withdrawal_amountstringMinimum withdrawal amount (decimal string, human units). POST /v1/withdrawals rejects amounts below this.
withdrawal_fee_flatstringFixed fee deducted on withdrawal (decimal string, in the same currency as the withdrawal).
withdrawal_fee_percentstringPercentage fee deducted on withdrawal (decimal string; "0.5" means 0.5%). Applied on top of the flat fee.

All decimal values are returned as strings to avoid float precision loss. Parse with decimal.Decimal (Python), BigNumber.js (Node), or similar.

Errors​

Standard middleware errors only — no business-logic failures on this read endpoint.

StatusCause
401Missing or invalid signature / timestamp / nonce.
403Key lacks list_currencies, or source IP not whitelisted.
429Rate limit exceeded.

Code samples​

Each sample assumes the sign_request(...) helper from the Authentication page is in scope.

METHOD="GET"
ENDPOINT="/v1/currencies"
QUERY=""
BODY=""

# ... sign exactly as on the Authentication page (same TS / BODY_HASH / CANONICAL / SIG block) ...

curl -sS "${BASE_URL}${ENDPOINT}" \
-H "X-CPG-Key: ${API_KEY}" \
-H "X-CPG-Timestamp: ${TS}" \
-H "X-CPG-Signature: ${SIG}"

Notes​

  • Cache, but not for long. The list changes whenever the merchant toggles a currency in the dashboard. A 1–5 minute cache is reasonable; don't cache for a full session.
  • Filter client-side. If you're rendering separate deposit and withdrawal pickers, filter on deposit_enabled / withdrawal_enabled rather than calling the endpoint twice — the response already carries both flags per row.
  • Same-symbol tokens. USDT exists on ETH, BSC, and TRX as three independent rows. Always pair currency with network when calling subsequent write endpoints — passing currency=USDT alone is ambiguous.
  • Not paginated. Usually fewer than 20 rows; no cursor / has_more fields.