CryptoClients.Net 1.6.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package CryptoClients.Net --version 1.6.0                
NuGet\Install-Package CryptoClients.Net -Version 1.6.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CryptoClients.Net" Version="1.6.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add CryptoClients.Net --version 1.6.0                
#r "nuget: CryptoClients.Net, 1.6.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install CryptoClients.Net as a Cake Addin
#addin nuget:?package=CryptoClients.Net&version=1.6.0

// Install CryptoClients.Net as a Cake Tool
#tool nuget:?package=CryptoClients.Net&version=1.6.0                

.CryptoClients.Net CryptoClients.Net

.NET Nuget downloads License

CryptoClients.Net is a collection of different cryptocurrency exchange client libraries based on the same base library. CryptoClients.Net bundles the different client libraries in a single package and adds some additional tools to make use of them. The client libraries offer access to market data, Spot and Futures trading and various other topics depending on the API.

For more information on what CryptoExchange.Net and it's client libraries offers see the Documentation.

Supported Frameworks

The library is targeting both .NET Standard 2.0 and .NET Standard 2.1 for optimal compatibility

.NET implementation Version Support
.NET Core 2.0 and higher
.NET Framework 4.6.1 and higher
Mono 5.4 and higher
Xamarin.iOS 10.14 and higher
Xamarin.Android 8.0 and higher
UWP 10.0.16299 and higher
Unity 2018.1 and higher

Get the library

Nuget version Nuget downloads

dotnet add package CryptoClients.Net

How to use

Get a client

There are 2 main clients, the ExchangeRestClient and ExchangeSocketClient, for accessing the REST and Websocket API respectively. All exchange API's are available via these clients.
Alternatively exchange specific clients can be used, for example BinanceRestClient or KucoinSocketClient. Either create new clients directly or use Dotnet dependency injection:

// Construction
var restClient = new ExchangeRestClient();
var socketClient = new ExchangeSocketClient();


// Dependency injection, allows the injection of `IExchangeRestClient`, `IExchangeSocketClient`, `IExchangeOrderBookFactory` and for all exchanges the `I[ExchangeName]RestClient`, `I[ExchangeName]SocketClient` and `I[ExchangeName]OrderBookFactory` types
services.AddCryptoClients();

Configuration

Clients can be configured when doing the dependency injection registration, or when constructing the clients. Configuration can be done for all exchanges/clients, can be set per exchange or a combination:

builder.Services.AddCryptoClients(globalOptions =>
{
    // Global options apply to each exchange/client
    globalOptions.OutputOriginalData = true;
	// Set credentials for the different exchanges, will be applied to both REST and socket clients
    globalOptions.ApiCredentials = new CryptoClients.Net.Models.ExchangeCredentials
    {
        Binance = new ApiCredentials("BinanceKey", "BinanceSecret"),
        Kucoin = new KucoinApiCredentials("KucoinKey", "KucoinSecret", "KucoinPassphrase"),
        OKX = new OKXApiCredentials("OKXKey", "OKXSecret", "OKXPassphrase")
    };
},
bybitRestOptions: bybitOptions =>
{
    // Specify options specifically for a specific exchange and client, in this case the Bybit REST client
    bybitOptions.Environment = Bybit.Net.BybitEnvironment.Netherlands;
    bybitOptions.ApiCredentials = new ApiCredentials("BybitKey", "BybitSecret");
});

Using the client

There are multiple options for accessing exchange API's. Options 1 and 2 allow access to the full exchange API while option 3 uses a common interface which allows exchange agnostic requesting, but is therefor limited in functionality.
Option 3 is currently only supported for the Spot REST API's.

// Option 1
// Use exchange clients directly, full functionality
var kucoinClient1 = new KucoinRestClient();
var binanceClient1 = new BinanceRestClient();
var binanceResult1 = await binanceClient1.SpotApi.ExchangeData.GetTickerAsync("ETHUSDT");
var kucoinResult1 = await kucoinClient1.SpotApi.ExchangeData.GetTickerAsync("ETH-USDT");

// Option 2
// Use exchange client via ExchangeRestClient, full functionality
var restClient2 = new ExchangeRestClient();
var baseAsset2 = "ETH";
var quoteAsset2 = "USDT";
var binanceResult2 = await restClient2.Binance.SpotApi.ExchangeData.GetTickerAsync(restClient2.Binance.SpotApi.FormatSymbol(baseAsset2, quoteAsset2));
var kucoinResult2 = await restClient2.Kucoin.SpotApi.ExchangeData.GetTickerAsync(restClient2.Kucoin.SpotApi.FormatSymbol(baseAsset2, quoteAsset2));

// Option 3
// Use unified spot client via GetUnifiedSpotClient, most generic but only supports common functionality
var restClient3 = new ExchangeRestClient();
var baseAsset3 = "ETH";
var quoteAsset3 = "USDT";
var unifiedBinanceClient3 = restClient3.GetUnifiedSpotClient(Exchange.Binance);
var unifiedKucoinClient3 = restClient3.GetUnifiedSpotClient(Exchange.Kucoin);
var binanceResult3 = await unifiedBinanceClient3.GetTickerAsync(unifiedBinanceClient3.GetSymbolName(baseAsset3, quoteAsset3));
var kucoinResult3 = await unifiedKucoinClient3.GetTickerAsync(unifiedKucoinClient3.GetSymbolName(baseAsset3, quoteAsset3));

For information on the specific exchange clients, dependency injection, response processing and more see the CryptoExchange.Net documentation or have a look at the examples here. See the CryptoExchange.Net examples for client examples which also apply to CryptClients.Net

Supported Exchanges

The following API's are included in CryptoClients.Net:

Exchange Repository Nuget
Binance JKorf/Binance.Net Nuget version
BingX JKorf/BingX.Net Nuget version
Bitfinex JKorf/Bitfinex.Net Nuget version
Bitget JKorf/Bitget.Net Nuget version
Bybit JKorf/Bybit.Net Nuget version
CoinEx JKorf/CoinEx.Net Nuget version
CoinGecko JKorf/CoinGecko.Net Nuget version
Gate.io JKorf/GateIo.Net Nuget version
Huobi/HTX JKorf/Huobi.Net Nuget version
Kraken JKorf/Kraken.Net Nuget version
Kucoin JKorf/Kucoin.Net Nuget version
Mexc JKorf/Mexc.Net Nuget version
OKX JKorf/OKX.Net Nuget version

Discord

Nuget version
A Discord server is available here. Feel free to join for discussion and/or questions around the CryptoExchange.Net and implementation libraries.

Support the project

I develop and maintain this package on my own for free in my spare time, any support is greatly appreciated.

Make a one time donation in a crypto currency of your choice. If you prefer to donate a currency not listed here please contact me.

Btc: bc1q277a5n54s2l2mzlu778ef7lpkwhjhyvghuv8qf
Eth: 0xcb1b63aCF9fef2755eBf4a0506250074496Ad5b7
USDT (TRX) TKigKeJPXZYyMVDgMyXxMf17MWYia92Rjd

Alternatively, sponsor me on Github using Github Sponsors.

Release notes

  • Version 1.6.0 - 03 Jul 2024

    • Updated CryptoExchange.Net referenced version to 7.8.0
      • Updated single endpoint limit configuration
      • Added LongConverter for nullable longs
      • Updated SystemTextJsonComparer logic
      • Fixed request ids not matching in logging
      • Added nullable int converter for System.Text.Json
      • Small fixes in tests
    • Updated Binance to 9.11.1
      • Updated ratelimiting for per-endpoint limits
    • Updated BingX to 1.5.0
      • Added TakeProfit/StopLoss parameters to perpetual futures order endpoints
      • Added rate limiting ratelimiting implementation
      • Updated BingXPosition model
    • Updated Bitfinex to 7.4.3
      • Fixed SpotApi.Account.GetMovementsDetailsAsync deserialization
      • Fixed SpotApi.SubscribeToDerivativesUpdatesAsync subscription
      • Fixed funding info subscription
    • Updated Bitget to 1.6.1
      • Updated ratelimiting for per-endpoint limits
      • Fixed V1 socket subscriptions
      • Fixed FuturesApiV2.Trading.GetOpenOrdersAsync deserialization
      • Updated V2 websocket kline interval Enum values
    • Updated Bybit to 3.10.3
      • Added Turkey environment
      • Added prelisting properties to V5 linear/inverse tickers and symbols response models
      • Fixed OrderBook model deserialization when updateId is too large for integer
    • Updated CoinEx to 7.2.1
      • Added FuturesApi.ExchangeData.GetPremiumIndexPriceHistoryAsync endpoint
    • Updated CoinGecko to 2.2.10
    • Updated GateIo to 1.2.1
      • Updated ratelimiting for per-endpoint limits
    • Updated Huobi to 5.4.1
    • Updated Kraken to 4.8.1
      • Updated KrakenAllocatedAmount model
    • Updated Kucoin to 5.8.3
      • Fixed incorrect response mapping SpotApi.HfTrading.PlaceMultipleOrdersAsync
      • Fixed CancelAfter parameter on SpotApi.HfTrading.PlaceMultipleOrdersAsync endpoint
      • Removed symbol base parameter from SpotApi.HfTrading.PlaceMultipleOrdersAsync as its not needed
    • Updated Mexc to 1.4.1
    • Updated OKX to 2.0.0
      • Added client side rate limiting
      • Added Trading.CancelAllAfterAsync endpoint
      • Updated json serializer from Newtonsoft.Json to System.Text.Json
      • Updated request sending to new CryptoExchange.Net implementation
      • Updated all enum conversions to use new EnumConverter
      • Updated websocket kline subscriptions models to IEnumerable
      • Updated AccountBillSubType enum values
      • Updated AccountBillType enum values
      • Updated FundingBillType enum values
      • Updated InstrumentAlias enum values
      • Updated various response models
      • Updated response checking from every endpoint to central method
      • Renamed all enums, OKX prefix removed. For example OKXOrderSide is now OrderSide
      • Renamed OrderType.MarketOrder to OrderType.Market
      • Renamed OrderType.LimitOrder to OrderType.Limit
      • Renamed Candlestick references to Kline
      • Renamed OKXPeriod to KlineInterval
      • Renamed Account.GetAccountPositionsAsync to GetPositionsAsync
      • Renamed Account.GetAccountPositionHistoryAsync to GetPositionHistoryAsync
      • Renamed Account.GetAccountPositionRiskAsync to GetPositionRiskAsync
      • Renamed Account.SetAccountPositionModeAsync to SetPositionModeAsync
      • Renamed Account.GetAccountLeverageAsync to GetLeverageAsync
      • Renamed Account.SetAccountLeverageAsync to SetLeverageAsync
      • Renamed Account.GetLightningWithdrawalsAsync to GetLightningWithdrawalAsync
      • Renamed ExchangeData.GetRubik* to GetTradeStats*
      • Cleanup unnused types
  • Version 1.5.0 - 25 Jun 2024

    • Updated CryptoExchange.Net referenced version to 7.7.2

      • Caching support
        • Caching is supported for GET requests within a certain time frame
        • Enable caching by setting CachingEnabled to true in the client options
        • Added DataSource to CallResult object
      • Dedicated websocket connection
        • Added functionality for always having a connection open which can then be used for order operations
        • This eliminates the initial connection time for the first request
        • WebSocket connection can be prepared by calling PrepareConnectionsAsync on the Api client, for example await binanceSocketClient.SpotApi.PrepareConnectionsAsync(). This is only needed initially; it will be reconnected when connection is lost.
      • Added CancellationToken support for websocket queries
      • Added SocketConnection parameter to SocketApiClient.GetAuthenticationRequest method
      • Added ObjectStringConverter base converter for deserializing nested json strings
      • Fixed websocket issue with ratelimiting and reconnecting interaction
      • Fixed rate limiting issue with sub-millisecond delays
      • Fixed websocket connection will now close if authentication fails because of not set credentials
      • Fixed ratelimiting issue possibly creating negative delays
      • Updated websocket reconnection handling and options, added backoff policy
      • Removed check for confirmed subscription as data often is pushed before the subscription is confirmed
    • Updated Binance to 9.11.0

      • Added dedicated connection configuration; a websocket connection can now be established before making the first request by calling binanceSocketClient.SpotApi.PrepareConnectionsAsync();
      • Added CancellationToken optional parameter to websocket requests
      • Updated response models from classes to records
    • Updated BingX to 1.3.2

    • Updated Bitfinex to 7.4.1

      • Updated response models from classes to records
      • Fixed exception during order status parsing
      • Fixed SpotApi.ExchangeData.GetLiquidationsAsync deserializations
    • Updated Bitget to 1.5.1

      • Added V2 SpotApi and V2 Futures API implementation
    • Updated Bybit to 3.10.1

      • Added V5 websocket order placement API
      • Updated response models from classes to records
      • Added and updated DCP endpoints end subscription
      • Added dedicated connection configuration; a websocket connection can now be established before making the first request by calling bybitSocketClient.V5PrivateApi.PrepareConnectionsAsync();
      • Fixed deserialization issue BybitPosition model
    • Updated CoinEx to 7.2.0

      • Updated response models from classes to records
    • Updated CoinGecko to 2.2.9

    • Updated GateIo to 1.2.0

      • Added dedicated connection configuration; a websocket connection can now be established before making the first request by calling gateIoSocketClient.SpotApi.PrepareConnectionsAsync();
      • Added SpotApi.Account.GetGTDeductionStatusAsync endpoint
      • Added SpotApi.Account.SetGTDeductionStatusAsync endpoint
    • Updated Huobi to 5.4.0

      • Updated response models from classes to records
    • Updated Kraken to 4.8.0

      • Updated response models from classes to records
      • Added CancellationToken optional parameter to websocket requests
    • Updated Kucoin to 5.8.0

      • Added missing HF/ProAccount endpoints
      • Renamed ProAccount SpotApi topic to HFTrading
      • Added FuturesApi.Account.GetPositionHistoryAsync endpoint Added FuturesApi.Account.GetTradingFeeAsync endpoint
      • Added SpotApi.SubscribeToIsolatedMarginPositionUpdatesAsync subscription
      • Added SpotApi.Margin.GetCrossMarginSymbolsAsync endpoint
      • Added SpotApi.Margin.SetLeverageMultiplierAsync
      • Added SpotApi.HfTrading.GetMarginSymbolsWithOpenOrdersAsync endpoint
      • Updated response models from classes to records
    • Updated Mexc to 1.4.0

      • Added websocket connection ratelimit
      • Updated SpotApi.Account.WithdrawAsync parameters and SpotApi.Account.GetUserAssetsAsync response
      • Updated response models from classes to records
    • Updated OKX to 1.11.1

      • Added CancellationToken optional parameter to websocket requests
      • Added dedicated connection configuration; a websocket connection can now be established before making the first request by calling okxSocketClient.UnifiedApi.PrepareConnectionsAsync();
      • Fixed deserialization issue in OkxTicker
      • Fixed deserialization issue in SetLeverage
  • Version 1.3.1 - 17 Jun 2024

    • Updated GateIo to 1.0.1
      • Fixed startTime/endTime filtering on multiple endpoints
    • Updated BingX to 1.3.1
      • Fixed bingXClient.PerpetualFuturesApi.ExchangeData.GetContractsAsync response parsing by updating Status mapping
    • Updated OKX to 1.10.1
      • Fixed deserialization issue in market sell websocket order updates
  • Version 1.3.0 - 12 Jun 2024

    • Added Gate.io implementation
    • Updated CryptoExchange.Net referenced version to 7.6.0
      • Added support for specifying seperate uri and body parameters
      • Added support for different message and handling generic types on socket queries
      • Added support for PATCH http method requests
      • Added support for setting http request body to a specific type directly
      • Split DataEvent.Topic into StreamId and Symbol properties
      • Added support for negative time values parsing
      • Added some helper methods for converting DataEvent to CallResult
      • Added support for GZip/Deflate automatic decompressing in the default HttpClient
      • Updated some testing methods
    • Updated Binance to 9.10.0
      • Added new SpotApi.Trading.PlaceOtoOrderListAsync and SpotApi.Trading.PlaceOtocoOrderListAsync endpoints
      • Fixed GetProductsAsync endpoints by allowing automatic decompression
    • Updated Bitfinex to 7.3.0
    • Updated BingX to 1.3.0
    • Updated Bitget to 1.4.0
    • Updated Bybit to 3.9.0
      • Added socketClient.V5PrivateApi.SubscribeToMinimalUserTradeUpdatesAsync private subscription
    • Updated CoinEx to 7.1.0
    • Updated CoinGecko to 2.2.8
    • Updated Huobi to 5.3.0
    • Updated Kraken to 4.7.0
      • Fix Asset not set on response model in SpotApi.Account.GetAvailableBalancesAsync
    • Updated Kucoin to 5.6.0
    • Updated OKX to 1.10.0
  • Version 1.2.0 - 02 Jun 2024

    • Added missing Huobi API to IExchangeRestClient interface
    • Updated Binance to 9.9.8
      • Added SpotApi.Account.GetAccountVipLevelAndStatusAsync endpoint
      • Added UsdFuturesApi.Account.GetBnbBurnStatusAsync and UsdFuturesApi.Account.SetBnbBurnStatusAsync endpoints
      • Added missing GoodTillDate TimeInForce conversion
    • Updated BingX to 1.2.0
      • Added PerpetualFuturesApi.SubscribeToPartialOrderBookUpdatesAsync, PerpetualFuturesApi.SubscribeToKlineUpdatesAsync and PerpetualFuturesApi.SubscribeToTickerUpdatesAsync subscriptions for all symbols
      • Added PerpetualFuturesApi.Trading.GetPositionAndMarginInfoAsync endpoint
      • Added optional symbol parameter PerpetualFuturesApi.ExchangeData.GetContractsAsync
      • Updated BingXWithdrawal response model
      • Updated BingXPosition response model
    • Updated Bitget to 1.3.8
      • Added simulated product types to BitgetInstrumentType enum
    • Updated Bybit to 3.8.9
      • Added missing StopLossTakeProfitMode enum value
      • Added Status property to V5Api.Account.CreateUniversalTransfer response model
      • Added cursor parameter to V5Api.ExchangeData.GetRiskLimitAsync
    • Updated Kraken to 4.6.6
      • Added margin parameter to websocket SpotApi.PlaceOrderAsync
      • Added countryCode parameter to SpotApi.ExchangeData.GetSymbolsAsync
    • Updated Mexc to 1.2.5
      • Added SpotApi.Account.GetTradeFeeAsync endpoint
    • Updated OKX to 1.9.0
      • Added UnifiedApi.Account.GetAssetValuationAsync endpoint
      • Renamed BestAskSize to BestAskQuantity in OKXTicker model
      • Fixed OKXSocketOptions not using OKXApiCredentials
  • Version 1.1.0

    • Added support for GlobalExchangeOptions when constructing clients without dependency injection
    • Updated CryptoExchange.Net to 7.5.2
      • Added testing implementations
      • Small refactor AuthenticationProvider to allow better testing
      • Change result of MessageAccessor.Read methods to CallResult so error can be returned
      • Moved some DateTimeConverter logic to seperate methods to allow access from outside converters
      • Fixed SetApiCredentials not correctly being used by rate limiter causing exception
    • Updated Binance to 9.9.7
      • Updated multiple response models
      • Fixed multiple bugs after new, more thorough unit testing implementation
      • Removed duplicate SpotApi.Trading.ConvertTransferAsync and GetConvertTransferHistoryAsync endpoints
      • Updated CoinFuturesApi.Account.GetBracketsAsync to V2 endpoint
      • Updated CoinFuturesApi.Trading.PlaceMultipleOrdersAsync orders parameter from array to IEnumerable
    • Updated BingX to 1.1.1
      • Removed need for API credentials in certain ExchangeData calls
      • Renamed PerpetualFutures.Trading.GetClosedOrderAsync to GetClosedOrdersAsync
      • Changed PerpetualFutures.SubscribeToUserDataUpdatesAsync handlers to be nullable
      • Fixed SpotApi.SubscribeToBalanceUpdatesAsync update handling
      • Various small fixes
    • Updated Bitfinex to 7.2.8
    • Updated Bitget to 1.3.7
    • Updated Bybit to 3.8.8
      • Split PurchaseLeverageTokenAsync and RedeemLeverageTokenAsync response models
      • Updated various response models
      • Fixed PurchaseLeverageTokenAsync, RedeemLeverageTokenAsync and GetLeverageTokenOrderHistoryAsync request path
    • Updated CoinEx to 7.0.5
    • Updated CoinGecko to 2.2.7
    • Updated Huobi to 5.2.8
    • Updated Kraken to 4.6.5
      • Updated various models
      • Fixed deserialization issue in SpotApi.ExchangeData.GetSymbolsAsync endpoint
    • Updated Kucoin to 5.5.5
      • Added SpotApi.Trading.GetOcoOrderByClientOrderIdAsync to interface
      • Fixed universal transfer endpoint
      • Fixed FuturesApi.SubscribeToStopOrderUpdatesAsync deserialization
      • Updated various response models
    • Updated Mexc to 1.2.4
    • Updated OKX to 1.8.4
  • Version 1.0.0 - 28 Apr 2024

    • Initial version
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.5.0 120 11/7/2024
2.4.0 118 10/28/2024
2.3.0 110 10/23/2024
2.2.1 128 10/14/2024
2.2.0 79 10/14/2024
2.1.0 134 10/8/2024
2.0.0 262 9/27/2024
1.11.0 200 8/19/2024
1.10.0 184 8/9/2024
1.9.0 93 8/2/2024
1.8.0 78 7/29/2024
1.6.0 343 7/3/2024
1.5.0 121 6/25/2024
1.3.1 150 6/17/2024
1.3.0 113 6/12/2024
1.2.0 175 6/2/2024
1.1.0 240 5/7/2024
1.0.0 183 4/28/2024