For information on changes for our US clients, please visit our Support Center article.

Поиск
Сообщения об ошибках API

Введение

Большинство запросов API выполняются успешно, но иногда что-то идет не так и вместо ожидаемого ответа появляется сообщение об ошибке.
Для нашего API существует множество описательных сообщений об ошибках, в которых указана причина возникновения ошибки и предложения по ее устранению. 
Сообщения об ошибках API можно разделить на несколько групп (в зависимости от типа, причины и наилучшего решения). Однако все такие сообщения имеют одинаковый формат:
«Уровень серьезности»«категория ошибки»:«сообщение об ошибке»
Для обозначения уровня серьезности используется буква E (т. е. ошибка) или W (т. е. предупреждение). Категории ошибки бывают следующие: General (общая), API, Query (запрос), Order (ордер), Trade (торговля), Funding (перевод) и Service (сервис). Далее в сообщении об ошибке описывается ее причина, например Invalid arguments (недопустимые аргументы).
Вот как выглядит сообщение об ошибке, вызванной тем, что в запросе тикера была указана недопустимая валютная пара:
EQuery:Unknown asset pair
Обратите внимание, что некоторые сторонние программы (мобильные приложения, торговые боты и т. д.) вместо нашего сообщения об ошибке API показывают свою версию, поэтому можно встретить другой формат ошибки или текст в зависимости от используемого ПО.

Общие ошибки при использовании

EGeneral:Permission denied
Ошибка «в разрешении отказано» возникает, когда клиент API пытается выполнить задачу, для которой у ключа API нет разрешения. Например, клиент API пытается узнать баланс аккаунта с помощью ключа API, настроенного на разрешение доступа к торговле, а не к управлению аккаунтом. В таком случае будет получена ошибка «в разрешении отказано». Проверить свои ключи API и их настройки (в том числе разрешения) можно на вкладке страницы управления аккаунтом: «Настройки» -> API. Убедитесь, что ключи API, используемые сторонними приложениями, имеют все необходимые настройки и разрешения.
EAPI:Invalid key
Эта ошибка возникает, когда срок действия ключа API, использованного для вызова, истек или ключ был деактивирован. Проверить его можно на вкладке страницы управления аккаунтом: «Настройки» -> API. Вы также можете создать новый ключ и обновить приложение.
EQuery:Unknown asset pair
Вы можете извлечь полный список пар активов из общего вызова AssetPairs и найти название нужной пары в качестве заголовка JSON или по параметру «altname»: https://api.kraken.com/0/public/AssetPairs
EGeneral:Invalid arguments
Эта ошибка возникает, когда метод вызывается без требуемых параметров. Например, если метод QueryOrders вызвать без указания идентификатора транзакции (txid), будет получена ошибка «недопустимые аргументы». При вызове метода с необязательными параметрами ошибка «недопустимые аргументы» не возникнет, так как они просто будут проигнорированы.
EAPI:Invalid signature
Ошибка «недопустимая подпись» возникает, если ключ API или секретный ключ API неправильно записаны в вашей программе или если данные POST, использованные для аутентификации, не совпадают с данными POST, отправленными в API.
Ниже приведен пример кода Python для реализации алгоритма подписи API. Скопируйте и вставьте в него соответствующий открытый ключ API со страницы управления аккаунтом и обновите метод API и данные POST. Выходное значение можно использовать в качестве значения заголовка API-Sign HTTP.
#!/usr/bin/env python# Import required Python librariesimport timeimport base64import hashlibimport hmac# Decode API private key from base64 format displayed in account managementapi_secret = base64.b64decode("nmlrD83t1J+yVWKUBx9vD6j26C5zhC11tFfXpN+Ww+8oOVuGgse5AeADcvl95jYaD+UAi3D5CrVfFr8GfQ7zhA==")# Variables (API method, nonce, and POST data)api_path = "/0/private/TradeBalance"api_nonce = str(int(time.time()*1000))api_post = "nonce=" + api_nonce + "&asset=xxbt"# Cryptographic hash algorithmsapi_sha256 = hashlib.sha256(api_nonce + api_post).digest()api_hmac = hmac.new(api_secret, api_path + api_sha256, hashlib.sha512)# Encode signature into base64 format used in API-Sign valueapi_signature = base64.b64encode(api_hmac.digest())# API authentication signature for use in API-Sign HTTP headerprint(api_signature)
SHA256 рассчитывается с использованием одноразового случайного числа и данных POST для метода API. Данные POST состоят из пар имени/значения для одноразового случайного числа и параметров метода API. Пример данных, которые необходимо передать в SHA256 для метода TradeBalance:
SHA256 = SHA256 имеет значение «1541933977000nonce=1541933977000&asset=xxbt»
Переданное в SHA256 значение строки не должно содержать дополнительных нулей (\0) и быть закодировано в формате Base64 или hex (т. е. значение строки должно представлять собой простой текст).
URL-путь – это полный URL-адрес метода API за исключением префикса «https://api.kraken.com», т. е. URL-путь метода TradeBalance, например, будет иметь значение строки «/0/private/TradeBalance» без дополнительных нулей.
HMAC SHA512 рассчитывается с использованием URL-пути и ранее рассчитанной хеш-суммы SHA256. Расшифрованный закрытый ключ API в формате Base64 используется как ключ HMAC. Пример данных, которые необходимо передать в HMAC:
HMAC SHA512 с использованием расшифрованного закрытого ключа в формате Base64 = HMAC имеет значение «/0/private/TradeBalanceSHA256»
Заголовки API-Key и API-Sign HTTP – два единственных обязательных пользовательских заголовка HTTP. Заголовок API-Key представляет собой точную копию открытого ключа API, указанного на странице управления аккаунтом. Заголовок API-Sign – это хеш-сумма HMAC SHA512, зашифрованная в формате Base64.
EAPI:Invalid nonce
Подробнее об этой ошибке:
Подробнее о nonce (одноразовом случайном числе) и nonce window:
ESession:Invalid session
Ошибка «недействительный сеанс» возникает в WebSocket API при попытке подписаться на подтвержденную (частную) ленту с помощью недействительного токена аутентификации (у которого, например, истек срок действия).
Для решения проблемы нужно просто запросить новый токен аутентификации через конечную точку REST API GetWebSocketsToken и использовать его для новых запросов на подтвержденную (частную) подписку.

Ошибки, связанные с ограничением на запросы

EOrder:Rate limit exceeded
Хотя добавление или отмена ордеров не идет в счет стандартного ограничения API, на такие действия распространяются отдельные ограничения на добавление и отмену ордеров. Чем дольше ордеры остаются в книге ордеров, тем больше ордеров можно добавлять или отменять.
EGeneral:Temporary lockout
Ошибка «временная блокировка» возникает, если в течение короткого периода времени было слишком много неудачных вызовов API или слишком много ошибок из-за недопустимых одноразовых случайных чисел либо недопустимых подписей. Несмотря на ошибку, такие вызовы все равно учитываются в рамках ограничений API и могут привести к временной блокировке.
Временная блокировка длится приблизительно 15 минут. После получения ошибки в связи с временной блокировкой подождите 15 минут, прежде чем отправлять новые запросы API. Если у вас несколько раз возникла ошибка из-за недопустимых одноразовых случайных чисел, увеличьте nonce window – возможно, это поможет снизить частоту появления таких ошибок. Попробуйте также реже совершать частные вызовы API.

Ошибки, связанные с торговлей

EOrder:Cannot open position
Для проведения обслуживания механизма торговли открытие новых спотовых маржинальных позиций приостановлено. Скоро эта функция снова станет доступна. Следите за новостями на сайте status.kraken.com.
Эта ошибка также может возникать, если спотовые маржинальные позиции недоступны для клиентов в определенных странах.
EOrder:Cannot open opposing position
На Kraken нельзя открыть позиции лонг и шорт для одной и той же пары.
Если вы хотите открыть позиции лонг и шорт для одной и той же валюты, выберите разные торговые пары, в которых она выступает в качестве базовой валюты или валюты котировки. Например: шорт XBT/USD, лонг XBT/EUR.
EOrder:Margin allowance exceeded
Эта ошибка означает, что вы превысили ограничения доступной маржи для текущего уровня верификации. Ограничения доступной маржи для каждой валюты зависят от текущего уровня верификации.
EOrder:Insufficient margin
Наши средства для расширения маржи ограничены. Сообщение о недостаточной марже означает, что у нас пока нет средств в этом маржинальном пуле. Ситуация может измениться в любой момент. Возможно, у вас получится разместить ордер уже через несколько секунд или минут. Однако крупные ордера и ордера, размещенные в период больших объемов, могут потребовать больше времени. Приносим извинения за неудобства.
EOrder:Insufficient funds
У вас недостаточно средств для размещения ордера. Проверьте свои открытые позиции и ордера, чтобы понять, где могут удерживаться ваши средства.
EOrder:Order minimum not met
Вы не достигли минимального объема ордера для этого актива.
EOrder:Orders limit exceeded
Вы превысили максимальное количество открытых ордеров, доступное для вашего аккаунта.
Ограничения зависят от вашего уровня верификации. Закройте несколько открытых ордеров или пройдите верификацию аккаунта для перехода на следующий уровень.
EOrder:Positions limit exceeded
Вы превысили максимальное количество открытых позиций, доступное для вашего аккаунта.
Ограничения зависят от вашего уровня верификации. Закройте несколько открытых позиций (или все из них) или пройдите верификацию аккаунта для перехода на следующий уровень, если это возможно.