$EX5 pre-sale is open — Seed tier · 500M fixed supply · 50% burn · KYC via EX5 ExchangeJOIN →
EX5 API · REST & WEBSOCKET

Account

Read balances, your trading fee rate and your profile. Account levels decide which API features you can use.

Account levels

LevelRequirementUnlocks
1E-mail verifiedDeposits, deposit addresses, order and trade history, balances
2Phone number verifiedPlacing and cancelling orders
3Identity documents verifiedWithdrawals, withdrawal history, withdrawal addresses and the transaction list

Internal transfers and balances have no level requirement. A call below the required level answers 403 (peatio) or 401 order.action_level.not_permitted (order entry).

Account level requirements

GET/api/v2/peatio/public/member-levelsPublic

Returns the minimum account level for deposits, withdrawals and trading as configured in the exchange core. Levels: 1 = e-mail verified, 2 = phone verified, 3 = identity documents verified.

  • Placing orders requires account level 2 (verified phone number). The trading level reported here applies to order and trade history.

Responses

StatusDescription
200Level requirements.

Response fields

FieldTypeDescription
deposit.minimum_levelintegerLevel for deposits.
withdraw.minimum_levelintegerLevel for withdrawals, beneficiaries and transaction history.
trading.minimum_levelintegerLevel for /api/v2/peatio/market/* (order placement through finex needs level 2).

Example response

JSON
{
  "deposit": {
    "minimum_level": 1
  },
  "withdraw": {
    "minimum_level": 3
  },
  "trading": {
    "minimum_level": 1
  }
}

Example request

curl -s "https://exchange.ex5.com/api/v2/peatio/public/member-levels"

List balances

GET/api/v2/peatio/account/balancesAPI key

Returns your account for every visible currency: balance is available funds, locked is reserved by open orders and pending withdrawals. Zero balances are included unless nonzero=true. Coin currencies include your deposit address, or null if none has been generated yet. Paginated.

Parameters

NameInTypeDescription
nonzeroquerybooleanIf true, omit currencies whose balance and locked are both zero.
limitqueryintegerPage size, 1-1000 (default 100).
pagequeryintegerPage number, starting at 1 (default 1).

Responses

StatusDescription
200Array of accounts.
401Rejected by the API gateway: missing/invalid API-key headers, nonce outside the 5 s window, bad signature, inactive key, 2FA disabled on the account, or no permission for this path. Body {"errors":["authz.<reason>"]} (Content-Type is text/plain).

Response fields

FieldTypeDescription
currencystringCurrency code.
balancestring (decimal)Available balance.
lockedstring (decimal)Reserved by open orders and pending withdrawals.
deposit_addressPaymentAddress | nullCoins only; null if no address has been generated yet.

Example response

JSON
[
  {
    "currency": "btc",
    "balance": "0.25",
    "locked": "0.01",
    "deposit_address": {
      "currencies": [
        "btc"
      ],
      "address": "bc1qexampleexampleexampleexampleexample0",
      "state": "active"
    }
  },
  {
    "currency": "usdt",
    "balance": "1500.0",
    "locked": "0.0",
    "deposit_address": null
  }
]

Example request

KID="your-api-key-id"; SECRET="your-api-secret"
NONCE=$(date +%s%3N)   # Unix time in milliseconds (GNU date)
SIG=$(printf '%s' "$NONCE$KID" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')
curl -s "https://exchange.ex5.com/api/v2/peatio/account/balances" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Get one balance

GET/api/v2/peatio/account/balances/{currency}API key

Returns your account for one currency.

Parameters

NameInTypeDescription
currencyrequiredpathstringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).

Responses

StatusDescription
200Account.
401Rejected by the API gateway: missing/invalid API-key headers, nonce outside the 5 s window, bad signature, inactive key, 2FA disabled on the account, or no permission for this path. Body {"errors":["authz.<reason>"]} (Content-Type is text/plain).
404Record not found: {"errors":["record.not_found"]}.
422Validation error, e.g. {"errors":["public.market.doesnt_exist"]}.

Response fields

FieldTypeDescription
currencystringCurrency code.
balancestring (decimal)Available balance.
lockedstring (decimal)Reserved by open orders and pending withdrawals.
deposit_addressPaymentAddress | nullCoins only; null if no address has been generated yet.

Example response

JSON
{
  "currency": "btc",
  "balance": "0.25",
  "locked": "0.01",
  "deposit_address": {
    "currencies": [
      "btc"
    ],
    "address": "bc1qexampleexampleexampleexampleexample0",
    "state": "active"
  }
}

Example request

KID="your-api-key-id"; SECRET="your-api-secret"
NONCE=$(date +%s%3N)   # Unix time in milliseconds (GNU date)
SIG=$(printf '%s' "$NONCE$KID" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')
curl -s "https://exchange.ex5.com/api/v2/peatio/account/balances/usdt" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Your trading fee

GET/api/v2/peatio/account/trading_fees/meAPI key

Returns the maker/taker fee rates that apply to your account, as fractions (e.g. "0.002" = 0.2%). Omit market for the account-wide rate.

Parameters

NameInTypeDescription
marketquerystringMarket id, e.g. btcusdt; omitted returns the account-wide (any) rate.

Responses

StatusDescription
200Fee rates.
401Rejected by the API gateway: missing/invalid API-key headers, nonce outside the 5 s window, bad signature, inactive key, 2FA disabled on the account, or no permission for this path. Body {"errors":["authz.<reason>"]} (Content-Type is text/plain).
422Unknown market: {"errors":["account.trading_fee.market_doesnt_exist"]}.

Response fields

FieldTypeDescription
groupstringYour fee group, e.g. "vip-0".
market_idstringRequested market, or "any".
market_typestring"spot".
makerstring (decimal)Maker fee as a fraction.
takerstring (decimal)Taker fee as a fraction.

Example response

JSON
{
  "group": "vip-0",
  "market_id": "btcusdt",
  "market_type": "spot",
  "maker": "0.002",
  "taker": "0.002"
}

Example request

KID="your-api-key-id"; SECRET="your-api-secret"
NONCE=$(date +%s%3N)   # Unix time in milliseconds (GNU date)
SIG=$(printf '%s' "$NONCE$KID" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')
curl -s "https://exchange.ex5.com/api/v2/peatio/account/trading_fees/me" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Your account

GET/api/v2/barong/resource/users/meAPI key

Returns your account: UID, role, level (1 = e-mail, 2 = phone, 3 = identity documents verified), whether 2FA is enabled (otp), state, labels, phones (masked) and profile data.

Responses

StatusDescription
200User.
401Rejected by the API gateway: missing/invalid API-key headers, nonce outside the 5 s window, bad signature, inactive key, 2FA disabled on the account, or no permission for this path. Body {"errors":["authz.<reason>"]} (Content-Type is text/plain).

Response fields

FieldTypeDescription
emailstringE-mail.
uidstringUser id, e.g. ID1234567890.
rolestringRole, e.g. "member".
levelinteger1 = e-mail, 2 = phone, 3 = identity documents verified.
otpbooleanTwo-factor authentication enabled (required for API keys).
statestring"active", "pending", ...
referral_uidstring | nullReferrer UID.
datastringFree-form JSON string.
usernamestring | nullUsername.
labelsarray<Label>Verification labels.
phonesarray<Phone>Phones (masked).
profilesarray<Profile>Profile data (masked).
data_storagesarray<object>Extra stored data.
created_atstring (ISO 8601 datetime, UTC)Created.
updated_atstring (ISO 8601 datetime, UTC)Updated.

Example response

JSON
{
  "email": "trader@example.com",
  "uid": "ID1234567890",
  "role": "member",
  "level": 3,
  "otp": true,
  "state": "active",
  "referral_uid": null,
  "data": "{\"language\":\"en\"}",
  "username": null,
  "labels": [
    {
      "key": "email",
      "value": "verified",
      "scope": "private",
      "created_at": "2026-01-15T10:00:00Z",
      "updated_at": "2026-01-15T10:00:00Z"
    },
    {
      "key": "phone",
      "value": "verified",
      "scope": "private",
      "created_at": "2026-01-15T10:05:00Z",
      "updated_at": "2026-01-15T10:05:00Z"
    }
  ],
  "phones": [
    {
      "country": "DE",
      "number": "4915*****89",
      "validated_at": "2026-01-15T10:05:00Z"
    }
  ],
  "profiles": [],
  "data_storages": [],
  "created_at": "2026-01-15T10:00:00Z",
  "updated_at": "2026-09-27T12:00:00Z"
}

Example request

KID="your-api-key-id"; SECRET="your-api-secret"
NONCE=$(date +%s%3N)   # Unix time in milliseconds (GNU date)
SIG=$(printf '%s' "$NONCE$KID" | openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')
curl -s "https://exchange.ex5.com/api/v2/barong/resource/users/me" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"