Trading API¶
v1.4.2
Overview¶
B2BX provides both HTTP and WebSocket APIs for interacting with the exchange. Both allow read access to public market data and private read access to your account. Private write access to your account is available via the private API.
The public HTTP endpoint is accessed via GET
requests while the private endpoint is accessed via HMAC-SHA512 signed POST
requests using API keys. Both types of HTTP endpoints return results in JSON format.
The WebSocket API allows pushing notifications about the public order books and your private account. Similarly to the HTTP API, it requires HMAC-SHA512 signed requests using API keys for requests related to your private account.
The base URLs for requests are:
Code |
URL |
---|---|
[base] |
|
[base2] |
Required fields are marked with *.
Private API¶
All REST requests must contain two HTTP header fields:
"Key"
: public key"Sign"
: hash of payload
API keys are UUID string (UTF-8), for example: “ca3a03e1-fc5c-4954-99dc-876db3997d8f”. API keys are obtained through Trader’s Room: Profile > API Keys Management
. The payload is a JSON body. For hashing the HMAC-SHA512 algorithm is used.
The POST
and DELETE
requests must include the ts
field in body. The ts
value contains a string representation of the current time in UTC Date and time, for example: “2019-12-20T08:20:51”.
API Rate Limits¶
/frontoffice/*
— 1 request per second/marketdata/*
— 2 requests per second
Public REST Methods¶
Supported Instruments¶
GET [base]/frontoffice/api/info
Returns information on all currency pairs supported by the exchange. In case of success, the following JSON-structure will be returned in the response body:
- baseAsset string
Base asset
- quoteAsset string
Quote asset
- hidden number
Instrument availability:
0
— available,1
— hidden (trading is not recommended, because this instrument may be preparing to disconnect)- status string
Instrument status:
open
,paused
(cannot be traded),halted
(cannot be traded, orders are cancelled)- makerFee number
Maker fee, paid if the order adds liquidity
- makerFeeLimit number
Minimum maker fee value
- takerFee number
Taker fee, paid if the order removes liquidity
- takerFeeLimit number
Minimum taker fee value
- priceScale number
Price step
- amountScale number
Volume step
- createdAt string
Date and time of instrument creation:
YYYY-MM-DDThh:mm:ss
- updatedAt string
Date and time of instrument last update:
YYYY-MM-DDThh:mm:ss
Response example
{
"serverTime": 636880696809972288,
"pairs": {
"btc_usdt": {
"baseAsset": "btc",
"quoteAsset": "usdt",
"status": "Open",
"hidden": 0,
"makerFee": 0,
"makerFeeLimit": 0,
"takerFee": 0.001,
"takerFeeLimit": 0,
"priceScale": 6,
"amountScale": 6,
"createdAt": "2019-11-14T16:18:49.253354",
"updatedAt": "2019-11-14T16:18:49.253354"
},
"gnt_usdt": {
"baseAsset": "gnt",
"quoteAsset": "usdt",
"status": "Open",
"hidden": 0,
"makerFee": 0,
"makerFeeLimit": 0,
"takerFee": 0.001,
"takerFeeLimit": 0,
"priceScale": 5,
"amountScale": 5,
"createdAt": "2019-11-14T16:18:49.253354",
"updatedAt": "2019-11-14T16:18:49.253354"
}
}
}
Order Book Snapshot¶
GET [base]/marketdata/instruments/{instrument}/depth
Returns order book for a specified currency pair. The following request parameters are available:
- instrument* string
Instrument identifier:
{baseAsset}_{quoteAsset}
Request example
[base]/marketdata/instruments/eth_btc/depth
In case of success, the following JSON-structure will be returned in the response body:
- instrument string
Instrument identifier, same as in the request
- bids array
Each element represents one particular order and contains number fields
amount
andprice
- asks array
Each element represents one particular order and contains number fields
amount
andprice
- version number
Current snapshot version
- askTotalAmount number
Sum of all ask orders
- bidTotalAmount number
Sum of all bid orders
- snapshot boolean
This is a self-contained snapshot (always
true
for this request)
Response example
{
"instrument": "eth_btc",
"bids": [
{
"amount": 0.3092258,
"price": 0.01734264
},
{
"amount": 51.61494099,
"price": 0.01734363
}
],
"asks": [
{
"amount": 133.52370356,
"price": 0.01739337
},
{
"amount": 9.16854518,
"price": 0.01739838
}
],
"version": 1891724,
"askTotalAmount": 1849.11363582,
"bidTotalAmount": 809.23878372,
"snapshot": true
}
Instrument Candles¶
New in version v1.2.0.
GET [base]/marketdata/instruments/{instrument}/history
Returns candlesticks graph for a specified currency pair. The following request parameters are available:
- instrument* string
Instrument identifier:
{baseAsset}_{quoteAsset}
- startDate* string
Date and time of period start:
YYYY-MM-DDThh:mm:ss
- endDate* string
Date and time of period end:
YYYY-MM-DDThh:mm:ss
- type* string
- Timeframe, the following values are avaliable:
1m
— 1 Minute
5m
— 5 Minutes
15m
— 15 Minutes
30m
— 30 Minutes
1h
— 1 Hour
12h
— 12 Hours
1d
— 1 Day
1w
— 1 Week
1M
— 1 Month- count number
Number of candles to return, defaults to 1000 (maximum value)
Request example
[base]/marketdata/instruments/btc_usdt/history?startDate=2019-03-13T09:00:00&endDate=2019-03-13T11:00:00&type=1h&count=2
In case of success, the following JSON-structure data
will be returned in the response body:
- instrument string
Same as in the request
- start string
Same as in the request
- end string
Same as in the request
- low number
Lowest price
- high number
Highest price
- volume number
Total volume
- quoteVolume number
Total quote asset volume
- open number
Open price
- close number
Close price
Response example
{
"success": true,
"instrument": "btc_usdt",
"data": [
{
"instrument": "btc_usdt",
"start": "2019-03-13T09:00:00Z",
"end": "2019-03-13T10:00:00Z",
"low": 3842.855,
"high": 3855.445,
"volume": 4,
"quoteVolume": 0,
"open": 3855.105,
"close": 3842.855
},
{
"instrument": "btc_usdt",
"start": "2019-03-13T10:00:00Z",
"end": "2019-03-13T11:00:00Z",
"low": 3834.355,
"high": 3848.855,
"volume": 26,
"quoteVolume": 0,
"open": 3842.865,
"close": 3835.655
}
],
"startDateTime": "2019-03-13T09:00:00Z",
"endDateTime": "2019-03-13T11:00:00Z"
}
Asset Info¶
New in version v1.3.0.
GET [base2]/asset
Returns assets information.
In case of success, JSON-object will be returned in the response body with the following fields:
- name string
Asset name
- can_withdraw string
If
true
, the asset can be withdrawn- can_deposit string
If
true
, the asset can be deposited- min_withdraw string
Minimum withdrawal/deposit amount
- max_withdraw string
Minimum withdrawal/deposit amount
Response Example
{
"BTC": {
"name": "btc",
"can_withdraw": true,
"can_deposit": true,
"min_withdraw": "0.00000001",
"max_withdraw": "100000000"
},
"USDT": {
"name": "usdt",
"can_withdraw": true,
"can_deposit": true,
"min_withdraw": "0.00000001",
"max_withdraw": "100000000"
},
"USD": {
"name": "usd",
"can_withdraw": true,
"can_deposit": true,
"min_withdraw": "0.00000001",
"max_withdraw": "100000000"
}
}
Summary¶
New in version v1.3.0.
GET [base2]/summary
Returns summary information.
In case of success, JSON-object will be returned in the response body with the following fields:
- id string
Market identifier
- last string
Price of the last trade in the last 24 hours. If the deal was more than 24 hours ago:
0
- lowestAsk string
Current lowest ask price
- highestBid string
Current highest bid price
- percentChange string
Price change in the last 24 hours
- baseVolume string
All traded volume in the last 24 hours in base currency
- quoteVolume string
All traded volume in the last 24 hours in quote currency
- isFrozen string
Market status:
0
— working,1
— temporarily suspended- high24hr string
Maximum trade price in the last 24 hours
- low24hr string
Minimum trade price in the last 24 hours
Response example
{
"BTC_USDT": {
"id": "btc_usdt",
"last": "10978.93578",
"lowestAsk": "10979.0",
"highestBid": "10978.71",
"percentChange": "0.0813730364297798727996051454",
"baseVolume": "6.47119743",
"quoteVolume": "70829.9781692126756",
"isFrozen": "0",
"high24hr": "10985.0049",
"low24hr": "10857.95376"
},
"BTC_USD": {
"id": "btc_usd",
"last": "0",
"lowestAsk": "0",
"highestBid": "0",
"percentChange": "0",
"baseVolume": "0",
"quoteVolume": "0",
"isFrozen": "0",
"high24hr": "0",
"low24hr": "0"
}
}
Ticker Info¶
New in version v1.3.0.
GET [base2]/ticker
Returns ticker information.
In case of success, JSON-object will be returned in the response body with the following fields:
- base_name string
Base asset name
- quote_name string
Quote asset name
- last_price string
Price of the last trade in the last 24 hours. If the deal was more than 24 hours ago:
0
- base_volume string
All traded volume in the last 24 hours in base currency
- quote_volume string
All traded volume in the last 24 hours in quote currency
- isFrozen string
Market status:
0
— working,1
— temporarily suspended
Response example
{
"dash_btc": {
"base_name": "dash",
"quote_name": "btc",
"last_price": "0",
"base_volume": "0",
"quote_volume": "0",
"isFrozen": "1"
},
"eth_usdt": {
"base_name": "eth",
"quote_name": "usdt",
"last_price": "423.9936",
"base_volume": "2942.97774",
"quote_volume": "1273092.080666887",
"isFrozen": "0"
}
}
Trades Info¶
New in version v1.3.0.
GET [base2]/trades/{instrument}
Returns all trades for a specified instrument in the last 24 hours. The following request parameters are available:
- instrument* string
Instrument identifier:
{baseAsset}_{quoteAsset}
Request Example
[base]/trades/btc_usd
In case of success, JSON-object will be returned in the response body with the following fields:
- tradeID string
Trade identifier
- price string
Trade price
- base_volume string
Amount in base currency
- quote_volume string
Amount in quote currency
- trade_timestamp string
Datetime of the trade in the UNIX timestamp format
- type string
Trade side:
"buy"
or"sell"
Response example
[
{
"tradeID": "1247307",
"price": "10093.92246491",
"base_volume": "0.0259",
"quote_volume": "261.432591841169",
"trade_timestamp": "1599577070",
"type": "buy"
},
{
"tradeID": "1247309",
"price": "10091.69185435",
"base_volume": "0.0754",
"quote_volume": "760.913565817990",
"trade_timestamp": "1599577128",
"type": "sell"
}
]
Private REST Methods¶
Place an Order¶
POST [base]/frontoffice/api/order
Places a new order. Request body must contain ts
field and JSON-object order
with the following fields:
- instrument* string
Order instrument identifier:
{baseAsset}_{quoteAsset}
- type* string
Order side:
"buy"
or"sell"
- amount* number
Order amount, must be greater than
0
- price number
Order price. Required for limit orders, optional for market orders. If
isLimit
istrue
, must be greater than0
, in other cases can be equal to0
- isLimit boolean
If
true
, the order is limit. Iffalse
, the order is market. Ref. to Flags Combinations for details- isStop boolean Currently not supported
If
true
, the order is stop market or stop limit (depending onisLimit
value). Ref. to Flags Combinations for details- isFok boolean
If
true
, the order must be executed immediately or be cancelled if not filled. Ref. to Flags Combinations for details- activationPrice number Currently not supported
Required and applicable only if
isStop
istrue
- clientOrderId number
Client provided order identifier: any UUID, except for
00000000-0000-0000-0000-000000000000
Flags Combinations
Order |
Description |
Flags |
---|---|---|
|
Limit order |
|
|
Market order (Immediate-or-Cancel market order) — order must be executed immediately and cancel any unfilled portion |
|
|
Fill-or-Kill market order — order must be executed immediately or cancelled if not filled |
|
Request example
{
"ts": "2019-12-12T01:01:01",
"order": {
"instrument": "btc_usdt",
"type": "sell",
"amount": 1,
"price": 1,
"isLimit": true,
"isStop": false,
"isFok": false,
"activationPrice": 0,
"clientOrderId": "6fdf688e-00b0-4c68-82dd-3aee5c727ed1"
}
}
In case of success, JSON-structure object
will be returned in the response body:
- orderId number
System order identifier
- total number
Total amount of quoted currency sold (quote amount)
- orderType number
Order side:
0
— sell,1
— buy- commission number
Commission in quoted currency
- createdAt string
Date and time of order creation
- unitsFilled number
Base amount
- isPending boolean
If
true
, the order is active (not rejected, cancelled, or completed)- status string
Order status:
Working
,Rejected
,Cancelled
,Completed
- type string
Same as in the request
- amount number
Same as in the request
- remaining number
Remaining amount
- price number
Same as in the request
- stopPrice number
Order stop price
- isLimit boolean
Same as in the request
- isStop boolean
Same as in the request
- isFok boolean
Same as in the request
- instrument boolean
Same as in the request
- side string
Order side:
0
— buy,1
— sell
Response example
{
"order": {
"orderId": "-72057594037927933",
"total": 0.0,
"orderType": 0,
"commission": 0.0,
"createdAt": "2020-08-18T12:18:12.2296801Z",
"unitsFilled": 0.0,
"isPending": true,
"status": "working",
"type": "buy",
"amount": 1,
"remaining": 1,
"price": 1,
"stopPrice": 0.0,
"isLimit": true,
"instrument": "eth_usd",
"side": 0
}
}
JavaScript
1const crypto = require('crypto');
2const https = require('https');
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Host = "api.b2bx.exchange";
6const Port = 8443;
7const Method = '/trading/frontoffice/api/order'
8const Payload = new Date().toISOString();
9const body = {
10 ts: Payload,
11 order: {
12 instrument: 'eth_usd',
13 type: 'buy',
14 amount: 1,
15 price: 1,
16 isLimit: true
17 }
18};
19const data = JSON.stringify(body);
20const Sign = crypto
21 .createHmac('sha512', Secret)
22 .update(data)
23 .digest('hex')
24 .toUpperCase();
25const options = {
26 hostname: Host,
27 path: Method,
28 port: Port,
29 method: 'POST',
30 headers: {
31 'Content-Type': 'application/json',
32 'Content-Length': data.length,
33 Key,
34 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
35 Sign
36 }
37};
38const req = https.request(options, res => {
39 console.log(`statusCode: ${res.statusCode}`);
40 res.on('data', d => {
41 process.stdout.write(d);
42 });
43});
44req.on('error', e => {
45 console.error(e);
46});
47req.write(data);
48req.end();
Cancel an Order¶
DELETE [base]/frontoffice/api/orders?orderId={id}
Cancels the order. The following request parameters are available:
- id* string
Order identifier: either
orderId
— same as in the response message generated with Place an Order request, orclientOrderId
— same as in the Place an Order requestChanged in version v1.1.0: Possibility to cancel an order by
clientOrderId
added.
Request example — cancel by orderId
[base]/frontoffice/api/orders?orderId=-72057594037927933&ts=2019-12-12T01:01:01
Request example — cancel by clientOrderId
[base]/frontoffice/api/orders?orderId=6fdf688e-00b0-4c68-82dd-3aee5c727ed1&ts=2019-12-12T01:01:01
In case of success, JSON-structure object
will be returned in the response body (for details ref. to Place an Order response description).
Response example
{
"order": {
"orderId": "-72057594037927933",
"total": 0.0,
"orderType": 0,
"commission": 0.0,
"createdAt": "2020-08-18T12:28:26.6415513Z",
"unitsFilled": 0.0,
"isPending": false,
"status": "cancelled",
"type": "buy",
"amount": 0.1,
"remaining": 0.1,
"price": 0.001,
"stopPrice": 0.0,
"isLimit": true,
"instrument": "eth_usd",
"side": 0
}
}
JavaScript — cancel by orderId example
1const crypto = require('crypto');
2const https = require('https');
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Host = "api.b2bx.exchange";
6const Port = 8443;
7const Payload = new Date().toISOString();
8const OrderId = '-72057594037927933'; // Change to your OrderId
9const Method = `/trading/frontoffice/api/orders?OrderId=${OrderId}&ts=${Payload}`
10async function deleteOrder() {
11 console.log(`?OrderId=${OrderId}&ts=${Payload}`);
12 const Sign = crypto
13 .createHmac('sha512', Secret)
14 .update(`?OrderId=${OrderId}&ts=${Payload}`)
15 .digest('hex')
16 .toUpperCase();
17 const options = {
18 hostname: Host,
19 path: Method,
20 port: Port,
21 method: 'DELETE',
22 headers: {
23 'Content-Type': 'application/json',
24 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
25 Key,
26 Sign
27 }
28 };
29 const req = https.request(options, res => {
30 console.log(`statusCode: ${res.statusCode}`);
31 console.log(`statusMessage: ${res.statusMessage}`);
32 res.on('data', d => {
33 process.stdout.write(d);
34 });
35 });
36 req.on('error', e => {
37 console.error(e);
38 });
39 req.end();
40}
41deleteOrder().catch(err => {
42 console.log(err);
43});
JavaScript — cancel by clientOrderId example
1const crypto = require('crypto');
2const https = require('https');
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Host = "api.b2bx.exchange";
6const Port = 8443;
7const Payload = new Date().toISOString();
8const ClientOrderId = '6fdf688e-00b0-4c68-82dd-3aee5c727ed1'; // Change to your ClientOrderId
9const Method = `/trading/frontoffice/api/orders?OrderId=${ClientOrderId}&ts=${Payload}`
10async function deleteOrder() {
11 console.log(`?OrderId=${ClientOrderId}&ts=${Payload}`);
12 const Sign = crypto
13 .createHmac('sha512', Secret)
14 .update(`?OrderId=${ClientOrderId}&ts=${Payload}`)
15 .digest('hex')
16 .toUpperCase();
17 const options = {
18 hostname: Host,
19 path: Method,
20 port: Port,
21 method: 'DELETE',
22 headers: {
23 'Content-Type': 'application/json',
24 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
25 Key,
26 Sign
27 }
28 };
29 const req = https.request(options, res => {
30 console.log(`statusCode: ${res.statusCode}`);
31 console.log(`statusMessage: ${res.statusMessage}`);
32 res.on('data', d => {
33 process.stdout.write(d);
34 });
35 });
36 req.on('error', e => {
37 console.error(e);
38 });
39 req.end();
40}
41deleteOrder().catch(err => {
42 console.log(err);
43});
Orders History¶
GET [base]/frontoffice/api/order_history
Returns the orders history. The following request parameters are available:
- market string
Market orders filter: currency pair (for example:
btc_usdt
)- side string
Order side: either
buy
orsell
- status string
Order status:
Working
,Rejected
,Cancelled
,Completed
- startDate string
Date and time of period start:
YYYY-MM-DDThh:mm:ss.s
- endDate string
Date and time of period end:
YYYY-MM-DDThh:mm:ss.s
Request example
[base]/frontoffice/api/order_history?market=btc_usdt&ts=2019-12-12T01:01:01
In case of success, JSON-object data
will be returned in the response body (for details ref. to Place an Order response description).
Response example
{
"filters": {
"market": "btc_usd"
},
"paging": {
"page": 1,
"per_page": 15,
"total": 0
},
"data": [{
"orderId": "-72057593704231199",
"total": 0.0,
"orderType": 0,
"commission": 0.0,
"createdAt": "2020-08-18T12:53:19.755247Z",
"unitsFilled": 0.0,
"isPending": false,
"status": "cancelled",
"type": "buy",
"amount": 0.57945583,
"remaining": 0.57945583,
"price": 12241.61,
"stopPrice": 0.0,
"isLimit": true,
"instrument": "btc_usd",
"side": 0
},
{
"orderId": "-72057593704231200",
"total": 0.0,
"orderType": 0,
"commission": 0.0,
"createdAt": "2020-08-18T12:53:19.755163Z",
"unitsFilled": 0.0,
"isPending": false,
"status": "cancelled",
"type": "sell",
"amount": 0.4081,
"remaining": 0.4081,
"price": 12253.93,
"stopPrice": 0.0,
"isLimit": true,
"instrument": "btc_usd",
"side": 1
}
]
}
JavaScript
1const crypto = require('crypto');
2const https = require('https');
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Host = "api.b2bx.exchange";
6const Port = 8443;
7const Payload = new Date().toISOString();
8const Method = `/trading/frontoffice/api/order_history?ts=${Payload}&market=btc_usd`;
9async function GetOrders() {
10 console.log(`ts=${Payload}`);
11 const Sign = crypto
12 .createHmac('sha512', Secret)
13 .update(`?ts=${Payload}&market=btc_usd`)
14 .digest('hex')
15 .toUpperCase();
16 const options = {
17 hostname: Host,
18 port: Port,
19 path: Method,
20 method: 'GET',
21 headers: {
22 'Content-Type': 'application/json',
23 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
24 Key,
25 Sign
26 }
27 };
28 const req = https.request(options, res => {
29 console.log(`statusCode: ${res.statusCode}`);
30 console.log(`statusMessage: ${res.statusMessage}`);
31 res.on('data', d => {
32 process.stdout.write(d);
33 });
34 });
35 req.on('error', e => {
36 console.error(e);
37 });
38 req.end();
39}
40
41GetOrders().catch(err => {
42 console.log(err);
43});
Trades History¶
GET [base]/frontoffice/api/trade_history
Returns trades history. The following request parameters are available:
- orderId number
Order identifier, by which it is possible to get information about all related trades
New in version v1.4.0.
- market string
Market orders filter: currency pair (for example:
btc_usdt
)- side string
Order side:
buy
orsell
- startDate string
Date and time of period start:
YYYY-MM-DDThh:mm:ss.s
- endDate string
Date and time of period end:
YYYY-MM-DDThh:mm:ss.s
Request example
[base]/frontoffice/api/trade_history?market=btc_usdt
In case of success, JSON-object data
will be returned in the response body with the following fields:
- tradeSeq number
Sequence number of the trade
- tradeTime string
Date and time of the trade
- amount number
Trade amount
- executionPrice number
Trade execution price
- instrument string
Trade instrument
- side number
Trade side:
0
— buy,1
— sell- commission number
Trade commission
- orderId number
Order identifier of the trade
Response example
{
"filters": {
"market": "btc_usdt"
},
"paging": {
"page": 1,
"per_page": 15,
"total": 0
},
"data": [
{
"tradeSeq": 0,
"tradeTime": "2019-12-20T06:17:03.093597",
"amount": 0.00000001,
"executionPrice": 0.00000001,
"instrument": "btc_usdt",
"side": 0,
"commission": 0.00000000,
"orderId": -72057593704402280
},
{
"tradeSeq": 3927,
"tradeTime": "2019-12-20T06:17:03.093597",
"amount": 0.00000001,
"executionPrice": 0.00000001,
"instrument": "btc_usdt",
"side": 1,
"commission": 0.00000000,
"orderId": -72057593704402281
}
]
}
JavaScript
1const crypto = require('crypto');
2const https = require('https');
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Host = "api.b2bx.exchange";
6const Port = 8443;
7const Payload = new Date().toISOString();
8const Method = `/trading/frontoffice/api/trade_history?ts=${Payload}&market=btc_usd&startDate=2020-08-12T01:01:01`;
9async function GetOrders() {
10 console.log(`ts=${Payload}`);
11 const Sign = crypto
12 .createHmac('sha512', Secret)
13 .update(`?ts=${Payload}&market=btc_usd&startDate=2020-08-12T01:01:01`)
14 .digest('hex')
15 .toUpperCase();
16 const options = {
17 hostname: Host,
18 port: Port,
19 path: Method,
20 method: 'GET',
21 headers: {
22 'Content-Type': 'application/json',
23 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
24 Key,
25 Sign
26 }
27 };
28 const req = https.request(options, res => {
29 console.log(`statusCode: ${res.statusCode}`);
30 console.log(`statusMessage: ${res.statusMessage}`);
31 res.on('data', d => {
32 process.stdout.write(d);
33 });
34 });
35 req.on('error', e => {
36 console.error(e);
37 });
38 req.end();
39}
40GetOrders().catch(err => {
41 console.log(err);
42});
HTTP Codes and Errors¶
200 OK
400 Bad Request: incorrect parameters
{
"errors": [
{
"message": "Unknown instrument 'gold_silver'",
"value": "gold_silver",
"key": "instrument"
}
]
}
401 Unauthorized: incorrect keys or ts
value differs from the current time by more than 5 seconds
404 Not Found
{
"errors": [
{
"message": "Not Found",
"key": "instrument"
}
]
}
429 Too Many Requests: API Rate Limits violated
500 Internal Server Error
{
"errors": [
{
"message": "Stop orders are not supported."
}
]
}
503 Service Unavailable
Either JSON:
{
"errors": [
{
"message": "System is currently overloaded."
}
]
}
or string:
"This service is currently undergoing maintenance."
Public WebSocket Methods¶
Real-Time Order Book Data¶
Open connection with public hub: [base]/marketdata/info
Order book channel name is “Book”.
Attention
Upon subscription, a complete snapshot of a book will be sent (snapshot: true
), after that subsequent responses will contain only updates, not the whole book (snapshot: false
).
For response details ref. to Order Book Snapshot response description.
Response example
{
"instrument": "btc_usd",
"bids": [
{
"amount": 0,
"price": 11883.731508
},
{
"amount": 0,
"price": 11884.241457
},
{
"amount": 0,
"price": 11884.251456
},
{
"amount": 6.57132172,
"price": 11884.421439
},
{
"amount": 4.18222543,
"price": 11884.431438
},
{
"amount": 0,
"price": 11885.181363
},
{
"amount": 1.30694544,
"price": 11887.141167
}
],
"asks": [
{
"amount": 12.40938478,
"price": 11890.1889
},
{
"amount": 28.87423081,
"price": 11890.208902
},
{
"amount": 1.30694544,
"price": 11890.58894
},
{
"amount": 0,
"price": 11890.728954
}
],
"version": 443366001,
"askTotalAmount": 170.26792556,
"bidTotalAmount": 164.11677626,
"snapshot": false
}
JavaScript
1const { HubConnectionBuilder } = require("@microsoft/signalr"); // Package version must be >= 5.0.0
2
3const url = "https://api.b2bx.exchange:8443/trading/marketdata/info";
4const instrument = "btc_usd";
5const channel = 'Book';
6
7let connection = new HubConnectionBuilder()
8 .withUrl(url)
9 .build();
10
11connection.start().then(function () {
12connection.stream(channel, instrument)
13 .subscribe({
14 next: (item) => {
15 console.log(JSON.stringify(item));
16 },
17 error: (err) => {
18 console.log(err);
19 },
20});
21});
Private WebSocket Methods¶
Orders Data¶
Open connection with private hub: [base]/ws/account
Open orders channel name is “OpenOrders”.
Upon subscription, the following JSON-object will be sent (for details ref. to Place an Order response description).
Response example
[
{
"orderId": "-72057593698565937",
"total": 0,
"orderType": 0,
"commission": 0,
"createdAt": "2020-09-01T09:01:15.3651338Z",
"unitsFilled": 0,
"isPending": true,
"status": 0,
"type": "sell",
"amount": 1,
"remaining": 1,
"price": 1,
"stopPrice": 0,
"isLimit": true,
"instrument": "btc_usdt",
"side": 1
}
]
JavaScript
1const { HubConnectionBuilder } = require("@microsoft/signalr"); // Package version must be >= 5.0.0
2const crypto = require("crypto");
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Payload = new Date().toISOString();
6 const Sign = crypto
7 .createHmac('sha512', Secret)
8 .update(Payload)
9 .digest('hex')
10 .toUpperCase();
11const headers = {
12 Key,
13 Payload,
14 Sign
15};
16
17const url = "https://api.b2bx.exchange:8443/trading/ws/account";
18const channel = "OpenOrders";
19let connection = new HubConnectionBuilder()
20 .withUrl(url, {headers: headers})
21 .build();
22
23connection.start().then(function () {
24connection.stream(channel)
25 .subscribe({
26 next: (item) => {
27 console.log(JSON.stringify(item));
28 },
29 error: (err) => {
30 console.log(err);
31 },
32});
33});
Real-Time Balances¶
Open connection with private hub: [base]/ws/account
Balance updates channel name is “FullBalance”.
Upon subscription, a JSON-structure with the following fields will be sent:
- asset string
Asset name
- amount number
Asset amount
- balance number
Full balance
- locked number
Locked amount
Response example
[
{
"asset": "ada",
"amount": 1000000000,
"balance": 1000000000,
"locked": 0
},
{
"asset": "b2bx",
"amount": 10000000,
"balance": 10000000,
"locked": 0
},
{
"asset": "bch",
"amount": 9999999.99999999,
"balance": 9999999.99999999,
"locked": 0
}
]
JavaScript
1const { HubConnectionBuilder } = require("@microsoft/signalr"); // Package version must be >= 5.0.0
2const crypto = require("crypto");
3const Key = "7fa6ceec-d8fc..."; // Change to your PublicKey
4const Secret = "7ae49b5b-99db..."; // Change to your Secret
5const Payload = new Date().toISOString();
6 const Sign = crypto
7 .createHmac('sha512', Secret)
8 .update(Payload)
9 .digest('hex')
10 .toUpperCase();
11const headers = {
12 Key,
13 Payload,
14 Sign
15};
16
17const url = "https://api.b2bx.exchange:8443/trading/ws/account";
18const channel = "FullBalance";
19let connection = new HubConnectionBuilder()
20 .withUrl(url, {headers: headers})
21 .build();
22
23connection.start().then(function () {
24connection.stream(channel, {})
25 .subscribe({
26 next: (item) => {
27 console.log(JSON.stringify(item));
28 },
29 error: (err) => {
30 console.log(err);
31 },
32});
33});