hollaex-node-lib v2.18.0
hollaex-node-lib
Nodejs library for HollaEx Kit enabled exchanges.
This library is specifically for end users and traders to connect to HollaEx Kit exchanges. It connects to HollaEx Pro by default.
Usage
const hollaex = require('hollaex-node-lib');
const client = new hollaex();
You can pass custom apiURL
, wsURL
and baseURL
of the HollaEx-Enabled exchange to connect to. apiURL
is https://api.hollaex.com
for HollaEx Pro and for your custom exchange it would be something like https://myexchange.com/api
.
wsURL
is the websocket URL for the socket connection and you should pass your stream URL. For HollaEx Pro it is wss://api.hollaex.com/stream
and for your exchange it would be something like wss://myexchange.com/stream
. baseURL
is not required and it is set by default to /v2
unless you need to connect to an older version of HollaEx.
You can also pass your apiKey
and apiSecret
generated from the HollaEx-Enabled exchange to use private requests that require authentication. For public endpoints apiKey
and apiSecret
are not required.
const client = new hollaex({
apiURL: '<EXCHANGE_API_URL>',
wsURL: '<EXCHANGE_WS_URL>',
apiKey: '<MY_API_KEY>',
apiSecret: '<MY_API_SECRET>'
});
You can also pass the field apiExpiresAfter
which is the length of time in seconds each request is valid for. The default value is 60
.
Example:
const client = new hollaex({
apiURL: '<EXCHANGE_API_URL>',
wsURL: '<EXCHANGE_API_URL>',
apiKey: '<MY_API_KEY>',
apiSecret: '<MY_API_SECRET>'
});
client
.getTicker('xht-usdt')
.then((res) => {
console.log('The volume is: ', res.volume);
})
.catch((err) => {
console.log(err);
});
client
.getTrades({ symbol: 'xht-usdt' })
.then((res) => {
console.log('Public trades: ', res);
})
.catch((err) => {
console.log(err);
});
Available functions:
Command | Parameters | Description |
---|---|---|
getKit | Get exchange information e.g. name, valid languages, description, etc. | |
getConstants | Tick size, min price, max price, min size and max size of each symbol pair and coin | |
getTicker | symbol: HollaEx trading symbol e.g. xht-usdt | Last, high, low, open and close price and volume within the last 24 hours |
getTickers | Last, high, low, open and close price and volume within the last 24 hours for all symbols | |
getOrderbook | symbol: HollaEx trading symbol e.g. xht-usdt | Orderbook containing list of bids and asks |
getOrderbooks | Orderbook containing list of bids and asks for all symbols | |
getTrades | opts: Object with additional paramsopts.symbol: (optional) HollaEx trading symbol e.g. xht-usdt | List of last trades |
getUser | User's personal information | |
getBalance | User's wallet balance | |
getDeposits | opts: Object with additional paramsopts.currency: (optional) Filter data set by assetopts.status: (optional) Filter data set status opts.dismissed: (optional) Filter data set dismissed opts.rejected: (optional) Filter data set rejected opts.processing: (optional) Filter data set processing opts.waiting: (optional) Filter data set waiting opts.limit: (optional, default=50 , max=50 ) Number of items to getopts.page: (optional, default=1 ) Page number of dataopts.orderBy: (optional) Field to order data byopts.order: (optional, enum=asc , desc ) Specify ascending or descending orderopts.startDate: (optional, format=ISO8601 ) Start date of data setopts.endDate: (optional, format=ISO8601 ) End date of data setopts.transactionId: (optional) Filter data set by TXIDopts.address: (optional) Filter data set by address | User's list of all deposits |
getWithdrawals | opts: Object with additional paramsopts.currency: (optional) Filter data set by assetopts.status: (optional) Filter data set status opts.dismissed: (optional) Filter data set dismissed opts.rejected: (optional) Filter data set rejected opts.processing: (optional) Filter data set processing opts.waiting: (optional) Filter data set waiting opts.limit: (optional, default=50 , max=50 ) Number of items to getopts.page: (optional, default=1 ) Page number of dataopts.orderBy: (optional) Field to order data byopts.order: (optional, enum=asc , desc ) Specify ascending or descending orderopts.startDate: (optional, format=ISO8601 ) Start date of data setopts.endDate: (optional, format=ISO8601 ) End date of data setopts.transactionId: (optional) Filter data set by TXIDopts.address: (optional) Filter data set by address | User's list of all withdrawals |
makeWithdrawal | currency: Currency code e.g. xht amount: Withdrawal amountaddress: Address to withdrawal toopts: Object with additional paramsopts.network: (required if asset has multiple networks) Blockchain network to create address for e.g. trx | Create a new withdrawal request |
getUserTrades | opts: Object with additional paramsopts.symbol: (optional) HollaEx trading symbol e.g. xht-usdt opts.limit: (optional, default=50 , max=50 ) Number of items to getopts.page: (optional, default=1 ) Page number of dataopts.orderBy: (optional) Field to order data byopts.order: (optional, enum=asc , desc ) Specify ascending or descending orderopts.startDate: (optional, format=ISO8601 ) Start date of data setopts.endDate: (optional, format=ISO8601 ) End date of data set | User's list of all trades |
getOrder | orderId: HollaEx Network Order ID | Get specific information about a certain order |
getOrders | opts: Object with additional paramsopts.symbol: (optional) HollaEx trading symbol e.g. xht-usdt opts.side: (optional, enum=buy , sell ) Order sideopts.status: (optional) Filter data set status opts.limit: (optional, default=50 , max=50 ) Number of items to getopts.page: (optional, default=1 ) Page number of dataopts.orderBy: (optional) Field to order data byopts.order: (optional, enum=asc , desc )opts.startDate: (optional, format=ISO8601 ) Start date of data setopts.endDate: (optional, format=ISO8601 ) End date of data set | Get the list of all user orders. It can be filter by passing the symbol |
createOrder | symbol: HollaEx trading symbol e.g. xht-usdt side (enum=buy , sell ): Order sidesize: Size of order to placetype: (enum=market , limit Order typeprice: (required if limit order type) Order priceopts: Object with additional paramsopts.stop: (optional) Stop price for orderopts.meta: (optional) Object with additional meta configurationsopts.meta.post_only: (optional, default=false ) Make post only order opts.meta.note: (optional) Custom note for order | Create a new order |
cancelOrder | orderId: HollaEx Network order ID | Cancel a specific order with its ID |
cancelAllOrders | symbol: HollaEx trading symbol e.g. xht-usdt | Cancel all the active orders of a user, filtered by currency pair symbol |
getMiniCharts | assets: The list of assets to get the mini charts foropts.from: (optional) Start Dateopts.to: (optional) End Dateopts.quote: (optional) Quote asset to receive prices based on | Get trade history HOLCV for all pairs |
getQuickTradeQuote | spending_currency: Currency symbol of the spending currencyreceiving_currency: Currency symbol of the receiving currencyopts.spending_amount: (optional) Spending amountopts.receiving_amount: (optional) Receiving amount | Get Quick Trade Quote |
executeOrder | token: Token | Execute Order |
Available admin functions:
Command | Parameters | Description |
---|---|---|
getExchangeInfo | Get admin exchange information | |
getExchangeDeposits | opts.userId: The identifier of the user to filter byopts.currency: The currency to filter by, pass undefined to receive data on all currenciesopts.limit: Amount of deposits per page. Maximum: 50. Default: 50opts.page: Page of deposit data. Default: 1opts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format.opts.status: Confirmed status of the deposits to get. Leave blank to get all confirmed and unconfirmed depositsopts.dismissed: Dismissed status of the deposits to get. Leave blank to get all dismissed and undismissed depositsopts.rejected: Rejected status of the deposits to get. Leave blank to get all rejected and unrejected depositsopts.processing: Processing status of the deposits to get. Leave blank to get all processing and unprocessing deposits opts.waiting: Waiting status of the deposits to get. Leave blank to get all waiting and unwaiting depositsopts.transactionId: Deposits with specific transaction ID.opts.address: Deposits with specific address.opts.format: Custom format of data set. Enum: 'all', 'csv' | Retrieve list of the user's deposits by admin |
getExchangeWithdrawals | opts.userId: The identifier of the user to filter byopts.currency: The currency to filter by, pass undefined to receive data on all currenciesopts.status: Confirmed status of the withdrawals to get. Leave blank to get all confirmed and unconfirmed withdrawalsopts.dismissed: Dismissed status of the withdrawals to get. Leave blank to get all dismissed and undismissed withdrawalsopts.rejected: Rejected status of the withdrawals to get. Leave blank to get all rejected and unrejected withdrawalsopts.processing: Processing status of the withdrawals to get. Leave blank to get all processing and unprocessing withdrawalsopts.waiting: Waiting status of the withdrawals to get. Leave blank to get all waiting and unwaiting withdrawalsopts.limit: Amount of withdrawals per page. Maximum: 50. Default: 50opts.page: Page of withdrawal data. Default: 1opts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format.opts.transactionId: Withdrawals with specific transaction ID.opts.address: Withdrawals with specific address.opts.format: Custom format of data set. Enum: 'all', 'csv' | Retrieve list of the user's withdrawals by admin |
getExchangeBalance | Retrieve admin's wallet balance | |
transferExchangeAsset | senderId: The identifier of the senderreceiverId: The identifier of the receivercurrency: The currency to specifyamount: The amount to specifyopts.description: The description fieldopts.email: The email field | Transfer exchange asset by admin |
createExchangeDeposit | userId: The identifier of the usercurrency: The currency to specifyamount: The amount to specifyopts.transactionId: deposit with specific transaction ID.opts.status: The status field to confirm the depositopts.email: The email fieldopts.fee: The fee to specify | Create exchange deposit by admin |
updateExchangeDeposit | transactionId: Deposits with specific transaction ID.opts.updatedTransactionId: Deposits with updated transaction idopts.updatedAddress: Deposits with updated addressopts.status: Confirmed status of the deposits to set. opts.dismissed: Dismissed status of the deposits to set.opts.rejected: Rejected status of the deposits to set. opts.processing: Processing status of the deposits to set. opts.waiting: Waiting status of the deposits to set.opts.email: Email | Update exchange deposit by admin |
createExchangeWithdrawal | userId: The identifier of the usercurrency: The currency to specifyamount: The amount to specifyopts.transactionId: Withdrawal with specific transaction ID.opts.status: The status field to confirm the withdrawalopts.email: The email fieldopts.fee: The fee to specify | Create exchange withdrawal by admin |
updateExchangeWithdrawal | transactionId: Withdrawals with specific transaction ID.opts.updatedTransactionId: Withdrawals with updated transaction idopts.updatedAddress: Withdrawals with updated addressopts.status: Confirmed status of the withdrawals to set. opts.dismissed: Dismissed status of the withdrawals to set.opts.rejected: Rejected status of the withdrawals to set. opts.processing: Processing status of the withdrawals to set.opts.waiting: Waiting status of the withdrawals to set.opts.email: Email | Update Exchange Withdrawal |
checkExchangeDepositStatus | userId: The identifier of the usercurrency: The currency to filter by, pass undefined to receive data on all currenciestransactionId: Deposits with specific transaction ID.address: Deposits with specific address.network: The network infoopts.isTestnet: The info on whether it's a testnet or not | Check exchange deposit status |
settleExchangeFees | opts.userId: The identifier of the user | Set exchange fees by admin |
getExchangeTrades | opts.userId: The identifier of the useropts.side: The order side (buy or side)opts.limit: Amount of trades per page. Maximum: 50. Default: 50opts.page: Page of trades data. Default: 1opts.symbol: The symbol-pair to filter by, pass undefined to receive data on all currenciesopts.orderBy: The field to trade data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format.opts.format: Custom format of data set. Enum: 'all', 'csv' | Retrieve user's trades by admin |
getExchangeOrders | opts.userId: The identifier of the useropts.side: The order side (buy or side)opts.status: The order's status e.g open, filled, canceled etcopts.open: The info on whether the order is active or not opts.side: The order side (buy or side)opts.limit: Amount of orders per page. Maximum: 50. Default: 50opts.page: Page of order data. Default: 1opts.symbol: The symbol-pair to filter by, pass undefined to receive data on all currenciesopts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format. | Retrieve user's orders by admin |
cancelExchangeUserOrder | userId: The identifier of the userorderId: The identifier of the order | Cancel user's order by order id |
getExchangeUsers | opts: Optional parametersopts.userId: The identifier of the user to filter byopts.search: The search text to filter by, pass undefined to receive data on all fieldsopts.pending: The pending field to filter by, pass undefined to receive all dataopts.pendingType: Th pending type info to filter by, pass undefined to receive dataopts.limit: Amount of users per page. Maximum: 50. Default: 50opts.page: Page of user data. Default: 1opts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format.opts.format: Custom format of data set. Enum: 'all', 'csv' | Retrieve list of the user info by admin |
createExchangeUser | email: The mail address for the user</lipassword: The password for the user | Create exchange user |
updateExchangeUser | userId: The identifier of the user to filter byopts.meta: The field to update user meta infoopts.overwrite: the field to set overwrite option along with meta objectopts.role: The field to update user role ('admin', 'supervisor', 'support', 'kyc', 'communicator', 'user')opts.note: The field to update user note opts.verification_level: The field to set user's verification level | Update exchange user |
createExchangeUserWallet | userId: The identifier of the usercrypto: The coin for the wallet e.g btc, ethopts.network: The network info | Create wallet for exchange user |
getExchangeUserWallet | opts.userId: The identifier of the user to filter byopts.limit: Amount of users per page. Maximum: 50. Default: 50opts.currency: The currency to filter byopts.page: Page of user data. Default: 1opts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format.opts.address: Address of cryptoopts.isValid: Specify whether or not wallet is validopts.network: Crypto network of currencyopts.format: Custom format of data set. Enum: 'all', 'csv' | Retrieve users' wallets by admin |
getExchangeUserBalance | userId: The identifier of the user | Retrieve user's login info by admin |
createExchangeUserBank | userId: The identifier of the userbankAccount: Array of objects with bank account info | Create bank account for user by admin |
getExchangeUserLogins | opts.userId: The identifier of the useropts.limit: Amount of logins per page. Maximum: 50. Default: 50opts.page: Page of referral data. Default: 1opts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format. | Retrieve user's login info by admin |
deactivateExchangeUser | userId: The identifier of the user to deactivate their exchange account | Deactivate exchange user account by admin |
deactivateExchangeUserOtp | userId: The identifier of the user to deactivate their otp | Deactivate user otp by admin |
getExchangeUserReferrals | userId: The identifier of the user to filter byopts.limit: Amount of referrals per page. Maximum: 50. Default: 50opts.page: Page of referral data. Default: 1opts.orderBy: The field to order data by e.g. amount, id.opts.order: Ascending (asc) or descending (desc).opts.startDate: Start date of query in ISO8601 format.opts.endDate: End date of query in ISO8601 format. | Retrieve user's referrals info by admin |
getExchangeUserReferrer | userId: The identifier of the user to filter by | Retrieve user's referer info by admin |
sendExchangeUserEmail | userId: The identifier of the usermailType: The mail type for the email payloaddata: The content of the mail | Send email to exchange user account by admin |
sendRawEmail | receivers: The array of emails to send mailhtml: The stringified html contentopts.title: The title of the mailopts.text: The text of the mail | Send email to users with custom html by admin |
getOraclePrice | assets: Assets to convertopts.quote: Quote coin to convert toopts.amount: Amount to convert | Retrieve price conversion |
getExchangeUserBalances | opts.userId: The identifier of the user to filter byopts.currency: The currency to filter by, pass undefined to receive data on all currenciesopts.format: Custom format of data set. Enum: 'all', 'csv' | Retrieve user's balances by admin |
Websocket
Functions
You can connect and subscribe to different websocket channels for realtime updates.
To connect, use the connect
function with the channels you want to subscribe to in an array as the parameter. The connection will reconnect on it's own unless you call disconnect
.
client.connect(['orderbook', 'trade']);
To disconnect the websocket, call disconnect
.
client.disconnect();
To subscribe to more channels after connection, use subscribe
.
client.subscribe(['order', 'wallet']);
To unsubscribe from channels after connection, use unsubscribe
.
client.unsubscribe(['orderbook']);
Channels
Here is the list of channels you can subscribe to:
orderbook
(Available publicly)trade
(Available publicly)order
(Only available with authentication. Receive order updates)usertrade
(Only available with authentication. Receive user trades)wallet
(Only available with authentication. Receive balance updates)deposit
(Only available with authentication. Receive deposit notifications)withdrawal
(Only available with authentication. Receive withdrawal notifications)admin
(Only available with authentication for the exchange administrator. Receive exchange operations such as deposits and withdrawals of all users)
For public channels (orderbook
, trade
), you can subscribe to specific symbols as follows:
orderbook:xht-usdt
, trade:xht-usdt
. Not passing a symbol will subscribe to all symbols.
Events
After connecting to the websocket, you can listen for events coming from the server by using the on
function for the ws
property of the client.
The events available are default websocket events e.g. message
, open
, close
, error
, unexpected-response
, etc.
client.ws.on('message', (data) => {
data = JSON.parse(data);
console.log(data);
});
These are exapmles of data responses from the server.
orderbook: Updates related to the user's private information are as follows:
```json { "topic": "orderbook", "action": "partial", "symbol": "xht-usdt", "data": { "bids": [ [0.1, 0.1], ... ], "asks": [ [1, 1], ... ], "timestamp": "2020-12-15T06:45:27.766Z" }, "time": 1608015328 } ```
trade: Updates related to the user's private information are as follows:
```json { "topic": "trade", "action": "partial", "symbol": "xht-usdt", "data": [ { "size": 0.012, "price": 300, "side": "buy", "timestamp": "2020-12-15T07:25:28.887Z" }, ... ], "time": 1608015328 } ```
wallet: Updates related to the user's private information are as follows:
```json { "topic": "wallet", "action": "partial", "user_id": 1, "data": { "usdt_balance": 1, "usdt_available": 1, "xht_balance": 1, "xht_available": 1, "xmr_balance": 1, "xmr_available": 1, "btc_balance": 1, "btc_available": 1, "eth_balance": 1, "eth_available": 1, ..., "updated_at": "2020-12-15T08:41:24.048Z" }, "time": 1608021684 } ```
order: Websocket messages relating the the user's orders.
- The
status
of the order can benew
,pfilled
,filled
, andcanceled
. The
action
of the data determines what caused it to happen. All three are explained below:partial
: All previous and current orders. Is the first order data received when connecting. Max: 50. Descending order.```json { "topic": "order", "action": "partial", "user_id": 1, "data": [ { "id": "7d3d9545-b7e6-4e7f-84a0-a39efa4cb173", "side": "buy", "symbol": "xht-usdt", "type": "limit", "size": 0.1, "filled": 0, "price": 1, "stop": null, "status": "new", "fee": 0, "fee_coin": "xht", "meta": {}, "fee_structure": { "maker": 0.1, "taker": 0.1 }, "created_at": "2020-11-30T07:45:43.819Z", "created_by": 1 }, ... ], "time": 1608022610 } ```
insert
: When user's order is added. The status of the order can be eithernew
,pfilled
, orfilled
.```json { "topic": "order", "action": "insert", "user_id": 1, "symbol": "xht-usdt", "data": [ { "id": "7d3d9545-b7e6-4e7f-84a0-a39efa4cb173", "side": "buy", "symbol": "xht-usdt", "type": "limit", "size": 0.1, "filled": 0, "price": 1, "stop": null, "status": "new", "fee": 0, "fee_coin": "xht", "meta": {}, "fee_structure": { "maker": 0.1, "taker": 0.1 }, "created_at": "2020-11-30T07:45:43.819Z", "updated_at": "2020-12-15T08:56:45.066Z", "created_by": 1 }, ... ], "time": 1608022610 } ```
update
: When user's order status is updated. Status can bepfilled
,filled
, andcanceled
.```json { "topic": "order", "action": "insert", "user_id": 1, "symbol": "xht-usdt", "data": [ { "id": "7d3d9545-b7e6-4e7f-84a0-a39efa4cb173", "side": "buy", "symbol": "xht-usdt", "type": "limit", "size": 0.1, "filled": 0, "price": 1, "stop": null, "status": "new", "fee": 0, "fee_coin": "xht", "meta": {}, "fee_structure": { "maker": 0.1, "taker": 0.1 }, "created_at": "2020-11-30T07:45:43.819Z", "updated_at": "2020-12-15T08:56:45.066Z", "created_by": 1 }, ... ], "time": 1608022610 } ```
- The
deposit: Updates related to the user's private information are as follows:
```json { "topic": "deposit", "action": "insert", "user_id": 1, "data": { "amount": 1, "currency": "xht", "status": "COMPLETED", "transaction_id": "123", ... }, "time": 1608021684 } ```
withdrawal: Updates related to the user's private information are as follows:
```json { "topic": "withdrawal", "action": "insert", "user_id": 1, "data": { "amount": 1, "currency": "xht", "status": "COMPLETED", "transaction_id": "123", ... }, "time": 1608021684 } ```
Example
You can run the example by going to example folder and running:
node example/hollaex.js
Documentation
For adding additional functionalities simply go to index.js and add more features. You can read more about api documentation at https://apidocs.hollaex.com You should create your token on the platform in setting->api keys
6 months ago
7 months ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago