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.