Erreurs d'utilisation générales (#1)
Erreurs de limite de taux (#2)
Erreurs de trading (ouverture/annulation d'ordres) (#3)
Erreurs d'état du service (#4)
Erreurs internes (#5)
Erreurs CloudFlare (réseau) (#6)
Introduction
La plupart des demandes API sont traitées avec succès, mais il arrive que les choses se passent mal et un message d'erreur est alors généré au lieu de la réponse attendue.
Notre API fournit des messages d'erreur descriptifs divers destinés à indiquer la raison de l'erreur et à suggérer des solutions appropriées.
Les messages d'erreur API peuvent être divisés en plusieurs groupes (en fonction du type d'erreur, de la cause sous-jacente et de la solution optimale) et se présentent toujours dans le même format, comme suit:
"Niveau de gravité""Catégorie d'erreur":"Message d'erreur"
Le "Niveau de gravité" peut être E pour une erreur ou W pour un avertissement. La "Catégorie d'erreur" peut être General, API, Query, Order, Trade, Funding ou Service. Le "Message d'erreur" peut être n'importe quelle chaîne de texte décrivant la raison de l'erreur (comme Invalid arguments).
Par exemple, une erreur indiquant qu'une paire de devises non valide a été utilisée dans une requête de ticker se présenterait comme suit:
EQuery:Unknown asset pair
Veuillez noter que certains logiciels tiers (applications mobiles, bots de trading, etc.) choisissent de masquer l'erreur API d'origine et d'afficher une erreur personnalisée à sa place. Par conséquent, il est possible que le format ou le contenu d'une erreur diffère selon le logiciel utilisé.
Erreurs d'utilisation générales
EGeneral:Permission denied Les erreurs Permission denied sont envoyées lorsque le client API tente d'exécuter une tâche pour laquelle la clé API n'a pas d'autorisation. Par exemple, si un client API tente d'accéder au solde d'un compte à l'aide d'une clé API configurée pour autoriser l'accès au trading, mais pas à la gestion de compte, l'erreur Autorisation refusée sera générée. Vous pouvez vérifier vos clés API et leurs paramètres (tels que leurs autorisations) sous Paramètres -> API dans l'onglet de la gestion de compte. Vous devez vous assurer que les clés API utilisées par vos applications tierces disposent de tous les paramètres et autorisations requis par vos applications. EAPI:Invalid key Cette erreur est envoyée lorsque la clé API utilisée pour l'appel a expiré ou été désactivée. Veuillez vérifier la clé API sous Paramètres -> API dans l'onglet de la gestion de compte ou en générer une nouvelle et mettre votre demande à jour. EQuery:Unknown asset pair Vous pouvez extraire la liste complète de nos paires d'actifs de l'appel public AssetPairs et rechercher le nom de la paire d'entrée des en-têtes Json ou au moyen du paramètre "altname": https://api.kraken.com/0/public/AssetPairs (https://api.kraken.com/0/public/AssetPairs) EGeneral:Invalid arguments Cette erreur est générée lorsqu'une méthode est utilisée sans les paramètres requis. Par exemple, le recours à la méthode QueryOrders sans spécifier un paramètre d'identifiant de transaction valide (txid) générerait l'erreur Invalid arguments. Le recours à une méthode avec des paramètres inutiles ne générerait pas l'erreur Invalid arguments, puisqu'ils seraient simplement ignorés. EAPI:Invalid signature Les erreurs Invalid signature se produisent si votre clé API ou votre secret API est rédigé de manière incorrecte dans votre programme ou si les données POST utilisées dans l'authentification et celles envoyées à l'API ne correspondent pas les unes aux autres.
Pour référence supplémentaire, voici un exemple de code Python utilisé pour déployer l'algorithme de signature API. La clé publique API appropriée doit être copiée et collée à partir de la gestion de compte, tandis que la méthode API et les données POST doivent être mises à jour de manière appropriée. La valeur de sortie peut être utilisée directement comme valeur pour l'en-tête HTTP API-Sign.
#!/usr/bin/env python# Importer les bibliothèques Python requisesimport timeimport base64import hashlibimport hmac# Décoder la clé privée API du format base64 affiché dans la gestion de compteapi_secret = base64.b64decode("nmlrD83t1J+yVWKUBx9vD6j26C5zhC11tFfXpN+Ww+8oOVuGgse5AeADcvl95jYaD+UAi3D5CrVfFr8GfQ7zhA==")# Variables (méthode API, nonce et données POST)api_path = "/0/private/TradeBalance"api_nonce = str(int(time.time()*1000))api_post = "nonce=" + api_nonce + "&asset=xxbt"# Algorithmes de hachage cryptographiqueapi_sha256 = hashlib.sha256(api_nonce + api_post).digest()api_hmac = hmac.new(api_secret, api_path + api_sha256, hashlib.sha512)# Encoder la signature au format base64 utilisé dans la valeur API-Signapi_signature = base64.b64encode(api_hmac.digest())# Signature d'authentification API à utiliser dans l'en-tête HTTP API-Signprint(api_signature)
La valeur SHA256 est calculée à l'aide de la valeur nonce elle-même et des données POST pour la méthode API. Les données POST sont composées des paires nom/valeur pour la valeur nonce (à nouveau) et des paramètres de la méthode API. Voici un exemple des données qui devraient être converties en SHA256 pour la méthode TradeBalance:
SHA256 = SHA256 of "1541933977000nonce=1541933977000&asset=xxbt"
La valeur de chaîne convertie en SHA256 ne doit pas contenir de valeurs nulles (\0) supplémentaires et la valeur de chaîne ne doit pas être codée en tant que base64 ou hex (c'est-à-dire que la valeur de chaîne doit être une chaîne de texte simple).
Le chemin URI est l'URL complète de la méthode API, à l'exception du préfixe "https://api.kraken.com (https://api.kraken.com/)", de sorte que le chemin URI de la méthode TradeBalance (par exemple) serait la valeur de chaîne "/0/private/TradeBalance" sans aucune valeur nulle supplémentaire.
Le hachage HMAC SHA512 est calculé à l'aide du chemin URI et du résumé SHA256 précédemment calculé, avec la clé privée API décodée base64 en tant que clé HMAC. Voici un exemple des données qui doivent être transmises au HMAC:
HMAC SHA512 utilisant une clé privée décodée base64 = HMAC of "/0/private/TradeBalanceSHA256"
Les en-têtes HTTP API-Key et API-Sign sont les deux seuls en-têtes HTTP personnalisés requis. L'en-tête API-Key est un doublon exact de la clé publique API de la gestion de compte. L'en-tête API-Sign est le résumé HMAC SHA512 codé à l'aide de base64.
EAPI:Invalid nonce Vous trouverez plus d'informations sur cette erreur en cliquant ici:
https://support.kraken.com/hc/en-us/articles/360001148063 (https://support.kraken.com/hc/en-us/articles/360001148063)
Et vous en saurez plus sur le nonce et la fenêtre de nonce en cliquant ici:
https://support.kraken.com/hc/en-us/articles/360000906023 (https://support.kraken.com/hc/en-us/articles/360000906023)
https://support.kraken.com/hc/en-us/articles/360001148023 (https://support.kraken.com/hc/en-us/articles/360001148023)
ESession:Invalid session Les erreurs Invalid session sont envoyées via le WebSocket API (https://docs.kraken.com/websockets/) lorsqu'une tentative d'inscription à un flux authentifié (privé) (https://support.kraken.com/hc/en-us/articles/360034664311) est effectuée à l'aide d'un jeton d'authentification qui n'est plus valide (par exemple, s'il a déjà expiré).
La solution consiste simplement à demander un nouveau jeton d'authentification via le point de terminaison REST API GetWebSocketsToken (https://docs.kraken.com/rest/#operation/getWebsocketsToken) et à utiliser le nouveau jeton pour toutes les demandes d'inscription authentifiées (privées) ultérieures.
Erreurs de limite de taux
EAPI:Rate limit exceeded Vous avez dépassé la limite de débit API. (https://support.kraken.com/hc/en-us/articles/206548367) EOrder:Rate limit exceeded Bien que l'ajout et l'annulation d'ordres ne soient pas pris en compte dans nos limites de compteur API standard, ces opérations ont leur propre compteur d'ouverture et d'annulation d'ordres. (https://support.kraken.com/hc/en-us/articles/360045239571) Ce compteur fonctionne de telle sorte que plus les ordres sont conservés longtemps dans le carnet d'ordres, plus les clients peuvent ajouter ou annuler des ordres. EGeneral:Temporary lockout Des messages d'erreur Temporary lockout peuvent se produire si vous avez reçu trop d'appels API ayant échoué ou trop d'erreurs Invalid nonce sur une courte période ou des signatures non valides. Même si ces appels génèrent une erreur, cette erreur est incluse dans vos limites API et peut entraîner un verrouillage temporaire.
Les verrouillages temporaires durent environ 15 minutes. Après avoir reçu l'erreur Temporary lockout, veuillez patienter 15 minutes avant d'envoyer toute nouvelle demande API. Si vous déclenchez plusieurs erreurs Invalid nonce, veuillez étendre la fenêtre de nonce car cela peut contribuer à réduire la fréquence de ces erreurs. Essayez également de réduire la fréquence de vos appels API privés.
Erreurs de trading
EOrder:Cannot open position L'ouverture de nouvelles positions spot avec marge a été temporairement interrompue à des fins de maintenance des systèmes de trading. La fonctionnalité sera bientôt rétablie et vous pourrez suivre les mises à jour sur status.kraken.com.
Il se peut également que les positions spot avec marge ne soient pas actuellement disponibles pour les clients résidant dans certains pays (https://support.kraken.com/hc/en-us/articles/360001368823).
EOrder:Cannot open opposing position Sur Kraken, vous ne pouvez pas ouvrir de position Long et Short pour la même paire. (https://support.kraken.com/hc/en-us/articles/205367328)
Si vous souhaitez ouvrir une position Long et Short sur la même monnaie, veuillez choisir différentes paires de trading comportant cette monnaie comme devise de base ou de cotation. P. ex: position Short BTC/USD, position Long BTC/EUR.
EOrder:Margin allowance exceeded Cette erreur se produit lorsque vous avez dépassé les limites d'allocation de marge (https://support.kraken.com/hc/en-us/articles/209238787) pour votre niveau de vérification actuel. Les limites d'allocation de marge pour chaque monnaie varient en fonction de votre niveau de vérification actuel. EOrder:Insufficient margin Nous disposons de fonds limités pour accorder les extensions de marge. Le message Insufficient margin indique que nous sommes actuellement à court de fonds dans la réserve de marge applicable. (https://support.kraken.com/hc/en-us/articles/217696017) Cette situation peut changer à tout moment. Il se peut que vous réussissiez à placer votre ordre quelques secondes ou minutes plus tard, mais les ordres à volume élevé et les ordres placés pendant les périodes de forte activité peuvent prendre plus de temps. Veuillez nous excuser pour la gêne occasionnée. EOrder:Insufficient funds (insufficient user funds) Vous ne disposez pas des fonds disponibles pour placer cet ordre. Veuillez examiner vos positions et vos ordres ouverts portant sur des actifs qui sont susceptibles de monopoliser vos fonds. EOrder:Order minimum not met (volume too low) Vous n'avez pas atteint le volume d'ordre minimal (https://support.kraken.com/hc/en-us/articles/205893708) pour cet actif. EOrder:Orders limit exceeded Vous avez dépassé le nombre maximal d'ordres ouverts (https://support.kraken.com/hc/en-us/articles/209090607) pour votre type de compte.
Ces limites sont basées sur votre niveau de vérification. Veuillez fermer certains de vos ordres en cours ou vérifier votre compte à un niveau supérieur.
EOrder:Positions limit exceeded Vous avez dépassé le nombre maximal de positions en cours (https://support.kraken.com/hc/en-us/articles/209090607) pour votre type de compte.
Ces limites sont basées sur votre niveau de vérification. Veuillez clôturer ou régler tout ou partie de vos positions en cours ou vérifier votre compte à un niveau supérieur si possible.
Erreurs d'état du service
EService:Unavailable ou EService:Busy Les erreurs de service que vous rencontrez ne devraient être que temporaires. Vous pouvez soumettre à nouveau vos demandes si elles ont échoué. Nous surveillerons les problèmes et mettrons notre page à jour: https://status.kraken.com/ (https://status.kraken.com/)
Erreurs internes
EGeneral:Internal error Lorsque nous faisons face à des problèmes de dégradation de l'API, ceux-ci peuvent se traduire par des problèmes pour Kraken et cryptowat.ch sous la forme de messages d'indisponibilité du service, d'erreurs 8XX sur cryptowat.ch et de pannes de site. ETrade:Locked Ce problème concerne la sécurité de votre compte, qui a peut-être été compromise. Veuillez modifier votre mot de passe et l'authentification à deux facteurs, puis contacter notre Centre de support. EAPI:Feature disabled Cette erreur se produit lorsqu'un signal ou un paramètre d'entrée est temporairement ou définitivement désactivé. L'erreur doit provenir de l'une des entrées transmises. Veuillez contacter notre support en envoyant un journal contenant les informations complètes utilisées dans le cadre de l'appel qui a généré l'erreur.
Erreurs Cloudflare
Codes d'état HTTP 5xx et 10xx Ces erreurs 5xx et 10xx ne sont pas des erreurs API, mais plutôt des erreurs de serveur Web provenant de CloudFlare. Les erreurs API sont toujours envoyées au format JSON, par exemple "error":["ErrorType:ErrorMessage"]. Ainsi, chaque fois qu'une erreur dans un format différent est reçue (p. ex. un code d'état HTTP 520, 504, 502, 1020, etc.), la solution provisoire consiste à réessayer l'appel API peu de temps après en espérant qu'il réussisse.
L'un des effets secondaires de ce problème est qu'un ordre peut être placé avec succès même si une erreur 5xx ou 10xx est générée au lieu de la réponse attendue. Cela est rendu possible par le fait que CloudFlare rencontre parfois l'erreur après que l'appel à l'API a été traité. Dans un tel cas, l'appel API a réussi, mais l'obtention des résultats via CloudFlare a échoué.
Une solution à ce problème consiste à utiliser des références utilisateur (le paramètre userref) pour tous les ordres. En plaçant chaque ordre avec une référence utilisateur unique, la méthode OpenOrders peut être utilisée pour confirmer si l'ordre a été placé avec succès ou non, déterminant ainsi s'il doit être placé à nouveau ou pas.
Par exemple, si un appel à la méthode AddOrder pour un ordre limite inclut le paramètre "userref=12345678", un appel ultérieur à la méthode OpenOrders utilisant le paramètre "userref=12345678" renverrait les informations sur l'ordre (y compris l'ID d'ordre) pour les ordres placés avec succès, mais ne renverrait aucune information sur l'ordre (telle que "result":"open":) pour les ordres ayant échoué.