{"action":"created","comment":{"url":"https://api.github.com/repos/ccxt/ccxt/pulls/comments/186665085","pull_request_review_id":118285894,"id":186665085,"diff_hunk":"@@ -0,0 +1,408 @@\n+'use strict';\n+\n+//  ---------------------------------------------------------------------------\n+\n+const Exchange = require ('./base/Exchange');\n+const { ExchangeError } = require ('./base/errors');\n+\n+//  ---------------------------------------------------------------------------\n+\n+module.exports = class kkex extends Exchange {\n+    describe () {\n+        return this.deepExtend (super.describe (), {\n+            'id': 'kkex',\n+            'name': 'Kkex',\n+            'countries': [ 'CN', 'US', 'JA' ],\n+            'version': 'v1',\n+            'has': {\n+                'CORS': false,\n+                'publicAPI': false,\n+                'fetchBalance': false,\n+                'fetchCurrencies': false,\n+                'fetchDepositAddress': false,\n+                'fetchFundingFees': false,\n+                'fetchTickers': true,\n+                'fetchOpenOrders': true,\n+                'fetchClosedOrders': true,\n+                'fetchMyTrades': true,\n+                'fetchOHLCV': true,\n+                'createMarketOrder': true,\n+                'withdraw': false,\n+            },\n+            'timeframes': {\n+                '1m': '1min',\n+                '5m': '5min',\n+                '15m': '15min',\n+                '30m': '30min',\n+                '1h': '1hour',\n+                '8h': '12hour',\n+                '1d': 'day',\n+                '1w': '1week',\n+            },\n+            'urls': {\n+                'logo': 'https://user-images.githubusercontent.com/12462602/39745941-70adc518-52db-11e8-8e21-94778cb3c7ca.jpg',\n+                'api': {\n+                    'public': 'http://kkex.vip/api/v1',\n+                    'private': 'http://kkex.vip/api/v2',\n+                },\n+                'www': 'http://kkex.vip',\n+                'doc': [\n+                    'http://kkex.vip/api_wiki/cn/',\n+                ],\n+                'fees': 'https://intercom.help/kkex/fee',\n+            },\n+            'api': {\n+                'public': {\n+                    'get': [\n+                        'products',\n+                        'assets',\n+                        'tickers',\n+                        'ticker',\n+                        'depth',\n+                        'trades',\n+                        'kline',\n+                        'exchange_rate',\n+                    ],\n+                    'post': [\n+                        'process_strategy',\n+                    ],\n+                },\n+                'private': {\n+                    'get': [],\n+                    'post': [\n+                        'profile',\n+                        'userinfo',\n+                        'trade',\n+                        'batch_trade',\n+                        'cancel_order',\n+                        'cancel_all_orders',\n+                        'order_info',\n+                        'orders_info',\n+                        'order_history',\n+                    ],\n+                },\n+            },\n+            'fees': {\n+                'trading': {\n+                    'tierBased': false,\n+                    'percentage': true,\n+                    'taker': 0.002,\n+                    'maker': 0.002,\n+                },\n+                'funding': {\n+                    'tierBased': false,\n+                    'percentage': false,\n+                    'withdraw': {},\n+                    'deposit': {},\n+                },\n+            },\n+            'options': {\n+                'lastNonceTimestamp': 0,\n+            },\n+            'exceptions': {\n+            },\n+            'commonCurrencies': {\n+            },\n+        });\n+    }\n+\n+    async fetchMarkets (params = {}) {\n+        let tickers = await this.publicGetTickers (params);\n+        tickers = tickers['tickers'];\n+        let products = await this.publicGetProducts (params);\n+        products = products['products'];\n+        let markets = tickers.map (el => Object.keys (el)[0]);\n+        let result = [];\n+        for (let i = 0; i < markets.length; i++) {\n+            let id = markets[i];\n+            let market = markets[i];\n+            let baseId = '';\n+            let quoteId = '';\n+            for (let j = 0; j < products.length; j++) {\n+                let p = products[j];\n+                if (p['mark_asset'] + p['base_asset'] === market) {\n+                    quoteId = p['base_asset'];\n+                    baseId = p['mark_asset'];\n+                }\n+            }\n+            let base = baseId.toUpperCase ();\n+            let quote = quoteId.toUpperCase ();\n+            base = this.commonCurrencyCode (base);\n+            quote = this.commonCurrencyCode (quote);\n+            let symbol = base + '/' + quote;\n+            result.push ({\n+                'id': id,\n+                'symbol': symbol,\n+                'base': base,\n+                'quote': quote,\n+                'baseId': baseId,\n+                'quoteId': quoteId,\n+                'active': true,\n+                'info': market,\n+            });\n+        }\n+        return result;\n+    }\n+\n+    parseTicker (ticker, market = undefined) {\n+        let timestamp = ticker['date'] * 1000;\n+        let symbol = market['symbol'];\n+        let last = this.safeFloat (ticker, 'last');\n+        ticker = ticker['ticker'];\n+        return {\n+            'symbol': symbol,\n+            'timestamp': timestamp,\n+            'datetime': this.iso8601 (timestamp),\n+            'high': this.safeFloat (ticker, 'high'),\n+            'low': this.safeFloat (ticker, 'low'),\n+            'bid': this.safeFloat (ticker, 'buy'),\n+            'bidVolume': undefined,\n+            'ask': this.safeFloat (ticker, 'sell'),\n+            'askVolume': undefined,\n+            'vwap': undefined,\n+            'open': undefined,\n+            'close': last,\n+            'last': last,\n+            'previousClose': undefined,\n+            'change': undefined,\n+            'percentage': undefined,\n+            'average': undefined,\n+            'baseVolume': this.safeFloat (ticker, 'vol'),\n+            'quoteVolume': undefined,\n+            'info': ticker,\n+        };\n+    }\n+\n+    async fetchTicker (symbol, params = {}) {\n+        await this.loadMarkets ();\n+        let market = this.markets[symbol];\n+        let response = await this.publicGetTicker (this.extend ({\n+            'symbol': market['id'],\n+        }, params));\n+        let t = {\n+            'ticker': response['ticker'],\n+            'symbol': symbol,\n+            'date': response['date'],\n+        };\n+        return this.parseTicker (t, market);\n+    }\n+\n+    async fetchTickers (symbols = undefined, params = {}) {\n+        await this.loadMarkets ();\n+        let response = await this.publicGetTickers (params);\n+        let tickers = response['tickers'];\n+        let date = response['date'];\n+        let ids = tickers.map (el => Object.keys (el)[0]);\n+        let result = {};\n+        for (let i = 0; i < ids.length; i++) {\n+            let id = ids[i];\n+            let market = this.markets_by_id[id];\n+            let symbol = market['symbol'];\n+            let ticker = tickers[i][id];\n+            let t = {\n+                'ticker': ticker,\n+                'symbol': symbol,\n+                'date': date,\n+            };\n+            result[symbol] = this.parseTicker (t, market);\n+        }\n+        return result;\n+    }\n+\n+    async fetchOrderBook (symbol, limit = undefined, params = {}) {\n+        await this.loadMarkets ();\n+        let response = await this.publicGetDepth (this.extend ({\n+            'symbol': this.marketId (symbol),\n+        }, params));\n+        let orderbook = response['data'];\n+        let timestamp = orderbook['date'] * 1000;\n+        return this.parseOrderBook (orderbook, timestamp);\n+    }\n+\n+    parseTrade (trade, market = undefined) {\n+        let timestamp = parseInt (trade['date']) * 1000;\n+        let datetime = this.iso8601 (timestamp);\n+        let price = this.safeFloat (trade, 'price');\n+        let amount = this.safeFloat (trade, 'amount');\n+        let symbol = market['symbol'];\n+        return {\n+            'timestamp': timestamp,\n+            'datetime': datetime,\n+            'symbol': symbol,\n+            'id': market['id'],\n+            'order': undefined,\n+            'type': 'limit',\n+            'side': trade['type'],\n+            'price': price,\n+            'amount': amount,\n+            'fee': undefined,\n+            'info': trade,\n+        };\n+    }\n+\n+    async fetchTrades (symbol, since = undefined, limit = undefined, params = {}) {\n+        await this.loadMarkets ();\n+        let market = this.market (symbol);\n+        let response = await this.publicGetTrades (this.extend ({\n+            'symbol': market['id'],\n+        }, params));\n+        return this.parseTrades (response, market, since, limit);\n+    }\n+\n+    async fetchOHLCV (symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {\n+        await this.loadMarkets ();\n+        let market = this.market (symbol);\n+        let response = await this.publicGetKline (this.extend ({\n+            'symbol': market['id'],\n+            'type': this.timeframes[timeframe],\n+            'since': since,\n+        }, params));\n+        return this.parseOHLCVs (response, market, timeframe, since, limit);\n+    }\n+\n+    parseOrder (order, market = undefined) {\n+        let symbol = undefined;\n+        if (typeof market !== 'undefined')\n+            symbol = market['symbol'];\n+        let side = this.safeString (order, 'side');\n+        if (typeof side === 'undefined') {\n+            side = this.safeString (order, 'type');\n+        }\n+        let timestamp = undefined;\n+        let iso8601 = undefined;\n+        if ('datetime' in order) {\n+            timestamp = this.parse8601 (order['datetime']);\n+            iso8601 = this.iso8601 (timestamp);\n+        }\n+        return {\n+            'id': order['order_id'] || order['id'],\n+            'datetime': iso8601,\n+            'timestamp': timestamp,\n+            'lastTradeTimestamp': undefined,\n+            'status': 'open',\n+            'symbol': symbol,\n+            'type': 'limit',\n+            'side': side,\n+            'price': order['price'],\n+            'cost': undefined,\n+            'amount': order['number'],\n+            'filled': undefined,\n+            'remaining': undefined,\n+            'trades': undefined,\n+            'fee': undefined,\n+            'info': order,\n+        };\n+    }\n+\n+    async createOrder (symbol, type, side, amount, price = undefined, params = {}) {\n+        await this.loadMarkets ();\n+        let market = this.market (symbol);\n+        let sides = ['buy', 'sell', 'buy_market', 'sell_market'];\n+        let request = { 'symbol': market['id'] };\n+        if (type === 'market') {\n+            if (side === 'sell') {\n+                request['amount'] = amount;\n+            } else if (side === 'buy') {\n+                request['price'] = amount;\n+            }\n+            side += '_market';\n+        } else {\n+            request['amount'] = amount;\n+            request['price'] = price;\n+        }\n+        request['type'] = side;\n+        if (sides.indexOf (side) === -1) {\n+            throw new ExchangeError ('side not in', sides);\n+        }\n+        let response = await this.privatePostTrade (this.extend (request, params));\n+        if (response['result'] === false) {\n+            throw new ExchangeError (JSON.stringify (response));\n+        }\n+        let id = response['order_id'];\n+        let order = this.parseOrder ({\n+            'id': id,\n+            'price': price,\n+            'number': amount,\n+            'side': side,\n+        }, market);\n+        this.orders[id] = order;\n+        return order;\n+    }\n+\n+    async cancelOrder (id, symbol = undefined, params = {}) {\n+        await this.loadMarkets ();\n+        let response = await this.privatePostCancelOrder (this.extend ({\n+            'order_id': id,\n+            'symbol': symbol.replace ('/', ''),\n+        }, params));\n+        return response;\n+    }\n+\n+    async fetchOpenOrders (symbol = undefined, since = undefined, limit = undefined, params = {}) {\n+        return await this.fetchOrders (0, symbol, since, limit, params);\n+    }\n+\n+    async fetchOrders (status = undefined, symbol = undefined, since = undefined, limit = undefined, params = {}) {","path":"js/kkex.js","position":345,"original_position":345,"commit_id":"23bff23ec7cb7da2159f906295f9abe93b97eaa6","original_commit_id":"23bff23ec7cb7da2159f906295f9abe93b97eaa6","user":{"login":"ericjjj","id":12462602,"avatar_url":"https://avatars1.githubusercontent.com/u/12462602?v=4","gravatar_id":"","url":"https://api.github.com/users/ericjjj","html_url":"https://github.com/ericjjj","followers_url":"https://api.github.com/users/ericjjj/followers","following_url":"https://api.github.com/users/ericjjj/following{/other_user}","gists_url":"https://api.github.com/users/ericjjj/gists{/gist_id}","starred_url":"https://api.github.com/users/ericjjj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericjjj/subscriptions","organizations_url":"https://api.github.com/users/ericjjj/orgs","repos_url":"https://api.github.com/users/ericjjj/repos","events_url":"https://api.github.com/users/ericjjj/events{/privacy}","received_events_url":"https://api.github.com/users/ericjjj/received_events","type":"User","site_admin":false},"body":"should i fix it ?","created_at":"2018-05-08T09:18:50Z","updated_at":"2018-05-08T09:18:50Z","html_url":"https://github.com/ccxt/ccxt/pull/2792#discussion_r186665085","pull_request_url":"https://api.github.com/repos/ccxt/ccxt/pulls/2792","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/ccxt/ccxt/pulls/comments/186665085"},"html":{"href":"https://github.com/ccxt/ccxt/pull/2792#discussion_r186665085"},"pull_request":{"href":"https://api.github.com/repos/ccxt/ccxt/pulls/2792"}},"in_reply_to_id":186659738},"pull_request":{"url":"https://api.github.com/repos/ccxt/ccxt/pulls/2792","id":186566065,"html_url":"https://github.com/ccxt/ccxt/pull/2792","diff_url":"https://github.com/ccxt/ccxt/pull/2792.diff","patch_url":"https://github.com/ccxt/ccxt/pull/2792.patch","issue_url":"https://api.github.com/repos/ccxt/ccxt/issues/2792","number":2792,"state":"open","locked":false,"title":"new exchange: kkex","user":{"login":"ericjjj","id":12462602,"avatar_url":"https://avatars1.githubusercontent.com/u/12462602?v=4","gravatar_id":"","url":"https://api.github.com/users/ericjjj","html_url":"https://github.com/ericjjj","followers_url":"https://api.github.com/users/ericjjj/followers","following_url":"https://api.github.com/users/ericjjj/following{/other_user}","gists_url":"https://api.github.com/users/ericjjj/gists{/gist_id}","starred_url":"https://api.github.com/users/ericjjj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericjjj/subscriptions","organizations_url":"https://api.github.com/users/ericjjj/orgs","repos_url":"https://api.github.com/users/ericjjj/repos","events_url":"https://api.github.com/users/ericjjj/events{/privacy}","received_events_url":"https://api.github.com/users/ericjjj/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-05-08T08:48:42Z","updated_at":"2018-05-08T09:18:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9df3635e700854506fb8208c86a34ca028f38a7d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/ccxt/ccxt/pulls/2792/commits","review_comments_url":"https://api.github.com/repos/ccxt/ccxt/pulls/2792/comments","review_comment_url":"https://api.github.com/repos/ccxt/ccxt/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ccxt/ccxt/issues/2792/comments","statuses_url":"https://api.github.com/repos/ccxt/ccxt/statuses/23bff23ec7cb7da2159f906295f9abe93b97eaa6","head":{"label":"ericjjj:kkex-js","ref":"kkex-js","sha":"23bff23ec7cb7da2159f906295f9abe93b97eaa6","user":{"login":"ericjjj","id":12462602,"avatar_url":"https://avatars1.githubusercontent.com/u/12462602?v=4","gravatar_id":"","url":"https://api.github.com/users/ericjjj","html_url":"https://github.com/ericjjj","followers_url":"https://api.github.com/users/ericjjj/followers","following_url":"https://api.github.com/users/ericjjj/following{/other_user}","gists_url":"https://api.github.com/users/ericjjj/gists{/gist_id}","starred_url":"https://api.github.com/users/ericjjj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericjjj/subscriptions","organizations_url":"https://api.github.com/users/ericjjj/orgs","repos_url":"https://api.github.com/users/ericjjj/repos","events_url":"https://api.github.com/users/ericjjj/events{/privacy}","received_events_url":"https://api.github.com/users/ericjjj/received_events","type":"User","site_admin":false},"repo":{"id":132395895,"name":"ccxt","full_name":"ericjjj/ccxt","owner":{"login":"ericjjj","id":12462602,"avatar_url":"https://avatars1.githubusercontent.com/u/12462602?v=4","gravatar_id":"","url":"https://api.github.com/users/ericjjj","html_url":"https://github.com/ericjjj","followers_url":"https://api.github.com/users/ericjjj/followers","following_url":"https://api.github.com/users/ericjjj/following{/other_user}","gists_url":"https://api.github.com/users/ericjjj/gists{/gist_id}","starred_url":"https://api.github.com/users/ericjjj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ericjjj/subscriptions","organizations_url":"https://api.github.com/users/ericjjj/orgs","repos_url":"https://api.github.com/users/ericjjj/repos","events_url":"https://api.github.com/users/ericjjj/events{/privacy}","received_events_url":"https://api.github.com/users/ericjjj/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ericjjj/ccxt","description":"A JavaScript / Python / PHP cryptocurrency trading library with support for more than 100 bitcoin/altcoin exchanges","fork":true,"url":"https://api.github.com/repos/ericjjj/ccxt","forks_url":"https://api.github.com/repos/ericjjj/ccxt/forks","keys_url":"https://api.github.com/repos/ericjjj/ccxt/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ericjjj/ccxt/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ericjjj/ccxt/teams","hooks_url":"https://api.github.com/repos/ericjjj/ccxt/hooks","issue_events_url":"https://api.github.com/repos/ericjjj/ccxt/issues/events{/number}","events_url":"https://api.github.com/repos/ericjjj/ccxt/events","assignees_url":"https://api.github.com/repos/ericjjj/ccxt/assignees{/user}","branches_url":"https://api.github.com/repos/ericjjj/ccxt/branches{/branch}","tags_url":"https://api.github.com/repos/ericjjj/ccxt/tags","blobs_url":"https://api.github.com/repos/ericjjj/ccxt/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ericjjj/ccxt/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ericjjj/ccxt/git/refs{/sha}","trees_url":"https://api.github.com/repos/ericjjj/ccxt/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ericjjj/ccxt/statuses/{sha}","languages_url":"https://api.github.com/repos/ericjjj/ccxt/languages","stargazers_url":"https://api.github.com/repos/ericjjj/ccxt/stargazers","contributors_url":"https://api.github.com/repos/ericjjj/ccxt/contributors","subscribers_url":"https://api.github.com/repos/ericjjj/ccxt/subscribers","subscription_url":"https://api.github.com/repos/ericjjj/ccxt/subscription","commits_url":"https://api.github.com/repos/ericjjj/ccxt/commits{/sha}","git_commits_url":"https://api.github.com/repos/ericjjj/ccxt/git/commits{/sha}","comments_url":"https://api.github.com/repos/ericjjj/ccxt/comments{/number}","issue_comment_url":"https://api.github.com/repos/ericjjj/ccxt/issues/comments{/number}","contents_url":"https://api.github.com/repos/ericjjj/ccxt/contents/{+path}","compare_url":"https://api.github.com/repos/ericjjj/ccxt/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ericjjj/ccxt/merges","archive_url":"https://api.github.com/repos/ericjjj/ccxt/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ericjjj/ccxt/downloads","issues_url":"https://api.github.com/repos/ericjjj/ccxt/issues{/number}","pulls_url":"https://api.github.com/repos/ericjjj/ccxt/pulls{/number}","milestones_url":"https://api.github.com/repos/ericjjj/ccxt/milestones{/number}","notifications_url":"https://api.github.com/repos/ericjjj/ccxt/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ericjjj/ccxt/labels{/name}","releases_url":"https://api.github.com/repos/ericjjj/ccxt/releases{/id}","deployments_url":"https://api.github.com/repos/ericjjj/ccxt/deployments","created_at":"2018-05-07T02:22:29Z","updated_at":"2018-05-07T02:22:42Z","pushed_at":"2018-05-08T08:46:47Z","git_url":"git://github.com/ericjjj/ccxt.git","ssh_url":"git@github.com:ericjjj/ccxt.git","clone_url":"https://github.com/ericjjj/ccxt.git","svn_url":"https://github.com/ericjjj/ccxt","homepage":"","size":564704,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ccxt:master","ref":"master","sha":"fa5b5746361c760c9ccc18d75cf24e054e2d9c51","user":{"login":"ccxt","id":31901609,"avatar_url":"https://avatars3.githubusercontent.com/u/31901609?v=4","gravatar_id":"","url":"https://api.github.com/users/ccxt","html_url":"https://github.com/ccxt","followers_url":"https://api.github.com/users/ccxt/followers","following_url":"https://api.github.com/users/ccxt/following{/other_user}","gists_url":"https://api.github.com/users/ccxt/gists{/gist_id}","starred_url":"https://api.github.com/users/ccxt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ccxt/subscriptions","organizations_url":"https://api.github.com/users/ccxt/orgs","repos_url":"https://api.github.com/users/ccxt/repos","events_url":"https://api.github.com/users/ccxt/events{/privacy}","received_events_url":"https://api.github.com/users/ccxt/received_events","type":"Organization","site_admin":false},"repo":{"id":91253698,"name":"ccxt","full_name":"ccxt/ccxt","owner":{"login":"ccxt","id":31901609,"avatar_url":"https://avatars3.githubusercontent.com/u/31901609?v=4","gravatar_id":"","url":"https://api.github.com/users/ccxt","html_url":"https://github.com/ccxt","followers_url":"https://api.github.com/users/ccxt/followers","following_url":"https://api.github.com/users/ccxt/following{/other_user}","gists_url":"https://api.github.com/users/ccxt/gists{/gist_id}","starred_url":"https://api.github.com/users/ccxt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ccxt/subscriptions","organizations_url":"https://api.github.com/users/ccxt/orgs","repos_url":"https://api.github.com/users/ccxt/repos","events_url":"https://api.github.com/users/ccxt/events{/privacy}","received_events_url":"https://api.github.com/users/ccxt/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ccxt/ccxt","description":"A JavaScript / Python / PHP cryptocurrency trading library with support for more than 100 bitcoin/altcoin exchanges","fork":false,"url":"https://api.github.com/repos/ccxt/ccxt","forks_url":"https://api.github.com/repos/ccxt/ccxt/forks","keys_url":"https://api.github.com/repos/ccxt/ccxt/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ccxt/ccxt/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ccxt/ccxt/teams","hooks_url":"https://api.github.com/repos/ccxt/ccxt/hooks","issue_events_url":"https://api.github.com/repos/ccxt/ccxt/issues/events{/number}","events_url":"https://api.github.com/repos/ccxt/ccxt/events","assignees_url":"https://api.github.com/repos/ccxt/ccxt/assignees{/user}","branches_url":"https://api.github.com/repos/ccxt/ccxt/branches{/branch}","tags_url":"https://api.github.com/repos/ccxt/ccxt/tags","blobs_url":"https://api.github.com/repos/ccxt/ccxt/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ccxt/ccxt/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ccxt/ccxt/git/refs{/sha}","trees_url":"https://api.github.com/repos/ccxt/ccxt/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ccxt/ccxt/statuses/{sha}","languages_url":"https://api.github.com/repos/ccxt/ccxt/languages","stargazers_url":"https://api.github.com/repos/ccxt/ccxt/stargazers","contributors_url":"https://api.github.com/repos/ccxt/ccxt/contributors","subscribers_url":"https://api.github.com/repos/ccxt/ccxt/subscribers","subscription_url":"https://api.github.com/repos/ccxt/ccxt/subscription","commits_url":"https://api.github.com/repos/ccxt/ccxt/commits{/sha}","git_commits_url":"https://api.github.com/repos/ccxt/ccxt/git/commits{/sha}","comments_url":"https://api.github.com/repos/ccxt/ccxt/comments{/number}","issue_comment_url":"https://api.github.com/repos/ccxt/ccxt/issues/comments{/number}","contents_url":"https://api.github.com/repos/ccxt/ccxt/contents/{+path}","compare_url":"https://api.github.com/repos/ccxt/ccxt/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ccxt/ccxt/merges","archive_url":"https://api.github.com/repos/ccxt/ccxt/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ccxt/ccxt/downloads","issues_url":"https://api.github.com/repos/ccxt/ccxt/issues{/number}","pulls_url":"https://api.github.com/repos/ccxt/ccxt/pulls{/number}","milestones_url":"https://api.github.com/repos/ccxt/ccxt/milestones{/number}","notifications_url":"https://api.github.com/repos/ccxt/ccxt/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ccxt/ccxt/labels{/name}","releases_url":"https://api.github.com/repos/ccxt/ccxt/releases{/id}","deployments_url":"https://api.github.com/repos/ccxt/ccxt/deployments","created_at":"2017-05-14T15:41:56Z","updated_at":"2018-05-08T09:18:06Z","pushed_at":"2018-05-08T08:48:43Z","git_url":"git://github.com/ccxt/ccxt.git","ssh_url":"git@github.com:ccxt/ccxt.git","clone_url":"https://github.com/ccxt/ccxt.git","svn_url":"https://github.com/ccxt/ccxt","homepage":"","size":565507,"stargazers_count":6243,"watchers_count":6243,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":1600,"mirror_url":null,"archived":false,"open_issues_count":195,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":1600,"open_issues":195,"watchers":6243,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ccxt/ccxt/pulls/2792"},"html":{"href":"https://github.com/ccxt/ccxt/pull/2792"},"issue":{"href":"https://api.github.com/repos/ccxt/ccxt/issues/2792"},"comments":{"href":"https://api.github.com/repos/ccxt/ccxt/issues/2792/comments"},"review_comments":{"href":"https://api.github.com/repos/ccxt/ccxt/pulls/2792/comments"},"review_comment":{"href":"https://api.github.com/repos/ccxt/ccxt/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ccxt/ccxt/pulls/2792/commits"},"statuses":{"href":"https://api.github.com/repos/ccxt/ccxt/statuses/23bff23ec7cb7da2159f906295f9abe93b97eaa6"}},"author_association":"NONE"}}
{"actor":{"display_login":"ericjjj"}}