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

Deposits & withdrawals

Get deposit addresses, follow deposits and withdrawals, manage withdrawal addresses and send internal transfers. Withdrawals need account level 3 and a current 2FA code in every request.

Destination tags. On networks that use a tag or memo, such as XRP, the tag is part of the address: rXXXXXXXX…?dt=123456. Deposit addresses are issued in this form. When you add a withdrawal address, include the recipient's tag the same way; without it the withdrawal is sent with tag 0 and an exchange account on the other side may not be credited.

  • The currency of a deposit address or withdrawal selects the network, for example usdt.trc20 or usdt (ERC-20). Network ids are listed in GET /api/v2/peatio/public/currencies.
  • A new deposit address can take a moment to generate: while address is null, retry after a few seconds.
  • Withdrawals go to a saved address (beneficiary). New beneficiaries are active immediately. Each withdrawal needs the beneficiary id and a current 2FA code (otp).

Get deposit address

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

Returns your deposit address for a coin currency, generating one on first request. While generation is in progress address is null and state is "pending" - retry after a few seconds. currencies lists every currency that can be deposited to the same address. For XRP the address carries your destination tag as ?dt=<tag>; send both. Requires account level >= 1.

Parameters

NameInTypeDescription
currencyrequiredpathstringCoin currency code, e.g. btc or usdt.trc20.

Responses

StatusDescription
200Deposit address.
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).
403Account level below 1: {"errors":["account.deposit.not_permitted"]}.
422account.currency.deposit_disabled, account.wallet.not_found or account.currency.doesnt_exist.

Response fields

FieldTypeDescription
currenciesarray<string>Currencies that can be deposited to this address.
addressstring | nullThe address (XRP includes "?dt=<tag>"); null while being generated.
statestring"active", or "pending" while the address is being generated.

Example response

JSON
{
  "currencies": [
    "xrp"
  ],
  "address": "rEXAMPLExxxxxxxxxxxxxxxxxxxxxxxxxx?dt=123456",
  "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/deposit_address/usdt.trc20" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

List deposits

GET/api/v2/peatio/account/depositsAPI key

Returns your deposit history, newest first. Time filters apply to the last update time. Paginated. Requires account level >= 1.

Parameters

NameInTypeDescription
currencyquerystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
statequerystringFilter by state. One of: submitted, canceled, rejected, accepted, aml_processing, aml_suspicious, processing, skipped, collected, fee_processing, errored, refunding.
txidquerystringBlockchain transaction id.
time_fromqueryintegerUnix time in seconds; only deposits updated at or after this time.
time_toqueryintegerUnix time in seconds; only deposits updated at or before this time.
limitqueryintegerPage size, 1-100 (default 100).
pagequeryintegerPage number, starting at 1 (default 1).

Responses

StatusDescription
200Array of deposits.
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).
403Account level below 1: {"errors":["account.deposit.not_permitted"]}.
422Validation error, e.g. {"errors":["public.market.doesnt_exist"]}.

Response fields

FieldTypeDescription
idintegerDeposit id.
currencystringCurrency code.
amountstring (decimal)Amount credited.
feestring (decimal)Deposit fee.
txidstringBlockchain transaction id.
confirmationsintegerCoins only: confirmations seen.
statestringsubmitted, accepted, collected, processing, skipped, fee_processing, aml_processing, aml_suspicious, rejected, canceled, errored, refunding.
transfer_typestring"crypto" or "fiat".
created_atstring (ISO 8601 datetime, UTC)Detection time.
completed_atstring (ISO 8601 datetime, UTC) | nullCompletion time.
tidstringExchange-wide transaction id.

Example response

JSON
[
  {
    "id": 4213,
    "currency": "usdt.trc20",
    "amount": "250.0",
    "fee": "0.0",
    "txid": "9f2c1b7a00000000000000000000000000000000000000000000000000example",
    "confirmations": 31,
    "state": "collected",
    "transfer_type": "crypto",
    "created_at": "2026-09-26T08:15:04Z",
    "completed_at": "2026-09-26T08:17:40Z",
    "tid": "TID0123456789"
  }
]

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/deposits" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Get a deposit

GET/api/v2/peatio/account/deposits/{txid}API key

Returns one of your deposits by blockchain transaction id. Requires account level >= 1.

Parameters

NameInTypeDescription
txidrequiredpathstringBlockchain transaction id.

Responses

StatusDescription
200Deposit.
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).
403Account level below 1: {"errors":["account.deposit.not_permitted"]}.
404Record not found: {"errors":["record.not_found"]}.

Response fields

FieldTypeDescription
idintegerDeposit id.
currencystringCurrency code.
amountstring (decimal)Amount credited.
feestring (decimal)Deposit fee.
txidstringBlockchain transaction id.
confirmationsintegerCoins only: confirmations seen.
statestringsubmitted, accepted, collected, processing, skipped, fee_processing, aml_processing, aml_suspicious, rejected, canceled, errored, refunding.
transfer_typestring"crypto" or "fiat".
created_atstring (ISO 8601 datetime, UTC)Detection time.
completed_atstring (ISO 8601 datetime, UTC) | nullCompletion time.
tidstringExchange-wide transaction id.

Example response

JSON
{
  "id": 4213,
  "currency": "usdt.trc20",
  "amount": "250.0",
  "fee": "0.0",
  "txid": "9f2c1b7a00000000000000000000000000000000000000000000000000example",
  "confirmations": 31,
  "state": "collected",
  "transfer_type": "crypto",
  "created_at": "2026-09-26T08:15:04Z",
  "completed_at": "2026-09-26T08:17:40Z",
  "tid": "TID0123456789"
}

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/deposits/0x3f1c…e9a2" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

List withdrawals

GET/api/v2/peatio/account/withdrawsAPI key

Returns your withdrawal history, newest first. Time filters apply to the last update time. Paginated. Requires account level >= 3.

Parameters

NameInTypeDescription
currencyquerystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
statequerystringFilter by state. One of: prepared, rejected, accepted, skipped, processing, succeed, canceled, failed, errored, confirming, under_review.
ridquerystringDestination address.
time_fromqueryintegerUnix time in seconds; only withdrawals updated at or after this time.
time_toqueryintegerUnix time in seconds; only withdrawals updated at or before this time.
limitqueryintegerPage size, 1-100 (default 100).
pagequeryintegerPage number, starting at 1 (default 1).

Responses

StatusDescription
200Array of withdrawals.
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.
422Validation error, e.g. {"errors":["public.market.doesnt_exist"]}.

Response fields

FieldTypeDescription
idintegerWithdrawal id.
currencystringCurrency code (defines the network).
typestring"coin" or "fiat".
amountstring (decimal)Gross amount debited from your balance (the requested amount, fee included); the recipient receives amount - fee.
feestring (decimal)Withdrawal fee.
blockchain_txidstring | nullTransaction id once broadcast.
ridstringDestination address.
statestringprepared, accepted, skipped, processing, confirming, under_review, succeed, rejected, canceled, failed, errored.
confirmationsintegerCoins only.
notestring | nullYour note.
transfer_typestring"crypto" or "fiat".
created_atstring (ISO 8601 datetime, UTC)Creation time.
updated_atstring (ISO 8601 datetime, UTC)Last update.
done_atstring (ISO 8601 datetime, UTC) | nullCompletion time.

Example response

JSON
[
  {
    "id": 402,
    "currency": "usdt.trc20",
    "type": "coin",
    "amount": "100.0",
    "fee": "2.0",
    "blockchain_txid": "5a7e3c0000000000000000000000000000000000000000000000000000example",
    "rid": "TXexampleAddressxxxxxxxxxxxxxxxxxx",
    "state": "succeed",
    "confirmations": 20,
    "note": null,
    "transfer_type": "crypto",
    "created_at": "2026-09-26T09:00:00Z",
    "updated_at": "2026-09-26T09:03:12Z",
    "done_at": "2026-09-26T09:03:12Z"
  }
]

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/withdraws" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Withdrawal totals

GET/api/v2/peatio/account/withdraws/sumsAPI key

Returns the value of your withdrawals in the last 24 hours and the last month, each summed as amount x the currency's current price (see /public/currencies), counting withdrawals that are pending, in progress or succeeded. Requires account level >= 3.

Responses

StatusDescription
200Totals.
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.

Response fields

FieldTypeDescription
last_24_hoursstring (decimal)Last 24 hours.
last_1_monthstring (decimal)Last month.

Example response

JSON
{
  "last_24_hours": "100.0",
  "last_1_month": "1250.5"
}

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/withdraws/sums" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Create a withdrawal

POST/api/v2/peatio/account/withdrawsAPI key

Withdraws funds to one of your saved beneficiaries (addresses). Requires account level >= 3 and the current 6-digit code from your authenticator app in otp. The currency parameter selects the asset and network, e.g. usdt.trc20. amount is debited from your balance and the currency's withdraw_fee is taken out of it, so the recipient receives amount - withdraw_fee.

Parameters

NameInTypeDescription
currencyrequiredbodystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
amountrequiredbodystringAmount debited from your balance (fee included), > 0, within the currency precision.
beneficiary_idrequiredbodyintegerId of one of your active beneficiaries (GET /account/beneficiaries).
otprequiredbodyintegerCurrent 6-digit TOTP code from your authenticator app.
notebodystringOptional note, up to 256 characters.

Responses

StatusDescription
201Withdrawal created.
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.
422e.g. account.withdraw.invalid_otp, account.beneficiary.doesnt_exist, account.beneficiary.invalid_state_for_withdrawal, account.currency.withdrawal_disabled, account.withdraw.insufficient_balance, account.withdraw.invalid_amount, account.withdraw.create_error.

Response fields

FieldTypeDescription
idintegerWithdrawal id.
currencystringCurrency code (defines the network).
typestring"coin" or "fiat".
amountstring (decimal)Gross amount debited from your balance (the requested amount, fee included); the recipient receives amount - fee.
feestring (decimal)Withdrawal fee.
blockchain_txidstring | nullTransaction id once broadcast.
ridstringDestination address.
statestringprepared, accepted, skipped, processing, confirming, under_review, succeed, rejected, canceled, failed, errored.
confirmationsintegerCoins only.
notestring | nullYour note.
transfer_typestring"crypto" or "fiat".
created_atstring (ISO 8601 datetime, UTC)Creation time.
updated_atstring (ISO 8601 datetime, UTC)Last update.
done_atstring (ISO 8601 datetime, UTC) | nullCompletion time.

Example response

JSON
{
  "id": 402,
  "currency": "usdt.trc20",
  "type": "coin",
  "amount": "100.0",
  "fee": "2.0",
  "blockchain_txid": null,
  "rid": "TXexampleAddressxxxxxxxxxxxxxxxxxx",
  "state": "accepted",
  "confirmations": 0,
  "note": null,
  "transfer_type": "crypto",
  "created_at": "2026-09-26T09:00:00Z",
  "updated_at": "2026-09-26T09:00:00Z",
  "done_at": 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 -X POST "https://exchange.ex5.com/api/v2/peatio/account/withdraws" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG" \
  -H "Content-Type: application/json" -d '{"currency":"usdt.trc20","amount":"25","beneficiary_id":42,"otp":123456}'

List beneficiaries

GET/api/v2/peatio/account/beneficiariesAPI key

Returns your saved withdrawal addresses (beneficiaries). Paginated. Requires account level >= 3.

Parameters

NameInTypeDescription
currencyquerystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
statequerystringFilter by state. One of: active, pending.
limitqueryintegerPage size, 1-1000 (default 100).
pagequeryintegerPage number, starting at 1 (default 1).

Responses

StatusDescription
200Array of beneficiaries.
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.
422Validation error, e.g. {"errors":["public.market.doesnt_exist"]}.

Response fields

FieldTypeDescription
idintegerBeneficiary id.
currencystringCurrency label it was saved under.
uidstringOwner UID.
namestringLabel.
descriptionstringDescription.
dataobjectCoins: {"address": "..."}; fiat: bank details incl. full_name.
statestring"active" (usable) or "pending" (legacy PIN flow).
sent_atstring (ISO 8601 datetime, UTC)Legacy PIN e-mail time.

Example response

JSON
[
  {
    "id": 151,
    "currency": "usdt",
    "uid": "ID1234567890",
    "name": "My cold wallet",
    "description": "",
    "data": {
      "address": "TXexampleAddressxxxxxxxxxxxxxxxxxx"
    },
    "state": "active",
    "sent_at": "2026-09-20T12: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/peatio/account/beneficiaries" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Get a beneficiary

GET/api/v2/peatio/account/beneficiaries/{id}API key

Returns one of your beneficiaries. Requires account level >= 3.

Parameters

NameInTypeDescription
idrequiredpathintegerBeneficiary id.

Responses

StatusDescription
200Beneficiary.
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.
404Record not found: {"errors":["record.not_found"]}.

Response fields

FieldTypeDescription
idintegerBeneficiary id.
currencystringCurrency label it was saved under.
uidstringOwner UID.
namestringLabel.
descriptionstringDescription.
dataobjectCoins: {"address": "..."}; fiat: bank details incl. full_name.
statestring"active" (usable) or "pending" (legacy PIN flow).
sent_atstring (ISO 8601 datetime, UTC)Legacy PIN e-mail time.

Example response

JSON
{
  "id": 151,
  "currency": "usdt",
  "uid": "ID1234567890",
  "name": "My cold wallet",
  "description": "",
  "data": {
    "address": "TXexampleAddressxxxxxxxxxxxxxxxxxx"
  },
  "state": "active",
  "sent_at": "2026-09-20T12: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/peatio/account/beneficiaries/42" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Add a beneficiary

POST/api/v2/peatio/account/beneficiariesAPI key

Saves a withdrawal address. For coins data must contain address (it must be a well-formed address on a supported chain; for XRP append the destination tag as ?dt=<tag>); for fiat currencies data must contain at least full_name. On this exchange new beneficiaries are created directly in active state (no PIN confirmation step). Requires account level >= 3.

Parameters

NameInTypeDescription
currencyrequiredbodystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
namerequiredbodystringLabel for the address, up to 64 characters.
descriptionbodystringOptional description, up to 255 characters.
datarequiredbodyobjectJSON object: {"address": "..."} for coins, {"full_name": "...", ...} for fiat.

Responses

StatusDescription
201Beneficiary created.
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.
422e.g. account.beneficiary.missing_address_in_data, account.beneficiary.duplicate_address, account.currency.withdrawal_disabled, account.beneficiary.failed_to_create (invalid address).

Response fields

FieldTypeDescription
idintegerBeneficiary id.
currencystringCurrency label it was saved under.
uidstringOwner UID.
namestringLabel.
descriptionstringDescription.
dataobjectCoins: {"address": "..."}; fiat: bank details incl. full_name.
statestring"active" (usable) or "pending" (legacy PIN flow).
sent_atstring (ISO 8601 datetime, UTC)Legacy PIN e-mail time.

Example response

JSON
{
  "id": 151,
  "currency": "usdt",
  "uid": "ID1234567890",
  "name": "My cold wallet",
  "description": "",
  "data": {
    "address": "TXexampleAddressxxxxxxxxxxxxxxxxxx"
  },
  "state": "active",
  "sent_at": "2026-09-20T12: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 -X POST "https://exchange.ex5.com/api/v2/peatio/account/beneficiaries" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG" \
  -H "Content-Type: application/json" -d '{"currency":"usdt.trc20","name":"My TRON wallet","data":{"address":"TXYZ…your-address"}}'

Delete a beneficiary

DELETE/api/v2/peatio/account/beneficiaries/{id}API key

Archives one of your beneficiaries; it can no longer be used for withdrawals. Requires account level >= 3.

Parameters

NameInTypeDescription
idrequiredpathintegerBeneficiary id.

Responses

StatusDescription
204Deleted (no body).
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).
403Account level below 3: {"errors":["account.withdraw.not_permitted"]}.
404Record not found: {"errors":["record.not_found"]}.
422account.beneficiary.cant_delete.

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 -X DELETE "https://exchange.ex5.com/api/v2/peatio/account/beneficiaries/42" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Deposit and withdrawal history

GET/api/v2/peatio/account/transactionsAPI key

Returns your deposits and withdrawals in one list, sorted by last update time. type tells them apart (e.g. "Deposits::Coin", "Withdraws::Coin"). For withdrawals amount is the net amount sent (requested amount minus fee). Time filters apply to the last update time. Paginated. Requires account level >= 3 (both the deposit and the withdrawal level gates apply).

Parameters

NameInTypeDescription
currencyquerystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
deposit_statequerystringOnly deposits in this state (see List deposits).
withdraw_statequerystringOnly withdrawals in this state (see List withdrawals).
txidquerystringBlockchain transaction id.
time_fromqueryintegerUnix time in seconds; only records updated at or after this time.
time_toqueryintegerUnix time in seconds; only records updated at or before this time.
order_byquerystringSort by update time (default desc). One of: asc, desc.
limitqueryintegerPage size, 1-1000 (default 100).
pagequeryintegerPage number, starting at 1 (default 1).

Responses

StatusDescription
200Array of transactions.
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).
403Account level too low: account.deposit.not_permitted or account.withdraw.not_permitted.
422Validation error, e.g. {"errors":["public.market.doesnt_exist"]}.

Response fields

FieldTypeDescription
addressstringDeposit address or withdrawal destination.
currencystringCurrency code.
amountstring (decimal)Deposits: amount credited. Withdrawals: NET amount sent (requested amount - fee), unlike /account/withdraws which reports the gross amount.
feestring (decimal)Fee.
txidstring | nullBlockchain transaction id.
statestringDeposit or withdrawal state.
notestring | nullWithdrawal note.
confirmationsintegerConfirmations.
created_atstring (ISO 8601 datetime, UTC)Creation time.
updated_atstring (ISO 8601 datetime, UTC)Last update.
typestringRecord class, e.g. "Deposits::Coin", "Withdraws::Coin".

Example response

JSON
[
  {
    "address": "TXexampleAddressxxxxxxxxxxxxxxxxxx",
    "currency": "usdt.trc20",
    "amount": "98.0",
    "fee": "2.0",
    "txid": "5a7e3c0000000000000000000000000000000000000000000000000000example",
    "state": "succeed",
    "note": null,
    "confirmations": 20,
    "created_at": "2026-09-26T09:00:00Z",
    "updated_at": "2026-09-26T09:03:12Z",
    "type": "Withdraws::Coin"
  }
]

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/transactions" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

List internal transfers

GET/api/v2/peatio/account/internal_transfersAPI key

Returns transfers you sent to or received from other EX5 users, newest first. direction is "in" or "out". Paginated; when limit is not given the page size is 10.

Parameters

NameInTypeDescription
currencyquerystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
statequerystringFilter by state; the only state is completed.
limitqueryintegerPage size, up to 1000 (default 10).
pagequeryintegerPage number, starting at 1 (default 1).

Responses

StatusDescription
200Array of internal transfers.
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.
sender_usernamestring | nullSender username.
receiver_usernamestring | nullReceiver username.
sender_uidstringSender UID.
receiver_uidstringReceiver UID.
directionstring"out" if you sent it, "in" if you received it.
amountstring (decimal)Amount.
statusstring"completed".
created_atstring (ISO 8601 datetime, UTC)Time.
updated_atstring (ISO 8601 datetime, UTC)Time.

Example response

JSON
[
  {
    "currency": "usdt",
    "sender_username": null,
    "receiver_username": null,
    "sender_uid": "ID1234567890",
    "receiver_uid": "ID0987654321",
    "direction": "out",
    "amount": "25.0",
    "status": "completed",
    "created_at": "2026-09-25T10:00:00Z",
    "updated_at": "2026-09-25T10: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/peatio/account/internal_transfers" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG"

Send an internal transfer

POST/api/v2/peatio/account/internal_transfersAPI key

Moves funds instantly to another EX5 user identified by username or UID. Requires the current 6-digit TOTP code in otp.

Parameters

NameInTypeDescription
currencyrequiredbodystringCurrency code, e.g. btc, usdt or a network currency such as usdt.trc20 (see GET /api/v2/peatio/public/currencies).
amountrequiredbodystringAmount to send, > 0.
username_or_uidrequiredbodystringRecipient username or UID (e.g. ID1234567890).
otprequiredbodyintegerCurrent 6-digit TOTP code from your authenticator app.

Responses

StatusDescription
201Transfer completed.
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).
422e.g. account.internal_transfer.receiver_not_found, account.internal_transfer.invalid_otp, account.internal_transfer.insufficient_balance, account.internal_transfer.can_not_tranfer_to_yourself.

Response fields

FieldTypeDescription
currencystringCurrency code.
sender_usernamestring | nullSender username.
receiver_usernamestring | nullReceiver username.
sender_uidstringSender UID.
receiver_uidstringReceiver UID.
directionstring"out" if you sent it, "in" if you received it.
amountstring (decimal)Amount.
statusstring"completed".
created_atstring (ISO 8601 datetime, UTC)Time.
updated_atstring (ISO 8601 datetime, UTC)Time.

Example response

JSON
{
  "currency": "usdt",
  "sender_username": null,
  "receiver_username": null,
  "sender_uid": "ID1234567890",
  "receiver_uid": "ID0987654321",
  "direction": "out",
  "amount": "25.0",
  "status": "completed",
  "created_at": "2026-09-25T10:00:00Z",
  "updated_at": "2026-09-25T10: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 -X POST "https://exchange.ex5.com/api/v2/peatio/account/internal_transfers" \
  -H "X-Auth-Apikey: $KID" -H "X-Auth-Nonce: $NONCE" -H "X-Auth-Signature: $SIG" \
  -H "Content-Type: application/json" -d '{"currency":"usdt","amount":"10","username_or_uid":"ID1234567890","otp":123456}'