Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/dougdellolio/coinbasepro-csharp
The unofficial .NET/C# client library for the Coinbase Pro/GDAX API
https://github.com/dougdellolio/coinbasepro-csharp
api bitcoin coinbase coinbasepro coinbasepro-api csharp-client ethereum gdax gdax-api library wrapper wrapper-api
Last synced: about 1 month ago
JSON representation
The unofficial .NET/C# client library for the Coinbase Pro/GDAX API
- Host: GitHub
- URL: https://github.com/dougdellolio/coinbasepro-csharp
- Owner: dougdellolio
- License: mit
- Created: 2017-11-23T03:03:38.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2022-12-08T03:43:33.000Z (about 2 years ago)
- Last Synced: 2024-11-02T23:07:42.079Z (about 2 months ago)
- Topics: api, bitcoin, coinbase, coinbasepro, coinbasepro-api, csharp-client, ethereum, gdax, gdax-api, library, wrapper, wrapper-api
- Language: C#
- Homepage:
- Size: 565 KB
- Stars: 192
- Watchers: 20
- Forks: 90
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
coinbasepro-csharp
https://docs.pro.coinbase.com/
[![Build status](https://ci.appveyor.com/api/projects/status/mdn0y9cu7dqsambv/branch/master?svg=true)](https://ci.appveyor.com/project/dougdellolio/coinbasepro-csharp/branch/master)
[![NuGet](https://img.shields.io/nuget/v/GDAX.Api.ClientLibrary.svg)](https://www.nuget.org/packages/GDAX.Api.ClientLibrary/)
[![NuGet](https://img.shields.io/nuget/dt/GDAX.Api.ClientLibrary.svg)](https://www.nuget.org/packages/GDAX.Api.ClientLibrary/)How to Install
`PM> Install-Package GDAX.Api.ClientLibrary`
How to Use
Generate your key at https://pro.coinbase.com/profile/api
```csharp
//create an authenticator with your apiKey, apiSecret and passphrase
var authenticator = new Authenticator("", "", "");//create the CoinbasePro client
var coinbaseProClient = new CoinbasePro.CoinbaseProClient(authenticator);//use one of the services
var allAccounts = await coinbaseProClient.AccountsService.GetAllAccountsAsync();
```What services are provided?
###### Accounts ######
- GetAllAccountsAsync() - get all accounts
- GetAccountByIdAsync(id) - get account by id
- GetAccountHistoryAsync(id, limit, numberOfPages) - get account history (paged response)
- GetAccountHoldsAsync(id, limit, numberOfPages) - get all holds placed on an account (paged response)###### CoinbaseAccounts ######
- GetAllAccountsAsync() - get all coinbase accounts###### Orders ######
- PlaceMarketOrderAsync(orderSide, productPair, amount, MarketOrderAmountType, clientOId) - place market order by size or funds
- PlaceLimitOrderAsync(orderSide, productPair, size, price, timeInForce, postOnly, clientOId) - place limit order with time in force
- PlaceLimitOrderAsync(orderSide, productPair, size, price, cancelAfter, postOnly, clientOId) - place limit order with cancel after date
- PlaceStopOrderAsync(orderSide, productPair, size, limitPrice, stopPrice, clientOId) - place stop order with stop and limit price
- CancelAllOrdersAsync() - cancel all orders
- CancelOrderByIdAsync(id) - cancel order by id
- GetAllOrdersAsync(orderStatus, limit, numberOfPages) - get all, active or pending orders (paged response)
- GetAllOrdersAsync(orderStatus[], limit, numberOfPages) - get orders by multiple statuses (paged response)
- GetOrderByIdAsync(id) - get order by id###### Payments ######
- GetAllPaymentMethodsAsync() - get all payment methods###### Withdrawals ######
- WithdrawFundsAsync(paymentMethodId, amount, currency) - withdraw funds to a payment method
- WithdrawToCoinbaseAsync(coinbaseAccountId, amount, currency) - withdraw funds to a coinbase account
- WithdrawToCryptoAsync(cryptoAddress, amount, currency, destinationTag) - withdraw funds to a crypto address
- GetAllWithdrawals(profileId, before, after, limit) - list of withdrawals from the profile of the API key, in descending order by created time
- GetWithdrawalById(transferId) - get information on a single withdrawal
- GetFeeEstimateAsync(currency, cryptoAddress) - gets the network fee estimate when sending to the given address###### Deposits ######
- GetAllDeposits(profileId, before, after, limit) - list of deposits from the profile of the API key, in descending order by created time
- GetDepositById(transferId) - get information on a single deposit.
- DepositFundsAsync(paymentMethodId, amount, currency) - deposits funds from a payment method
- DepositCoinbaseFundsAsync(coinbaseAccountId, amount, currency) - deposits funds from a coinbase account
- GenerateCryptoDepositAddressAsync(string coinbaseAccountId) - generate an address for crypto deposits###### Products ######
- GetAllProductsAsync() - get a list of available currency pairs for trading
- GetSingleProductAsync(productType) - get market data for a specific currency pair
- GetProductOrderBookAsync(productType, productLevel) - get a list of open orders for a product (specify level 1, 2, or 3)
- GetProductTickerAsync(productType) - get information about the last trade (tick), best bid/ask and 24h volume
- GetTradesAsync(productType, limit, numberOfPages) - get latest trades for a product (paged response)
- GetProductStatsAsync(productType) - get 24 hour stats for a product
- GetHistoricRatesAsync(productPair, start, end, granularity) - get historic rates for a product, auto batches requests to pull complete date range###### Currencies ######
- GetAllCurrenciesAsync() - gets a list of known currencies
- GetCurrencyByIdAsync(currency) - list the currency for the specified id###### Fills ######
- GetFillsByOrderIdAsync(orderId, limit, numberOfPages) - gets a list of all recent fills by order id (paged response)
- GetFillsByProductIdAsync(productType, limit, numberOfPages) - gets a list of all recent fills by product type (paged response)###### Limits ######
- GetCurrentExchangeLimitsAsync() - returns information on your payment method transfer limits, as well as buy/sell limits per currency###### Fundings ######
- GetAllFundingsAsync(limit, fundingStatus, numberOfPages) - gets a list of all orders placed with a margin profile that draws funding (paged response)###### Reports ######
- CreateNewAccountReportAsync(startDate, endDate, accountId, productType, email, fileFormat) - generate new account report
- CreateNewFillsReportAsync(startDate, endDate, productType, accountId, email, fileFormat) - generate new fills report
- GetReportStatus(id) - gets report status###### User Account ######
- GetTrailingVolumeAsync() - get 30-day trailing volume for all products###### Fees ######
- GetCurrentFeesAsync() - get your current maker & taker fee rates, as well as your 30-day trailing volume###### Stablecoin Conversions ######
- CreateConversion(currencyFrom, currencyTo, amount) - convert bank-based dollars to blockchain-based digital dollars###### Profiles ######
- GetAllProfilesAsync() - list your profiles
- GetProfileByIdAsync(id) - get a single profile by profile id
- CreateProfileTransferAsync(from, to, currency, amount) - transfer funds from API key’s profile to another user owned profileWebsocket Feed
How to use with authentication
```csharp
//create an authenticator with your apiKey, apiSecret and passphrase
var authenticator = new Authenticator("", "", "");//create the CoinbasePro client
var coinbaseProClient = new CoinbasePro.CoinbaseProClient(authenticator);//use the websocket feed
var productTypes = new List() { "BTC-EUR", "BTC-USD" };
var channels = new List() { ChannelType.Full, ChannelType.User } // When not providing any channels, the socket will subscribe to all channelsvar webSocket = coinbaseProClient.WebSocket;
webSocket.Start(productTypes, channels);// EventHandler for the heartbeat response type
webSocket.OnHeartbeatReceived += WebSocket_OnHeartbeatReceived;private static void WebSocket_OnHeartbeatReceived(object sender, WebfeedEventArgs e)
{
throw new NotImplementedException();
}
```How to use without authentication
```csharp
//create the CoinbasePro client without an authenticator
var coinbaseProClient = new CoinbasePro.CoinbaseProClient();//use the websocket feed
var productTypes = new List() { "BTC-EUR", "BTC-USD" };
var channels = new List() { ChannelType.Full, ChannelType.User }; // When not providing any channels, the socket will subscribe to all channelsvar webSocket = coinbaseProClient.WebSocket;
webSocket.Start(productTypes, channels);// EventHandler for the heartbeat response type
webSocket.OnHeartbeatReceived += WebSocket_OnHeartbeatReceived;private static void WebSocket_OnHeartbeatReceived(object sender, WebfeedEventArgs e)
{
throw new NotImplementedException();
}
```Available functions
These are the starting and stopping methods:- Start(productTypes, channelTypes, autoSendPingInterval) - Starts the websocket feed based on product(s) and channel(s). Optionally set an auto send ping interval to prevent websocket from closing if idle more than 1 minute
- Stop() - Stops the websocket feed
- ChangeChannels(productTypes) - Change channel subscriptions to the current websocketThe following methods are EventHandlers:
- OnTickerReceived - EventHandler for data with response type `ticker`
- OnSnapShotReceived - EventHandler for data with response type `snapshot`
- OnLevel2UpdateReceived - EventHandler for data with response type `level2`
- OnHeartbeatReceived - EventHandler for data with response type `heartbeat`
- OnReceivedReceived - EventHandler for data with response type `received`
- OnOpenReceived - EventHandler for data with response type `open`
- OnStatusReceived - EventHandler for data with response type `status`
- OnDoneReceived - EventHandler for data with response type `done`
- OnMatchReceived - EventHandler for data with response type `match`
- OnChangeReceived - EventHandler for data with response type `change`
- OnLastMatchReceived - EventHandler for data with response type `last match`
- OnErrorReceived - EventHandler for data with response type `error`
- OnActivateReceived - Eventhandler for data with response type `activate`
- OnWebSocketError - EventHandler for web socket error
- OnWebSocketClose- EventHandler for web socket closing
- OnWebSocketOpenAndSubscribed - EventHandler for web socket being opened and subscribedSandbox Support
Generate your key at https://public.sandbox.pro.coinbase.com/profile/api
```csharp
//create an authenticator with your apiKey, signature and passphrase
var authenticator = new Authenticator("", "", "");//create the CoinbasePro client and set the sandbox flag to true
var coinbaseProClient = new CoinbasePro.CoinbaseProClient(authenticator, true);//use one of the services
var response = await coinbaseProClient.OrdersService.PlaceMarketOrderAsync(OrderSide.Buy, "BTC-USD", 1);
```Examples
###### Place a market order ######
```csharp
//by size
var response = await coinbaseProClient.OrdersService.PlaceMarketOrderAsync(OrderSide.Buy, "BTC-USD", 1);//by funds
var response = await coinbaseProClient.OrdersService.PlaceMarketOrderAsync(OrderSide.Buy, "BTC-USD", 50, MarketOrderAmountType.Funds);
```###### Place a limit order ######
```csharp
var response = await coinbaseProClient.OrdersService.PlaceLimitOrderAsync(OrderSide.Sell, "ETH-USD", 1, 400.0M);
```###### Cancel all open or un-settled orders ######
```csharp
var response = await coinbaseProClient.OrdersService.CancelAllOrdersAsync();
```###### Getting account history (paged response) ######
```csharp
//the limit is the amount of items per page - in this case it would be 2 items (default is 100)
//you can also specify the number of pages to request - in this case it would be the first 5 pages (default is 0 which will request all pages)
//some routes may require the number of pages to be specified as there are rate limits
var accountHistoryResponse = await coinbaseProClient.AccountsService.GetAccountHistoryAsync("ef56a389", 2, 5);//retrieve by page number - this would return the first page of the response (latest first)
var firstPage = accountHistoryResponse.ToList()[0];//get the first item on the page
var firstAccountHistoryOnFirstPage = firstPage.ToList()[0];//get the second item on the page
var secondAccountHistoryOnFirstPage = firstPage.ToList()[1];
```###### Generate and email a report ######
```csharp
var reportDateFrom = new DateTime(2017, 1, 1);
var reportDateTo = new DateTime(2018, 1, 1);
var accountId = "29318029382";//generate and email accounts report csv
var accountResponse = coinbaseProClient.ReportsService.CreateNewAccountReportAsync(reportDateFrom, reportDateTo, accountId, "BTC-USD", "[email protected]", FileFormat.Csv);//generate and email fills report pdf
var fillsResponse = coinbaseProClient.ReportsService.CreateNewFillsReportAsync(reportDateFrom, reportDateTo, "BTC-USD", accountId, "[email protected]", FileFormat.Pdf);
```###### Overriding the HttpClient behavior ######
You can gain greater control of the http requests by implementing CoinbasePro.HttpClient.IHttpClient and passing that into the CoinbasePro constructor.
```csharp
var myWay = new MyNamespace.MyHttpClient();//create an authenticator with your apiKey, signature and passphrase
var authenticator = new Authenticator("", "", "");//create the CoinbasePro client and set the httpClient to my way of behaving
var coinbaseProClient = new CoinbasePro.CoinbaseProClient(authenticator, myWay);
```Logging
Logging is provided by Serilog - https://github.com/serilog/serilog
```csharp
//configure the application logging to output to console and a file called log.txt
Serilog.Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("log.txt",
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true)
.CreateLogger();//create an authenticator with your apiKey, signature and passphrase
var authenticator = new Authenticator("", "", "");//create the CoinbasePro client
var coinbaseProClient = new CoinbasePro.CoinbaseProClient(authenticator);//use one of the services
var response = await coinbaseProClient.OrdersService.PlaceMarketOrderAsync(OrderSide.Buy, "BTC-USD", 1);
```Contributors
Thanks for contributing!
- @dgelineau
- @quin810
- @DontFretBrett
- @chrisw000
- @confessore
- @sotam
- @BradForsythe
- @zaccharles
- @BraveSirAndrew
- @alexhiggins732
- @kudobyte
- @mailgerigk
- @joshua211
- @nscheibeBugs or questions?
Please open an issue for any bugs or questions