Інтеграція API Kraken у мобільні крипто-додатки
Kraken виділяється серед бирж однією з найстрогіших систем підпису серед публічних крипто-API. Алгоритм HMAC-SHA512 з подвійним хешуванням відлякує розробників, звичних до простого SHA256. На практиці реалізація займає пів дня, але нюансів хватає.
Механізм підпису: SHA256 + SHA512 в ланцюзі
Kraken Private API (https://api.kraken.com/0/private/) потребує:
-
nonce— монотонно зростаюче ціле число. Kraken рекомендує Unix timestamp у мілісекундах, але жорстко не фіксує формат, лише щоб кожне наступне було більше попереднього. -
API-Sign: Base64(HMAC-SHA512(urlPath + SHA256(nonce + postData), Base64Decode(privateKey)))
Приватний ключ у Kraken — Base64-encoded бінарний секрет, не ASCII-рядок. Декодуйте в байти перед використанням як ключ для HMAC. Типова помилка на iOS: передати Data(privateKey.utf8) замість Data(base64Encoded: privateKey)! — підпис формується, але завжди невалідна.
postData — urlencoded рядок параметрів включаючи nonce. Порядок: nonce першим не обов'язковий, але якщо його нема — EAPI:Invalid nonce.
WebSocket API v2
Kraken перейшов на WebSocket API v2 у 2023 році. Стара v1 (wss://ws.kraken.com) ще працює, але нові фічі лише в v2 (wss://ws.kraken.com/v2). Формат повідомлень змінився — в v2 використовується структура {"method": "subscribe", "params": {...}} замість {"event": "subscribe", ...} з v1.
Авторизація приватного каналу: отримуємо тимчасовий токен через REST POST /0/private/GetWebSocketsToken, передаємо в params.token при підписці на executions (ордери) або balances. Токен живе 15 хвилин — потрібен механізм оновлення. Без оновлення при довгій сесії користувач втрачає оновлення ордерів без явної помилки (канал просто перестає надсилати);.
Особливість імен активів
Kraken використовує нестандартні імена: XBT замість BTC, XDG замість DOGE. Пари називаються XXBTZUSD, XETHZUSD (з подвійним префіксом для ISO-валют). У WebSocket v2 імена нормалізовані (BTC/USD), у REST — ні. При маппінгу між UI та API потрібна таблиця алиасів, інакше запит AssetPairs повертає пару, яку користувач не впізнає.
Rate limiting
Kraken рахує «counter» навантаження — кожен запит додає очки (від 1 до 2 залежно від endpoint), кожні кілька секунд очки убувають. При перевищенні лімітґ (EAPI:Rate limit exceeded) IP блокується. Немає заголовків з залишком лімітґ, як у Binance. Потрібно самостійно вести щітчик або використовувати адаптивний інтервал запитів.
Для мобільного: рекомендуємо не поллити баланс частіше раза в 10 секунд, ордерну історію — раз в 30 секунд, всі маркет-дані отримувати через WebSocket.
Стек та терміни
Для нативного iOS: CryptoKit для HMAC-SHA512 (доступен з iOS 13), URLSession для REST та URLSessionWebSocketTask для WebSocket. Combine Publisher для потока подій ордерів.
Для Android: javax.crypto.Mac з HmacSHA512, OkHttp WebSocket client. Kotlin Coroutines + Flow для реактивного оновлення UI.
Інтеграція Kraken чуть складніша конкурентів через специфіку підпису та імен активів. Базова інтеграція (spot, без маржи) — 3–4 тижні. Futures API (futures.kraken.com) — окремий домен з іншою аутентифікацією, оцінюємо окремо.







