Skip to main content

WebSocket Authentication

HMAC Authentication

info

Endpoint: wss://ws-feed-pro.btcturk.com

  • The WebSocket feed provides real-time market data updates for orders and trades.
  • The WebSocket feed uses a bi-directional protocol, which encodes all messages as JSON objects. All messages have a type attribute that can be used to handle the message appropriately.
  • Please note that new message types can be added at any point in time. Clients are expected to ignore messages they do not support.

HMAC Login Mechanism for WebSocket

  • From BtcTurk | Kripto go to ACCOUNT > API Access
  • In the form select WebSocket, enter your IP address and submit.
  • This action will create public key and a private key to achieve WebSocket login.
success

For API Key instructions visit API Access Permissions

Code Example

 // You can download ApiClient .net core complete library from github https://github.com/BTCTrader/broker-api-csharp-v2

private static async Task HmacTest()
{
Uri _uri = new Uri("wss://ws-feed-pro.btcturk.com");
ClientWebSocket client = new ClientWebSocket();
await client.ConnectAsync(_uri, CancellationToken.None);

string publicKey = "YOUR_PUBLIC_KEY";
string privateKey = "YOUR_PRIVATE_KEY";
long nonce = 3000;
string baseString = $"{publicKey}{nonce}";
string signature = ComputeHash(privateKey, baseString);
long timestamp = ToUnixTime(DateTime.UtcNow);
object[] hmacMessageObject = { 114, new { type = 114, publicKey = publicKey, timestamp = timestamp, nonce = nonce, signature = signature } };
string message = JsonSerializer.Serialize(hmacMessageObject);

await client.SendAsync(buffer: new ArraySegment<byte>(array: Encoding.UTF8.GetBytes(message),
offset: 0,
count: message.Length),
messageType: WebSocketMessageType.Text,
endOfMessage: true,
cancellationToken: CancellationToken.None);
}

private static string ComputeHash(string privateKey, string baseString)
{
var key = Convert.FromBase64String(privateKey);
string hashString;

using (var hmac = new HMACSHA256(key))
{
var hash = hmac.ComputeHash(Encoding.UTF8.GetBytes(baseString));
hashString = Convert.ToBase64String(hash);
}

return hashString;
}

private static long ToUnixTime(DateTime date)
{
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return Convert.ToInt64((date - epoch).TotalMilliseconds);
}