LATOKEN C# Client Library aims to help developers to integrate with the LATOKEN trading API. The WebSocket connection is based on the STOMP protocol. More details can be found here.
Please note that the library in Early Beta, and LATOKEN doesn't take any responsibility for the damages occurred while using this code. If you think something is broken or missing, please create an issue.
You can install this as a Nuget package: Latoken.Api.Client.Library 1.0.0
Alternatively, you can use the source code, but make sure you have installed these Nuget packages:
- Microsoft.Extensions.Logging Version: 5.0.0
- Newtonsoft.Json Version 12.0.3
- Websocket.Client Version: 4.3.35
Note that this library is not thread-safe. Don't attempt to send orders from multiple threads etc.
Get a list of all account balances
//Generate your public and private API keys on this page https://latoken.com/account/apikeys
ClientCredentials credentials = new ClientCredentials
{
ApiKey = "Your Public API Key",
ApiSecret = "Your Private API Key"
};
var latokenRestClient =
new LARestClient(credentials, new HttpClient() { BaseAddress = new Uri("https://api.latoken.com") });
List<Balance> balances = await latokenRestClient.GetBalances();
Placing a limit order
//Generate your public and private API keys on this page https://latoken.com/account/apikeys
ClientCredentials credentials = new ClientCredentials
{
ApiKey = "Your Public API Key",
ApiSecret = "Your Private API Key"
};
var latokenRestClient =
new LARestClient(credentials, new HttpClient() { BaseAddress = new Uri("https://api.latoken.com") });
//Getting UUID strings representing IDs of the corresponding currencies/assets
//You might want to cache this, since this is static data, and you don't need to fetch it each time
var freeCoin = (await latokenRestClient.GetCurrency("FREE")).Id;
var usdtCoin = (await latokenRestClient.GetCurrency("USDT")).Id;
//Consult https://api.latoken.com/doc/v2/#operation/placeOrder for possible field values
//Also, follow price and qty format as described on this page, use comma only to separate the decimal part
OrderCommand orderCommand = new OrderCommand
{
BaseCurrency = baseCurrency,
QuoteCurrency = quoteCurrency,
Side = "BUY",
Condition = "GTC",
Type = "LIMIT",
Quantity = "1.0",
Price = "1.0",
ClientOrderId = "C# Client Test",
Timestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds
};
OrderResponse result = await latokenRestClient.PlaceOrder(orderCommand);
Supported REST endpoints (LARestClient class)
Information about our REST API specification LATOKEN API v2 docs.
Method | Description | LATOKEN APIv2 Link |
---|---|---|
GetPairs |
Request list of all active trading pairs | getAvailablePairs |
GetPair |
Get active trading pair | Client library implementation |
GetCurrencies |
Get a list of active currencies | getMyOrdersByPair |
GetCurrency |
Get a currency by id or tag | getCurrencies |
GetBalances |
Request all account balances for a current user | getBalancesByUser |
GetBalanceByType |
Request specific account by currency and type | getBalancesByCurrency |
GetAvailablePairs |
Request list of all available trading pairs | getAvailablePairs |
GetAvailablePair |
Get available trading pair | Client library implementation |
GetOrders |
Get a list of private orders | getMyOrders |
GetOrdersPair |
Get a list of private orders on a traded pair | getMyOrdersByPair |
GetOrder |
Get a private order by id | getOrderById |
GetAllTrades |
Get public trade history for a given pair | getTradesByPair |
GetClientTrades |
Get private trade history | getTradesByTrader |
GetClientTradesPair |
Request trade history of authorized user for given pair | getTradesByAssetAndTrader |
PlaceOrder |
Request trade history of authorized user for given pair | getTradesByAssetAndTrader |
CancelOrder |
Cancel order by id | cancelOrder |
CancelAllOrders |
Cancel all orders for a given pair | cancelAllOrders |
GetOrderBook |
Get order book snapshot for a given pair | getOrderBook |
GetTickers |
Request tickers for all pairs | getAllTickers |
GetTicker |
Request ticker for pair | getTicker |
Get order book for FREE/USDT pair
ClientCredentials restCredentials = new ClientCredentials
{
Alias = "TestCSharpClient",
ApiKey = "Your Public API Key",
ApiSecret = "Your Private API Key"
};
var latokenRestClient =
new LARestClient(restCredentials, new HttpClient() { BaseAddress = new Uri("https://api.latoken.com") });
LatokenUser getUserResult = await latokenRestClient.GetUser();
ClientCredentials wsCredentials = new ClientCredentials
{
Alias = "TestCSharpClient",
ApiKey = "Your Public API Key",
ApiSecret = "Your Private API Key",
UserId = getUserResult.Id
};
var wsClient = new LAWsClient(wsCredentials, true);
wsClient.OnOpened += WSClient_OnOpened;
wsClient.OnClosed += WSClient_OnClosed;
wsClient.OnError += WSClient_OnError;
wsClient.Start();
await Task.Delay(15000);
//Getting UUID strings representing IDs of the corresponding currencies/assets
//You might want to cache this, since this is static data, and you don't need to fetch it each time
var freeCoin = (await latokenRestClient.GetCurrency("FREE")).Id;
var usdtCoin = (await latokenRestClient.GetCurrency("USDT")).Id;
wsClient.SubscribeOrderBookEvents(freeCoin, usdtCoin,
delegate (OrderBookChange orderBookChange, string baseId, string quoteId, DateTime dateTime) {
Console.WriteLine("Order book change {0}", orderBookChange);
});
private void WSClient_OnOpened()
{
//TODO: your implementation here
}
private void WSClient_OnClosed(WebSocketCloseStatus? status, string description)
{
//TODO: your implementation here
}
private void WSClient_OnError(string header, string body)
{
//TODO: your implementation here
}
Supported WebSockets endpoints (LAWsClient class)
Information about our WebSocket API specification LATOKEN API v2 docs.
Method | Description | LATOKEN APIv2 Link |
---|---|---|
SubscribeOrderBookEvents |
Subscribe for order book events for a pair | Books |
SubscribeOrderEvents |
Subscribe for private order events | Orders |
SubscribeMyTradeEvents |
Subscribe for private trade events | Trades |
SubscribeBalanceEvents |
Subscribe for balance on your accounts events | Accounts |