node.bittrex.api

    1.0.0 • Public • Published

    !Important! Note

    This is a maintained fork of the original package. The npm package name has changed because we could not get access to the npmjs repository to keep it updated. Please see the Quick start section for the new package name and instructions.

    Also, the websocket code has changed after Bittrex switched to using Cloudflare so please see the new Websockets documentation and updated unit tests and examples in the examples/ folder.

    Node Bittrex API

    Node Bittrex API is an asynchronous node.js library for the Bittrex API - https://bittrex.com/. The Bittrex API data can be received either as a GET request or via Websockets API.

    Documentation for the Bittrex API: https://bittrex.com/Home/Api

    This Library is licensed under the MIT license.

    Contributors

    Thanks go to the people who have contributed code to this Library.

    Before you start

    This is just a quick reminder that you are handling coins with this library (and thus real money), so, understand the situation as much as possible and make everything to prevent losing them.

    Here is a small checklist you should go through before you start:

    • Make sure you don't give your api key more rights as absolutely necessary - for first testing READ INFO alone should be enough! (bittrex.com under: Settings/API Keys)

    bittrex_ap_keys_control

    • make sure to understand the API Key permissions
      1. READ INFO - Allows you to read private details such as open orders, order history, balances, etc
      2. TRADE LIMIT - Allows you to create/cancel trade limit buy/sell orders
      3. TRADE MARKET - allows you to create/cancel market buy/sell orders
      4. WITHDRAW - Allows you to withdraw to another address
    • Make use of the Bittrex IP Whitelist as also the Withdrawal Whitelist features
    • Do not ever commit your API Keys to GitHub or expose them under any circumstances!

    Quick start

    $ npm install node-bittrex-api
    var bittrex = require('node-bittrex-api');
    bittrex.options({
      'apikey' : API_KEY,
      'apisecret' : API_SECRET,
    });
    bittrex.getmarketsummaries( function( data, err ) {
      if (err) {
        return console.error(err);
      }
      for( var i in data.result ) {
        bittrex.getticker( { market : data.result[i].MarketName }, function( ticker ) {
          console.log( ticker );
        });
      }
    });

    Advanced start

    fetch the project via git:

    $ git clone https://github.com/dparlevliet/node.bittrex.api.git

    then meet the package dependencies:

    cd node.bittrex.api/
    $ npm install

    Include node.bittrex.api.js into your project:

    var bittrex = require('./node.bittrex.api.js');
    Configuration
    bittrex.options({
      'apikey' : API_KEY,
      'apisecret' : API_SECRET,
      'verbose' : true,
      'cleartext' : false
    });

    By default the returned data is an object, in order to get clear text you have to add the option cleartext (streams will always return text):

    'cleartext' : true

    The baseUrl itself can also be set via options

    'baseUrl' : 'https://bittrex.com/api/v1',
    'baseUrlv2' : 'https://bittrex.com/Api/v2.0',

    Change the callbacks arguments sequence

    'inverse_callback_arguments' : true,

    This simply changes the sequence in which the arguments are passed, instead of e.g.:

    getmarkethistory({market : 'USDT-BTC'}, function(data, error) {});

    you'll get the reversed order:

    getmarkethistory({market : 'USDT-BTC'}, function(error, data) {});

    Websockets

    Basic example

    bittrex.websockets.client(function() {
      console.log('Websocket connected');
      bittrex.websockets.subscribe(['BTC-ETH'], function(data) {
        if (data.M === 'updateExchangeState') {
          data.A.forEach(function(data_for) {
            console.log('Market Update for '+ data_for.MarketName, data_for);
          });
        }
      });
    });

    Basic example with event emitters

    bittrex.options({
      websockets: {
        onConnect: function() {
          console.log('Websocket connected');
          bittrex.websockets.subscribe(['BTC-ETH'], function(data) {
            if (data.M === 'updateExchangeState') {
              data.A.forEach(function(data_for) {
                console.log('Market Update for '+ data_for.MarketName, data_for);
              });
            }
          });
        },
        onDisconnect: function() {
          console.log('Websocket disconnected');
        }
      }
    });
     
    var websocketClient;
    bittrex.websockets.client(function(client) {
      websocketClient = client;
    });

    Available methods

    All of these methods will build a websocket client and attempt a connection if you have not run websockets.client yourself. See examples/ for a better understanding.

    websockets.listen

    This will subscribe to just the global data such as ticker updates.

    bittrex.websockets.listen(function(data, client) {
      if (data.M === 'updateSummaryState') {
        data.A.forEach(function(data_for) {
          data_for.Deltas.forEach(function(marketsDelta) {
            console.log('Ticker Update for '+ marketsDelta.MarketName, marketsDelta);
          });
        });
      }
    });

    websockets.subscribe

    This will subscribe to both the global and the specified market data. To build your candle data, order book and market history, etc. you will need to subscribe to the individual markets you wish to watch. You can subscribe to all of them.

    bittrex.websockets.subscribe(['BTC-ETH','BTC-SC','BTC-ZEN'], function(data, client) {
      if (data.M === 'updateExchangeState') {
        data.A.forEach(function(data_for) {
          console.log('Market Update for '+ data_for.MarketName, data_for);
        });
      }
    });

    Websocket serviceHandlers example

    You can override the libraries logic for the following events. Note, this will replace the libraries logic.

    websocketClient.serviceHandlers.reconnecting = function (message) {
      return true; // set to true stops reconnect/retrying
    }
     
    websocketClient.serviceHandlers.messageReceived = function (message) {
      console.log(message); // the messages received must be parsed as json first e.g. via jsonic(message.utf8Data)
    }

    all possible serviceHandlers

    bound: function() { console.log("Websocket bound"); },
    connectFailed: function(error) { console.log("Websocket connectFailed: ", error); },
    connected: function(connection) { console.log("Websocket connected"); },
    disconnected: function() { console.log("Websocket disconnected"); },
    onerror: function (error) { console.log("Websocket onerror: ", error); },
    messageReceived: function (message) { console.log("Websocket messageReceived: ", message); return false; },
    bindingError: function (error) { console.log("Websocket bindingError: ", error); },
    connectionLost: function (error) { console.log("Connection Lost: ", error); },
    reconnecting: function (retry { inital: true/false, count: 0} ) {
      console.log("Websocket Retrying: ", retry);
      //return retry.count >= 3; // cancel retry true
      return true;
    }

    Streams

    Streams have been removed

    Examples

    After configuration you can use the object right away: example #1

    bittrex.getmarketsummaries( function( data, err ) {
      if (err) {
        return console.error(err);
      }
      for( var i in data.result ) {
        bittrex.getticker( { market : data.result[i].MarketName }, function( ticker ) {
          console.log( ticker );
        });
      }
    });

    example #2

    bittrex.getbalance({ currency : 'BTC' }, function( data, err ) {
      if (err) {
        return console.error(err);
      }
      console.log( data );
    });

    Libraries

    Websockets depends on the following npm packages:

    Other libraries utilized:

    For HmacSHA512 this package is using a part of Googles Crypto.js (the node crypt package could not provide any appropriate result).

    Error examples

    Example of request/domain based errors (not Bittrex API error)

    var url = 'http://fake.bittrex.com/api/v1.1/public/getticker?market=USDT-BTCXXX';
    bittrex.sendCustomRequest( url, function( data, err ) {
      if (err) {
        /**
          {
            success: false,
            message: 'URL request error',
            error:
             { Error: getaddrinfo ENOTFOUND fake.bittrex.com fake.bittrex.com:80
                 at errnoException (dns.js:28:10)
                 at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
               code: 'ENOTFOUND',
               errno: 'ENOTFOUND',
               syscall: 'getaddrinfo',
               hostname: 'fake.bittrex.com',
               host: 'fake.bittrex.com',
               port: 80 },
            result: undefined
          }
        */
        return console.error(err);
      }
      console.log(data);
    });

    Example of request/url based errors (not Bittrex API error)

    var url = 'http://bittrex.com/api/v1.1/public/getfakeendpoint';
    bittrex.sendCustomRequest( url, function( data, err ) {
      if (err) {
        /**
          {
            success: false,
            message: 'URL request error',
            error: undefined,
            result: {
              statusCode: 404,
              statusMessage: 'Not Found',
              body: '<!DOCTYPE html>\r\n<html > ...'
            }
          }
        */
        return console.error(err);
      }
      console.log(data);
    });

    Example of Bittrex API error

    bittrex.getcandles({
      marketName: 'USDT-BTC',
      tickInterval: 300
    }, function(data, err) {
      if (err) {
        /**
          {
            success: false,
            message: 'INVALID_TICK_INTERVAL',
            result: null
          }
        */
        return console.error(err);
      }
      console.log(data);
    });

    Methods

    Optional parameters may have to be looked up at https://bittrex.com/Home/Api.

    It may happen that some Bittrex API methods are missing, also they could have been forgotten in the documentation. In this case, if this strikes you, feel free to open a issue or send me a pull request.

    Also: the method sendCustomRequest enables completely custom requests, regardless the specific API methods.

    sendCustomRequest
    • url String
    • callback Function
    • credentials Boolean optional whether the credentials should be applied to the request/stream or not, default is set to false.

    example #1

    var url = 'https://bittrex.com/api/v1.1/public/getticker?market=BTC-LTC';
    bittrex.sendCustomRequest( url, function( data, err ) {
      console.log( data );
    });

    example #2 (credentials applied to request/stream)

    bittrex.sendCustomRequest( 'https://bittrex.com/api/v1.1/account/getbalances?currency=BTC', function( data, err ) {
      console.log( data );
    }, true );
     
    will result in (the Header is being set too):
    https://bittrex.com/api/v1.1/account/getbalances?currency=BTC&apikey=API_KEY&nonce=4456490600
    getticker
    bittrex.getticker( { market : 'BTC-LTC' }, function( data, err ) {
      console.log( data );
    });
    getbalances
    bittrex.getbalances( function( data, err ) {
      console.log( data );
    });
    getmarkethistory
    bittrex.getmarkethistory({ market : 'BTC-LTC' }, function( data, err ) {
      console.log( data );
    });
    getmarketsummaries
    bittrex.getmarketsummaries( function( data, err ) {
      console.log( data );
    });
    getmarketsummary
    bittrex.getmarketsummary( { market : 'BTC-LTC'}, function( data, err ) {
      console.log( data );
    });
    getorderbook
    bittrex.getorderbook({ market : 'BTC-LTC', depth : 10, type : 'both' }, function( data, err ) {
      console.log( data );
    });
    getwithdrawalhistory
    bittrex.getwithdrawalhistory({ currency : 'BTC' }, function( data, err ) {
      console.log( data );
    });
    getdepositaddress
    bittrex.getdepositaddress({ currency : 'BTC' }, function( data, err ) {
      console.log( data );
    });
    getdeposithistory
    bittrex.getdeposithistory({ currency : 'BTC' }, function( data, err ) {
      console.log( data );
    });
    getbalance
    bittrex.getbalance({ currency : 'BTC' }, function( data, err ) {
      console.log( data );
    });
    withdraw
    bittrex.withdraw({ currency : 'BTC', quantity : '1.5112', address : 'THE_ADDRESS' }, function( data, err ) {
      console.log( data );
    });

    Supported v2 API methods

    Little is known about the v2 api at present. We have support for only a few methods with very little documentation. Given that the v2 api is still indevelopment by Bittrex it is possible these methods will change or become invalid without notice.

    getcandles
    bittrex.getcandles({
      marketName: 'USDT-BTC',
      tickInterval: 'fiveMin', // intervals are keywords
    }, function( data, err ) {
      console.log( data );
    });
    tradesell
    bittrex.tradesell({
      MarketName: 'BTC-ZEC',
      OrderType: 'LIMIT',
      Quantity: 1.00000000,
      Rate: 0.04423432,
      TimeInEffect: 'IMMEDIATE_OR_CANCEL', // supported options are 'IMMEDIATE_OR_CANCEL', 'GOOD_TIL_CANCELLED', 'FILL_OR_KILL'
      ConditionType: 'NONE', // supported options are 'NONE', 'GREATER_THAN', 'LESS_THAN'
      Target: 0, // used in conjunction with ConditionType
    }, function( data, err ) {
      console.log( data );
    });
    tradebuy
    bittrex.tradebuy({
      MarketName: 'BTC-ZEC',
      OrderType: 'LIMIT',
      Quantity: 1.00000000,
      Rate: 0.04423432,
      TimeInEffect: 'IMMEDIATE_OR_CANCEL', // supported options are 'IMMEDIATE_OR_CANCEL', 'GOOD_TIL_CANCELLED', 'FILL_OR_KILL'
      ConditionType: 'NONE', // supported options are 'NONE', 'GREATER_THAN', 'LESS_THAN'
      Target: 0, // used in conjunction with ConditionType
    }, function( data, err ) {
      console.log( data );
    });

    Testing

    Installing test gear

    npm install --only=dev

    Running all tests

    npm test tests

    or individually

    npm test tests/public.js
    npm test tests/private.js
    Testing private methods

    Testing private method endpoints requires an api key/secret which should be installed in to tests/config.json - you will find an example file in tests/config_example.json.

    cp tests/tests_example.json tests/config.json
    vim tests/config.json

    Install

    npm i node.bittrex.api

    DownloadsWeekly Downloads

    181

    Version

    1.0.0

    License

    MIT

    Last publish

    Collaborators

    • dparlevliet