Поширені запитання про розширений API

Останнє оновлення: More than 3 months ago

Використовуючи кінцеві точки фінансування REST API, клієнти можуть вносити/виводити кошти на/з свого облікового запису Kraken та запитувати статус транзакції внесення/виведення коштів у реальному часі.

Внесення/виведення коштів проходить кілька етапів між початковим запитом і завершенням транзакції, тому кінцеві точки фінансування повертатимуть різні значення статусу залежно від того, коли вони викликаються.

Зверніть увагу, що значення статусу спочатку походили зі сторінок 16/17 документа Internet Financial Exchange Protocol (IFEX), але значення були дещо змінені, щоб краще відповідати криптотранзакціям (наприклад, не всі можливі значення статусу використовуються).

Внесення коштів

Можливі значення статусу для транзакцій внесення коштів такі:

  • Settled = Внесення коштів отримано, але все ще потребує додаткових підтверджень у блокчейні.

  • Success = Внесення коштів досягло необхідної кількості підтверджень у блокчейні.

  • Failure = Внесення коштів не вдалося (з однієї або кількох причин).

Нижче наведено кілька прикладів того, як вищезазначені значення статусу відображатимуться у відповідях від кінцевої точки DepositStatus:

Статус Settled:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"QSB7IFM-Q3LT3X-NVAOKE","txid":"92c908ea2ea819d678d67130e4d20b625a8f97f3cfff45f906dde8cef41a046a","info":"D7SLwMBPqfFMCZ8EJDMoVEePpZAFFegLt8","amount":"997.00000000","fee":"0.00000000","time":1611308478,"status":"Settled"}]}

Статус Success:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"QSB7IFM-Q3LT3X-NVAOKE","txid":"92c908ea2ea819d678d67130e4d20b625a8f97f3cfff45f906tdde8cef41a046a","info":"D7SLwMBPqfFMCZ8EJDMoVEePpZAFFegLt8","amount":"997.00000000","fee":"0.00000000","time":1611308478,"status":"Success"}]}

Виведення коштів

Можливі значення статусу для транзакцій виведення коштів такі:

  • Initial = Запит на виведення коштів отримано та перевіряється на дійсність (будь-які обмеження на фінансування облікового запису тощо).

  • Pending = Виведення коштів очікує обробки нашим платіжним шлюзом.

  • Settled = Виведення коштів надіслано до блокчейну (на цьому етапі ідентифікатор транзакції блокчейну стане доступним).

  • Success = Транзакція виведення коштів має щонайменше 1 підтвердження в блокчейні.

  • On hold = Виведення коштів призупинено та має бути перевірено вручну нашою командою фінансування.

  • Failure = Виведення коштів не вдалося (з однієї або кількох причин).

Нижче наведено кілька прикладів того, як вищезазначені значення статусу відображатимуться у відповідях від кінцевої точки WithdrawStatus:

Статус Initial:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Initial"}]}

Статус Pending:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Pending"}]}

Статус Settled:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":"064536e901f2cbfa6e279aa7a87c700b64e0ce561bf6e266788c47496f75106c","info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Settled"}]}

Статус Success:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":"064536e901f2cbfa6e279aa7a87c700b64e0ce561bf6e266788c47496f75106c","info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Success"}]}

Статус Failure:{"error":[],"result":[{"method":"Dogecoin","aclass":"currency","asset":"XXDG","refid":"ASBCMYC-F5ETQT-34NMWT","txid":null,"info":"DGNBPsa2GhhtZGEZo79uF3WN2bTxFxmc9y","amount":"98.00000000","fee":"2.00000000","time":1612782924,"status":"Failure","status-prop":"canceled"}]}

Додаткова інформація щодо внесення/виведення коштів доступна на наших сторінках підтримки фінансування готівкою та фінансування криптовалютою.

Кінцева точка REST API OHLC надає лише обмежену кількість історичних даних, а саме 720 точок даних запитуваного інтервалу. Наприклад, запит даних OHLC з інтервалом в 1 хвилину поверне дані за останні 720 хвилин (12 годин).

Для програм, які потребують додаткових даних OHLC або тікових даних, можна отримати всю історію торгів наших ринків (історичні дані про час і продажі) через кінцеву точку REST API Trades. OHLC для будь-якого часового проміжку та будь-якого інтервалу потім можна створити з історичних даних про час і продажі.

Кінцева точка Trades приймає необов'язковий параметр під назвою since, який вказує початкову дату/час даних. Значення since — це UNIX timestamp з наносекундною роздільною здатністю (стандартний UNIX timestamp у секундах з 9 додатковими цифрами).

Наприклад, виклик кінцевої точки Trades, такий як https://api.kraken.com/0/public/Trades?pair=xbtusd&since=1559347200000000000, поверне історичні дані про час і продажі для XBT/USD з 1 червня 2019 року о 00:00:00 UTC:

{"error":[],"result":{"XXBTZUSD":[["8552.90000","0.03190270",1559347203.7998,"s","m",""],["8552.90000","0.03155529",1559347203.8086,"s","m",""],["8552.90000","0.00510797",1559347203.9664,"s","m",""],["8552.90000","0.09047336",1559347203.9789,"s","m",""],["8552.90000","0.00328738",1559347203.9847,"s","m",""],["8552.90000","0.00492152",1559347203.9897,"s","m",""],["8552.90000","0.00201848",1559347203.9937,"s","m",""],["8552.90000","0.11422068",1559347203.9993,"s","m",""],["8552.90000","0.00425858",1559347204.071,"s","m",""],["8552.90000","0.00427679",1559347204.0762,"s","m",""],["8552.90000","0.06381401",1559347204.1662,"s","m",""]
...
["8579.50000","0.05379597",1559350785.248,"s","l",""],["8579.50000","0.94620403",1559350785.2936,"s","l",""],["8578.10000","0.45529068",1559350785.297,"s","l",""]],"last":"1559350785297011117"}}

Наступні виклики кінцевої точки Trades повинні замінювати значення параметра since значенням параметра last з результатів попереднього виклику, наприклад https://api.kraken.com/0/public/Trades?pair=xbtusd&since=1559350785297011117.

Використання спеціального значення since, рівного 0 (нулю), поверне історичні дані про час і продажі з початку існування ринку (починаючи з найпершої угоди).

Посилання користувача (user reference) — це ідентифікатор замовлення, наданий клієнтом, який можна використовувати замість фактичного ідентифікатора замовлення (наданого API) для деяких завдань з управління замовленнями (зокрема, скасування замовлень). Посилання користувача реалізовані максимально гнучко і тому можуть використовуватися різними способами, включаючи:

  • як унікальний ідентифікатор (де кожне замовлення має різне посилання користувача),

  • для групування пов'язаних замовлень (наприклад, групування замовлень з різними рівнями кредитного плеча),

  • або як резервний ідентифікатор у випадку, якщо фактичний ідентифікатор замовлення невідомий.

Посилання користувача (user reference) має бути числовим значенням від 1 до 2 147 483 647 (по суті, будь-яке позитивне 32-розрядне число) і тому може бути реалізовано як простий лічильник, як випадкове 32-розрядне число зі знаком, або навіть як timestamp у секундах (хоча це не працюватиме після 19 січня 2038 року о 3:14:07 UTC).

Розміщення замовлень за допомогою посилання користувача

Замовлення можна розміщувати з прикріпленим посиланням користувача, викликавши кінцеву точку AddOrder та включивши параметр userref зі значенням посилання користувача:

$ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=limit price=0.1 volume=50 userref=27649653

{"error":[],"result":{"descr":{"order":"buy 50.00000000 XDGUSD @ limit 0.1000000"},"txid":["OQJSXE-F5FOM-IXHVL4"]}}

Перегляд замовлень, що мають посилання користувача

Замовлення, які вже мають прикріплене посилання користувача, можна переглянути, викликавши кінцеві точки Open/Closed/QueryOrders та включивши параметр userref з існуючим посиланням користувача як значення (у цьому випадку посилання користувача діє як фільтр, відображаючи лише пов'язані замовлення):

$ ./krakenapi OpenOrders userref=27649653

{"error":[],"result":{"open":{"OQJSXE-F5FOM-IXHVL4":{"refid":null,"userref":27649653,"status":"open","opentm":1629618802.9812,"starttm":0,"expiretm":0,"descr":{"pair":"XDGUSD","type":"buy","ordertype":"limit","price":"0.1000000","price2":"0","leverage":"none","order":"buy 50.00000000 XDGUSD @ limit 0.1000000","close":""},"vol":"50.00000000","vol_exec":"0.00000000","cost":"0.000000000","fee":"0.000000000","price":"0.000000000","stopprice":"0.000000000","limitprice":"0.000000000","misc":"","oflags":"fciq"}}}}

$ ./krakenapi ClosedOrders userref=38695724

{"error":[],"result":{"closed":{"O7YEFN-3V4RK-FBNSNM":{"refid":null,"userref":38695724,"status":"canceled","reason":"User requested","opentm":1629619539.3593,"closetm":1629619542.2246,"starttm":0,"expiretm":0,"descr":{"pair":"XBTUSD","type":"buy","ordertype":"limit","price":"25000.0","price2":"0","leverage":"none","order":"buy 0.00010000 XBTUSD @ limit 25000.0","close":""},"vol":"0.00010000","vol_exec":"0.00000000","cost":"0.00000","fee":"0.00000","price":"0.00000","stopprice":"0.00000","limitprice":"0.00000","misc":"","oflags":"fciq"}},"count":1}}

Скасування замовлень, що мають посилання користувача

Замовлення, які вже мають прикріплене посилання користувача, можна скасувати за допомогою посилання користувача, викликавши кінцеву точку CancelOrder та використовуючи посилання користувача як значення txid (замість значення ідентифікатора замовлення):

$ ./krakenapi CancelOrder txid=16764529

{"error":[],"result":{"count":1}}

Зверніть увагу, що всі відкриті замовлення з однаковим посиланням користувача будуть скасовані, отже, можна зробити один виклик CancelOrder для одночасного скасування кількох замовлень (як зазначено значенням count, що дорівнює 3, у наступній відповіді):

$ ./krakenapi CancelOrder txid=48695624

{"error":[],"result":{"count":3}}

Ця проблема може бути пов'язана з Cloudflare:

https://support.cloudflare.com/hc/en-us/articles/200169226-Why-am-I-getting-a-403-error-

ПРИМІТКА: Kraken має увімкнену функцію "Browser Integrity Check".

Це може статися, якщо ваш запит містить підозрілі заголовки. Наприклад, у вашому запиті може бути відсутній user agent або використовуватися нестандартний user agent; тому, будь ласка, перевірте заголовки вашого запиту.

Якщо ви не можете створити жодних стандартних запитів, які дозволяє наша система, надішліть нам повну копію запиту(ів), які ви намагаєтеся зробити, включаючи вашу IP-адресу та всі заголовки. Ця інформація дозволить нам провести подальше розслідування.

API для ф'ючерсів

Для наших REST та WebSocket API для ф'ючерсів (futures.kraken.com) ми пропонуємо повне тестове середовище, використовуючи URL API demo-futures.kraken.com.

REST, WebSocket та FIX Тестові середовища

Для нашого спотового REST/WebSocket API та FIX API ми наразі пропонуємо тестове середовище для кваліфікованих клієнтів. Доступ до цього середовища вимагає процесу адаптації, який можна розпочати, безпосередньо звернувшись до команди API.

Тестування нашого API за допомогою тестового параметра Validate

При розміщенні ордера через кінцеві точки REST API AddOrder або WebSocket API addOrder, вхідний параметр validate можна використовувати для симуляції ордера.

Виклик AddOrder/addOrder з параметром validate, встановленим на true (validate=1, validate=true, validate=anything тощо), призведе до перевірки деталей ордера на наявність помилок, але відповідь API ніколи не міститиме ідентифікатор ордера (який завжди повертався б для успішного ордера без параметра validate).

Приклад виклику AddOrder з параметром validate (зверніть увагу на відсутній ідентифікатор ордера):

bash

Bash

$ ./krakenapi AddOrder pair=xdgusd type=buy ordertype=market volume=5000 validate=true{"error":[],"result":{"descr":{"order":"buy 5000.00000000 XDGUSD @ market"}}}

Невеликі реальні ордери та/або ордери з екстремальними цінами

Для комплексного тесту API за допомогою параметра Validate ми рекомендуємо розміщувати дуже невеликі ринкові ордери (ордери на мінімальний розмір ордера) або лімітні ордери, ціна яких значно відрізняється від поточної ринкової ціни (наприклад, розміщення лімітного ордера на продаж ETH/USD за $800, коли ринкова ціна становить $200).

Тестування за допомогою реальних ордерів дозволяє вашому коду API взаємодіяти з нашим API в реальних умовах, тому кожен аспект тесту буде точним (як ваші ордери впливають на книгу ордерів тощо).

З міркувань безпеки ми нещодавно припинили підтримку TLS 1.0 та 1.1. Якщо ви стикаєтеся з повідомленнями про помилки підключення SSL/TLS під час спроби підключитися до нашого API, це, ймовірно, пов'язано з використанням одного з цих застарілих стандартів. Вам потрібно буде змінити свій API-клієнт, щоб примусово використовувати TLS 1.2/1.3, або оновити версію .NET до 4.6 або вище, яка використовує TLS 1.2/1.3 як стандарт.

Наведена нижче таблиця Google Sheet може бути використана для розрахунку підпису автентифікації REST API для будь-якої комбінації вхідних даних:

  • Приватний (секретний) ключ API

  • Кінцева точка API (Balance, TradeBalance, QueryOrders тощо)

  • Значення Nonce (див. нашу сторінку підтримки що таке nonce для отримання додаткової інформації)

  • Вхідні параметри кінцевої точки (наприклад, asset=doge)

Калькулятор можна використовувати для перевірки того, що алгоритм автентифікації був правильно реалізований, тим самим уникаючи потенційних проблем (зокрема, неочікуваних помилок недійсного ключа) пізніше в циклі розробки.

Інструкції з використання

  1. 1

    Відкрийте калькулятор автентифікації REST API в Chrome (або будь-якому іншому сучасному веб-браузері)

  2. 2

    Зробіть копію калькулятора на свій Google Drive через меню Файл -> Створити копію (для цього кроку вам потрібно буде увійти до свого облікового запису Google)

  3. 3

    Відредагуйте поля API key, API endpoint, nonce value та input data за допомогою власного ключа API та деталей запиту

  4. 4

    Порівняйте розрахований підпис автентифікації API зі значенням, розрахованим вашим власним кодом API (два значення повинні точно збігатися)

З міркувань безпеки ми рекомендуємо використовувати калькулятор автентифікації з тимчасовим ключем API, а потім видалити ключ API зі свого облікового запису, як тільки реалізація вашого підпису автентифікації виявиться правильною.

Приклад

Screenshot_2021-06-21_at_14.42.35.png

Основна перевага використання наших обгорток клієнтських бібліотек полягає в тому, що вам не потрібно витрачати час/зусилля на винайдення велосипеда для створення підписів API, це вже зроблено за вас.

Якщо ви маєте намір здійснювати виклики лише до публічних методів, то ви можете відмовитися від клієнтських бібліотек, оскільки автентифікація не потрібна.

Список доступних обгорток ви можете знайти тут.

Потрібна додаткова допомога?