Home

Awesome

C++ REST API library for BTCMarkets.

BTCMarkets provides REST API to their service in number of programming languages, except C++. To rectify this problem, this library was created.

The library uses header only json library and cpr library as a wrapper for libcurl for making get and post requests to the btcmakrets api service.

For most commands, public api_key and secret private_key are required for authentication for your account. The keys are provided to you by btcmarkets in your Account/API key section.

BTCMarkets requires correct timestamps to be added to authentication requests. This timestamp should be within +/- 30 seconds of their server timestamp. In Linux this shouldn't be a problem. But just in case, the library has an option to specify timezone-offset, in seconds, if timestamp adjustments are required due to differences in your and the server timestamps.

Dependencies

Ubuntu 15.10 and 16.04
sudo apt install git build-essential cmake libboost-program-options-dev libcurl4-openssl-dev libssl-dev
Arch Linux
sudo pacman -Sy git base-devel cmake boost curl openssl

Compilation

git clone --recursive https://github.com/moneroexamples/btcmarkets-cpp.git

cd btcmarkets-cpp && mkdir build && cd build

cmake ..

make

After successful compilation, btcmarketsexamples binary should be generated.

btcmarketsexamples options

btcmarketexamples - example program showcasing using BtcMarkets C++11 RESTfull API:
  -h [ --help ]                      produce help message
  -a [ --api-key ] arg               btcmarkets api key
  -p [ --private-key ] arg           private key provided by btcmarkets to you
  -c [ --command ] arg (=tick)       api command to execute: tick, order_book, 
                                     order_history, trade_history, open_orders,
                                     create_order, cancel_order, trades, 
                                     order_detail, account_balance
  -t [ --trade-pair ] arg (=BTC/AUD) instrument/currency pair: BTC/AUD, 
                                     LTC/AUD, ETH/AUD,LTC/BTC, ETH/BTC, 
                                     DAO/BTC, DAO/ETH
  --price arg                        price when making an order
  --volume arg                       volume of the order
  --side arg (=Bid)                  side of order: Bid, Ask
  --type arg (=Limit)                type of the order: Market, Limit
  --limit arg (=10)                  number of past orders to fetch
  --since arg (=0)                   from when to fetch the past orders
  --timestamp-offset arg (=0)        offset, in seconds, between your and 
                                     btcmarkerts timestamps
  --order-id arg                     id number of an order to cancel or check 
                                     details

Examples

Default execution: BTC/AUD tick (no authentication required)

./btcmarketsexamples
 
{"bestAsk":811.76,"bestBid":805.16,"currency":"AUD","instrument":"BTC","lastPrice":806.01,"timestamp":1465262979,"volume24h":265.19094}

ETH/BTC tick (no authentication required)

./btcmarketsexamples -t ETH/BTC

{"bestAsk":0.02798897,"bestBid":0.02241987,"currency":"BTC","instrument":"ETH","lastPrice":0.02798999,"timestamp":1465263021,"volume24h":182.62025}

DAO/ETH order book (no authentication required)

./btcmarketsexamples -t DAO/ETH -c order_book

{"asks":[[0.01,10000.0],[0.01,6334.1398],[0.0101,9938.0659],[0.0102,10000.0],[0.0105,8213.8165],[0.0115,1194.7316],[0.01175,500.0],[0.01199999,1500.0],[0.012,7648.2917],[0.012,1000.0],[0.012,490.2207],[0.0125,100.0],[0.013,9.15],[0.0145,100.0],[0.016345,987.0],[0.0177,600.0],[0.02,244.241],[0.02,1.12839],[0.02,325.8413],[0.051111,500.0],[0.060111,500.0],[0.07,500.0],[0.08299,500.0],[0.1,0.001],[0.101,100.0],[1.0129,99.0]],"bids":[[0.00943102,200.0],[0.00943101,100.0],[0.00943,110.0],[0.00930202,1000.0],[0.00930201,100.0],[0.00913128,1000.0],[0.00906,388.0],[0.009,5000.0],[0.008,4350.0],[0.006,10000.0],[0.005,2000.0],[0.001,0.001]],"currency":"ETH","instrument":"DAO","timestamp":1465263134}

DAO/ETH order book (no authentication required)

./btcmarketsexamples -t DAO/ETH -c order_book

{"asks":[[0.01,10000.0],[0.01,6334.1398],[0.0101,9938.0659],[0.0102,10000.0],[0.0105,8213.8165],[0.0115,1194.7316],[0.01175,500.0],[0.01199999,1500.0],[0.012,7648.2917],[0.012,1000.0],[0.012,490.2207],[0.0125,100.0],[0.013,9.15],[0.0145,100.0],[0.016345,987.0],[0.0177,600.0],[0.02,244.241],[0.02,1.12839],[0.02,325.8413],[0.051111,500.0],[0.060111,500.0],[0.07,500.0],[0.08299,500.0],[0.1,0.001],[0.101,100.0],[1.0129,99.0]],"bids":[[0.00943102,200.0],[0.00943101,100.0],[0.00943,110.0],[0.00930202,1000.0],[0.00930201,100.0],[0.00913128,1000.0],[0.00906,388.0],[0.009,5000.0],[0.008,4350.0],[0.006,10000.0],[0.005,2000.0],[0.001,0.001]],"currency":"ETH","instrument":"DAO","timestamp":1465263134}

Recent LTC/AUD trades (no authentication required)

Only part of the result shown.

./btcmarketsexamples -t LTC/AUD -c trades

[{"amount":83.627615,"date":1465265085,"price":6.67,"tid":102659907},{"amount":20.0,"date":1465265085,"price":6.68,"tid":102659896},{"amount":0.01485992,"date":1465212487,"price":6.66,"tid":102533229},{"amount":0.01485992,"date":1465212382,"price":6.84,"tid":102533038},{"amount":0.20175051,"date":1465177962,"price":6.66,"tid":102385472},{"amount":5.0,"date":1465039217,"price":7.0,"tid":101896247},{"amount":4.327,"date":1465039027,"price":6.99,"tid":101895354},{"amount":4.327,"date":1465038961,"price":6.6,"tid":101894843},{"amount":2.0,"date":1465038961,"price":6.6,"tid":101894831},{"amount":1.0,"date":1465038961,"price":6.61,"tid":101894820},{"amount":2.673,"date":1465038961,"price":6.71,"tid":101894809},{"amount":14.1,"date":1465029497,"price":7.0,"tid":101871393},{"amount":3.2655605,"date":1465027433,"price":7.0,"tid":101869010},

Also can limit number of recent trends, by providing trade id to start from.

./btcmarketsexamples -c trades -t LTC/AUD --since 101894809

[{"amount":83.627615,"date":1465265085,"price":6.67,"tid":102659907},{"amount":20.0,"date":1465265085,"price":6.68,"tid":102659896},{"amount":0.01485992,"date":1465212487,"price":6.66,"tid":102533229},{"amount":0.01485992,"date":1465212382,"price":6.84,"tid":102533038},{"amount":0.20175051,"date":1465177962,"price":6.66,"tid":102385472},{"amount":5.0,"date":1465039217,"price":7.0,"tid":101896247},{"amount":4.327,"date":1465039027,"price":6.99,"tid":101895354},{"amount":4.327,"date":1465038961,"price":6.6,"tid":101894843},{"amount":2.0,"date":1465038961,"price":6.6,"tid":101894831},{"amount":1.0,"date":1465038961,"price":6.61,"tid":101894820}]

Account balance (authentication required)

Values in the example output were replaced with dummy values for privacy reasons.

./btcmarketsexamples -a public_api_key -p secret_private_key -c account_balance

[{"balance":1224253326293,"currency":"AUD","pendingFunds":66969936000},{"balance":0,"currency":"USD","pendingFunds":0},{"balance":7652697853,"currency":"BTC","pendingFunds":1378776555},{"balance":146034433752,"currency":"LTC","pendingFunds":3354855481197},{"balance":943372,"currency":"ETH","pendingFunds":4543243520},{"balance":0,"currency":"FCT","pendingFunds":0},{"balance":0,"currency":"MAID","pendingFunds":0},{"balance":1736535933,"currency":"DAO","pendingFunds":2066000000}]

Create order (authentication required)

A Bid(default) and Limit (default) order to buy 1 ETH for 18.17 AUD.

./btcmarketsexamples -a public_api_key -p secret_private_key -c create_order -t ETH/AUD --price 19.17 --volume 1

{"clientRequestId":"1","errorCode":null,"errorMessage":null,"id":102661890,"success":true}

An Ask and Limit (default) order to sell 1.5 ETH for 20.01 AUD.

./btcmarketsexamples -a public_api_key -p secret_private_key -c create_order -t ETH/AUD --price 20.01 --volume 1.5 --side Ask

{"clientRequestId":"1","errorCode":null,"errorMessage":null,"id":102662870,"success":true}

An Ask and Market order to sell 10 DAO using ETH.

./btcmarketsexamples -a public_api_key -p secret_private_key -c create_order -t DAO/ETH --volume 10.0 --side Ask --type Market

{"clientRequestId":"1","errorCode":null,"errorMessage":null,"id":102668298,"success":true}

Cancel order (authentication required)

./btcmarketsexamples -a public_api_key -p secret_private_key -c cancel_order --order-id 102662870

{"errorCode":null,"errorMessage":null,"responses":[{"errorCode":null,"errorMessage":null,"id":102662870,"success":true}],"success":true}

Order details (authentication required)

./btcmarketsexamples -a public_api_key -p secret_private_key -c order_detail --order-id 102510625

{"errorCode":null,"errorMessage":null,"orders":[{"clientRequestId":null,"creationTime":1465206394338,"currency":"BTC","errorMessage":null,"id":102510625,"instrument":"ETH","openVolume":100000000,"orderSide":"Bid","ordertype":"Limit","price":2241987,"status":"Placed","trades":[],"volume":100000000}],"success":true}

Order history (authentication required)

Show last two orders of to buy ETH using AUD.

./btcmarketsexamples -a public_api_key -p secret_private_key -c order_history -t ETH/AUD --limit 2 

{"errorCode":null,"errorMessage":null,"orders":[{"clientRequestId":null,"creationTime":1465287752319,"currency":"AUD","errorMessage":null,"id":102800357,"instrument":"ETH","openVolume":60000000,"orderSide":"Bid","ordertype":"Limit","price":1925000000,"status":"Cancelled","trades":[],"volume":60000000},{"clientRequestId":null,"creationTime":1465287783251,"currency":"AUD","errorMessage":null,"id":102800414,"instrument":"ETH","openVolume":200000000,"orderSide":"Bid","ordertype":"Limit","price":1926000000,"status":"Cancelled","trades":[],"volume":200000000}],"success":true}

Open orders (authentication required)

Show last open orders of to buy ETH using BTC.

./btcmarketsexamples -a public_api_key -p secret_private_key -c order_history -t ETH/BTC --limit 1 

{"errorCode":null,"errorMessage":null,"orders":[{"clientRequestId":null,"creationTime":1465289102761,"currency":"BTC","errorMessage":null,"id":102803735,"instrument":"ETH","openVolume":100000000,"orderSide":"Bid","ordertype":"Limit","price":2245882,"status":"Placed","trades":[],"volume":100000000}],"success":true}

Trades history (authentication required)

Show last trade to buy DAO using ETH.

./btcmarketsexamples -a public_api_key -p secret_private_key -c trade_history -t DAO/ETH --limit 1 

{"errorCode":null,"errorMessage":null,"success":true,"trades":[{"creationTime":1465266880437,"description":null,"fee":2200000,"id":102669490,"price":1000000,"side":"Bid","volume":1000000000}]}[

How can you help?

Constructive criticism, code and website edits are always good. They can be made through github.

Some Monero are also welcome:

48daf1rG3hE1Txapcsxh6WXNe9MLNKtu7W7tKTivtSoVLHErYzvdcpea2nSTgGkz66RFP4GKVAsTV14v6G3oddBTHfxP6tU