I’ve just released simple C++ static library bfx-cpp-api which interfaces Bitfinex REST API (Websocket interface coming soon). Bfx-cpp-api uses libcurl and cryptopp library which must be installed before use. Check example code and don’t forget to link to libcurl and cryptopp when compiling.
Before using authenticated endpoints be sure you have created API-secret-key file where first line is API access key and second line is API secret key.
#include #include "BitfinexAPI.hpp" #include using std::cout; using std::endl; using std::ifstream; using std::string; int main(int argc, char *argv[]) { const char *keyFilePath = "/Path/to/your/file/with/API-key-secret"; ifstream ifs(keyFilePath); if (!ifs.is_open()) { cout << "Can't open file: " << argv[1] << endl; return -1; } else { string accessKey, secretKey; getline(ifs, accessKey); getline(ifs, secretKey); BitfinexAPI bfxAPI(accessKey, secretKey); string response; int errCode; ///////////////////////////////////////////////////////////////////////// // Examples // Note that default values are not mandatory. See BitfinexAPI.hpp // for details. ///////////////////////////////////////////////////////////////////////// /// Public endpoints /// // errCode = bfxAPI.getTicker(response, "btcusd"); // errCode = bfxAPI.getStats(response, "btcusd"); // errCode = bfxAPI.getFundingBook(response, "USD", 50, 50); // errCode = bfxAPI.getOrderBook(response, "btcusd", 50, 50, 1); // errCode = bfxAPI.getTrades(response, "btcusd", 0L, 50); // errCode = bfxAPI.getLends(response, "USD", 0L, 50); // errCode = bfxAPI.getSymbols(response); // errCode = bfxAPI.getSymbolDetails(response); /// Authenticated endpoints /// // Account // // errCode = bfxAPI.getAccountInfo(response); // errCode = bfxAPI.getSummary(response); // errCode = bfxAPI.deposit(response, "bitcoin", "deposit", 1); // errCode = bfxAPI.getKeyPermissions(response); // errCode = bfxAPI.getMarginInfos(response); // errCode = bfxAPI.getBalances(response); // errCode = bfxAPI.transfer(response, 0.1, "BTC", "trading", "deposit"); // errCode = bfxAPI.withdraw(response); // configure withdraw.conf file before use // // Orders // // errCode = bfxAPI.newOrder(response, "btcusd", 0.01, 983, "sell", "exchange limit", 0, 1, // 0, 0, 0); // // How to create vOrders object for newOrders() call // BitfinexAPI::vOrders orders = // { // {"btcusd", 0.1, 950, "sell", "exchange limit"}, // {"btcusd", 0.1, 950, "sell", "exchange limit"}, // {"btcusd", 0.1, 950, "sell", "exchange limit"} // }; // errCode = bfxAPI.newOrders(response, orders); // // errCode = bfxAPI.cancelOrder(response, 13265453586LL); // // How to create ids object for cancelOrders() call // BitfinexAPI::vIds ids = // { // 12324589754LL, // 12356754322LL, // 12354996754LL // }; // errCode = bfxAPI.cancelOrders(response, ids); // // errCode = bfxAPI.cancelAllOrders(response); // errCode = bfxAPI.replaceOrder(response, 1321548521LL, "btcusd", 0.05, 1212, "sell", // "exchange limit", 0, 0); // errCode = bfxAPI.getOrderStatus(response, 12113548453LL); // errCode = bfxAPI.getActiveOrders(response); // // Positions // // errCode = bfxAPI.getActivePositions(response); // errCode = bfxAPI.claimPosition(response, 156321412LL, 150); // // Historical data // // errCode = bfxAPI.getBalanceHistory(response, "USD", 0L, 0L, 500, "all"); // errCode = bfxAPI.getDWHistory(response, "BTC", "all", 0L , 0L, 500); // errCode = bfxAPI.getPastTrades(response, "btcusd", 0L, 0L, 500, 0); // // Margin funding // // errCode = bfxAPI.newOffer(response, "USD", 12000, 25.2, 30, "lend"); // errCode = bfxAPI.cancelOffer(response, 12354245628LL); // errCode = bfxAPI.getOfferStatus(response, 12313541215LL); // errCode = bfxAPI.getActiveCredits(response); // errCode = bfxAPI.getOffers(response); // errCode = bfxAPI.getTakenFunds(response); // errCode = bfxAPI.getUnusedTakenFunds(response); // errCode = bfxAPI.getTotalTakenFunds(response); // errCode = bfxAPI.closeLoan(response, 1235845634LL); ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// cout << "Response: " << response << endl; cout << "Error code: " << errCode << endl; ifs.close(); return 0; } }