-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Здесь описаны особенности, которых нет в документации KuCoin API, или которые плохо раскрыты в ней.
[TOC]
Если Вы отправляете запрос, имеющий тело (например, выставляете ордер), то не забудьте указать заголовок Content-Length
, в который нужно вписать размер тела запроса в байтах. Если пропустить этот заголовок, то KuCoin будет думать, что тела запроса нет. Но, т.к. тело запроса нужно для подписи KC-API-SIGN
, то KuCoin будет возвращать ошибку, что у Вас неправильный KC-API-SIGN
.
У KuCoin есть разделение на несколько аккаунтов (счётов), под разные цели.
- Основной счет (Main Accout,
main
в API) - используется для депозита криптовалюты, снятия средств со счета, покупок с помощью кредита/дебита и маржинального кредитования. - Торговый счет (Trading Account,
trade
в API) - используется для торговли криптовалютой. - Маржинальный счет (Cross Margin Account) - используется для маржинального заимствования и торговли.
- Фьючерсный счет (Isolated Margin Account) - используется для торговли фьючерсами.
- Финансовый счет (Financial Account) - используется для ставок и финансового управления, с годовой доходностью до 20 %.
Для получения баланса удобно использовать два эндпоинта: [List Accounts](List Accounts - Список аккаунтов) и [Get an Account](Get an Account - информация об аккаунте)
Получить список баланса всех валют по всем аккаунтам, вместе с их id.
GET /api/v1/accounts
Параметры запроса:
Параметр | Тип | Описание |
---|---|---|
currency | String | Тикер криптовалюты (примеры: BTC , USDT , MANA ...) |
type | String | Тип аккаунта (main , trade , margin ) |
{
"code": "200000",
"data": [
{
"id": "5bd6e9286d99522a52e458de", // id аккаунта (счёта)
"currency": "BTC", // Тикер криптовалюты
"type": "main", // Тип аккаунта
"balance": "0.02023349", // Полный баланс (avalible + holds)
"available": "0.02023349", // Доступные средства (на них можно выставить ордер)
"holds": "0" // Заблокированные средства (например, в ордере)
},
{
"id": "5bd6e9286d99522a52e458df",
"currency": "USDT",
"type": "main",
"balance": "611.72436265",
"available": "611.72436265",
"holds": "0"
},
{
"id": "5bd6e9286d99522a52e487a4",
"currency": "BTC",
"type": "trade",
"balance": "0.004588",
"available": "0",
"holds": "0.004588"
},
{
"id": "5bd6e9286d99522a52e454b",
"currency": "USDT",
"type": "trade",
"balance": "0.28357853",
"available": "0.28357853",
"holds": "0"
}
]
}
Получить баланс аккаунта по его id.
GET /api/v1/accounts/{accountId}
GET /api/v1/accounts/5bd6e9286d99522a52e458de
Параметры запроса:
Параметр | Тип | Описание |
---|---|---|
accountId | String | id аккаунта (счёта) |
{
"code": "200000",
"data": {
"currency": "BTC", // Тикер криптовалюты
"balance": "0.02023349", // Полный баланс (avalible + holds)
"available": "0.02023349", // Доступные средства (на них можно выставить ордер)
"holds": "0" // Заблокированные средства (например, в ордере)
}
}
У KuCoin есть веб-сокеты с несколькими особенностями, которые не встречались на других биржах. А именно:
- Динамический эндпоинт веб-сокетов
- Токен, нужный для подключения к веб-сокету
- Клиент должен пинговать веб-сокет
Для подключения к публичному и к приватному веб-сокету нужно запросить данные через эндпоинт.
Для публичных веб-сокетов это /api/v1/bullet-public
.
Для приватных веб-сокетов это /api/v1/bullet-private
.
{
"code": "200000",
"data": {
"token": "2neAiuYvAU61ZDXANAGAsiL4-iAExhsBXZxftpOeh_55i3Ysy2q2LEsEWU64mdzUOPusi34M_wGoSf7iNyEWJ5Es6hC8cW1uNyUdELSkUKlNtT8FV-7ZmNiYB9J6i9GjsxUuhPw3BlrzazF6ghq4L9AYYIi9KubB5bcOOJFpfsI=.4B_50gn3tpPBinEg8J45lw==",
"instanceServers": [
{
"endpoint": "wss://ws-api.kucoin.com/endpoint",
"encrypt": true,
"protocol": "websocket",
"pingInterval": 18000,
"pingTimeout": 10000
}
]
}
}
Эндпоинт вебсокетов меняется время от времени (это не влияет на уже активные соединения), поэтому его нужно получать через REST API KuCoin.
Для подключения к веб-сокету нужно получить token
- это строка символов, которую выдает KuCoin. Её нужно запросить через REST API KuCoin. Если нужно подключаться и к публичным, и к приватным веб-сокетам, то нужно получить только приватный token
, и создать подключение к приватному веб-сокету. Через него можно подписываться как на публичные, так и на приватные потоки.
URL для подключения образуется по такому шаблону, он одинаковый для публичных и приватных веб-сокетов:
wss://{endpoint}?token={token}
{endpoint}
- вставить эндпоинт, полученный из bullet
{token}
- вставить токен, полученный из bullet
Для подписки на поток нужно послать JSON по веб-сокету :
{
"id": 1545910660739, // Уникальный id потока (задается Вами, можно просто 1, 2, 3, или использовать timestamp)
"type": "subscribe",
"topic": "/market/ticker:BTC-USDT,ETH-USDT", // Поток, на который подписываеся
"privateChannel": false, // Приватный канал или нет (если указать false для приватного, то сообщения не будут приходить, ошибки также не будет!)
"response": true // Должен ли сервер прислать информацию об успешной подписке
}
KuCoin требует, чтобы клиент пинговал его. То есть если Вы собираетесь подключиться к веб-сокету, нужно будет пинговать его раз в 10-20 секунд, иначе соединение будет разорвано. Рекомендуемое время между пингом смотрите в поле pingInterval
. Если pingInterval
будет превышен в два раза, KuCoin разорвет соединение.
Пинговать нужно вне зависимости от того, пересылаются данные по веб-сокету или нет.