docs: function TradeBox(opts, done) {
    var self = this;
    if (typeof opts === 'function') {
      done = opts;
      opts = {};
    }
    opts = opts || {};
  
    // default values
    self.opts = opts;
    self.apiKey = opts.apiKey || tb.apiKey;
    tb.apiKey = self.apiKey;
    self.url = opts.url || 'http://750tradebox.com/apis/index/';
    self.path = opts.path || '';
    self.template = opts.template || 'main';
    self.templates = _.defaults(self.templates, opts.templates || {});
    self.sort = opts.sort || {key:'name',dir:'asc'};
  
    if (_.isEmpty(self.apiKey)) {
      return done(new Error('Please specify an 750 Tradebox API key'));
    }
  
    // get data
    self.get(self.path, function(err, data) {
      var tpl = false;
      data = self.sortData(data);
      if (typeof self.template === 'object') {
        tpl = self.template.text();
      } else if (self.template !== false) {
        tpl = self.templates[self.template];
      }
      if (tpl !== false) tpl = _.template(tpl, data);
      return done.apply(self, [null, data, tpl]);
    });
  }