Client en ligne de commande de l'API REST (NodeJS)

Dernière mise à jour : 31 déc. 2025

Le client en ligne de commande de l'API REST en NodeJS permet un accès complet à l'API REST de Kraken via la ligne de commande (comme le Terminal sur macOS), de sorte qu'aucune connaissance en programmation ou expérience API n'est requise.

Toutes les fonctionnalités de l'API REST sont accessibles, y compris :

  • les points de terminaison de données de marché publiques

  • les points de terminaison de gestion de compte privés

  • les points de terminaison de trading

  • les points de terminaison de financement privés

  • les points de terminaison de staking privés*

Le client en ligne de commande peut être utilisé comme un client API autonome, ou peut être appelé à partir d'autres programmes (tels que d'autres langages interprétés comme les scripts Bash, ou des langages compilés comme C/C++).

Installation

1. Installez NodeJS (si nécessaire).

  • macOS et Linux ont probablement déjà NodeJS installé.

  • Windows n'a probablement pas NodeJS installé, mais il peut être installé depuis https://www.nodejs.org/.

2. Téléchargez et enregistrez le fichier krakenapi.js sur votre ordinateur dans le dossier (répertoire) de votre choix. Par exemple :

Macintosh HD > Utilisateurs > Satoshi > KrakenAPI


3. Ouvrez une invite de commande (comme le Terminal de macOS) et naviguez jusqu'au dossier (répertoire) choisi à l'étape précédente.

Vous pouvez utiliser la commande « cd » (changer de répertoire) pour naviguer. Par exemple :

cd /Users/Satoshi/KrakenAPI


4. Ajoutez vos clés API dans le même dossier où vous conservez le fichier krakenapi.js.

Copiez/collez votre clé publique API depuis la gestion de compte dans un fichier texte brut appelé « API_PUBLIC_KEY ».

Copiez/collez votre clé privée (secrète) API dans un fichier texte brut appelé « API_PRIVATE_KEY ».

Une clé API n'est nécessaire que si vous prévoyez d'utiliser les points de terminaison API privés pour accéder à votre compte Kraken (tels que les demandes de solde, le placement/l'annulation d'ordres, les exportations d'historique de compte, etc.).

Consultez Comment générer une paire de clés API ? pour des instructions supplémentaires.

Exemples de commandes

L'utilisation du client en ligne de commande de l'API REST est la suivante :

bash

Bash

nodejs krakenapi.js endpoint [parameters]

The command line client supports all of the REST API endpoints. Here are a few example commands:

nodejs krakenapi.js Time
nodejs krakenapi.js Ticker pair=xbtusd
nodejs krakenapi.js Trades pair=etheur since=1574067140000000000
nodejs krakenapi.js Balance
nodejs krakenapi.js TradeBalance asset=xbt
nodejs krakenapi.js QueryOrders txid=O7MN22-ZCX7J-TGLQHD
nodejs krakenapi.js AddOrder pair=xbtusd type=buy ordertype=limit price=6500 volume=0.002 leverage=5
nodejs krakenapi.js CancelOrder txid=O7MN22-ZCX7J-TGLQHD

Code NodeJS

bash

Bash

const axios = require("axios");
const { clear } = require("console");
const crypto = require("crypto");
const fs = require("fs");

const main = async () => {
  let response = "";
  let apiMethod = "";
  let inputParameters = "";

  const api_private = [
    "Balance",
    "BalanceEx",
    "TradeBalance",
    "OpenOrders",
    "ClosedOrders",
    "QueryOrders",
    "TradesHistory",
    "QueryTrades",
    "OpenPositions",
    "Ledgers",
    "QueryLedgers",
    "TradeVolume",
    "AddExport",
    "ExportStatus",
    "RetrieveExport",
    "RemoveExport",
    "GetWebSocketsToken",
    "AddOrder",
    "AddOrderBatch",
    "EditOrder",
    "CancelOrder",
    "CancelAll",
    "CancelAllOrdersAfter",
    "DepositMethods",
    "DepositAddresses",
    "DepositStatus",
    "WithdrawInfo",
    "Withdraw",
    "WithdrawStatus",
    "WithdrawCancel",
    "WalletTransfer",
    "Staking/Assets",
    "Stake",
    "Unstake",
    "Staking/Pending",
    "Staking/Transactions",
  ];

  const api_public = [
    "Time",
    "Assets",
    "AssetPairs",
    "Ticker",
    "OHLC",
    "Depth",
    "Trades",
    "Spread",
    "SystemStatus",
  ];

  // Destructuring the input command
  if (process.argv.length < 3) {
    apiMethod = "Time";
  } else if (process.argv.length == 3) {
    apiMethod = process.argv[2];
  } else {
    apiMethod = process.argv[2];
    for (count = 3; count < process.argv.length; count++) {
      if (count == 3) {
        inputParameters = process.argv[count];
      } else {
        inputParameters = inputParameters + "&" + process.argv[count];
      }
    }
  }

  // Condition to check the private or public endpoints
  if (api_private.includes(apiMethod)) {
    response = await QueryPrivateEndpoint(apiMethod, inputParameters);

    if (apiMethod == "RetrieveExport") {
      try {
        fs.writeFileSync("Report.zip", response); // write the zip file response
        console.log("Report.zip file successfully received");
      } catch (err) {
        console.log(err);
      }
    } else {
      console.log(response.toString());
    }
  } else if (api_public.includes(apiMethod)) {
    response = await QueryPublicEndpoint(apiMethod, inputParameters);
    console.log(JSON.stringify(response));
  } else {
    console.log("Usage: app method [parameters]");
    console.log("Example: app OHLC pair=xbtusd interval=1440");
  }
};

// Public API Endpoint
async function QueryPublicEndpoint(endPointName, inputParameters) {
  let jsonData;
  const baseDomain = "https://api.kraken.com";
  const publicPath = "/0/public/";
  const apiEndpointFullURL = baseDomain + publicPath + endPointName + "?" + inputParameters;

  await axios
    .get(apiEndpointFullURL)
    .then((res) => {
      jsonData = res;
    })
    .catch((err) => {
      jsonData = err;
    });
  return jsonData.data;
}

// Private API Endpoint
async function QueryPrivateEndpoint(endPointName, inputParameters) {
  const baseDomain = "https://api.kraken.com";
  const privatePath = "/0/private/";

  const apiPublicKey = fs.readFileSync("API_PUBLIC_KEY").toString().trim(); // get data from API_PUBLIC_KEY text file
  const apiPrivateKey = fs.readFileSync("API_PRIVATE_KEY").toString().trim(); // get data from API_PRIVATE_KEY text file

  const apiEndpointFullURL = baseDomain + privatePath + endPointName;
  const nonce = Date.now().toString();
  const apiPostBodyData = "nonce=" + nonce + "&" + inputParameters;

  const signature = CreateAuthenticationSignature(
    apiPrivateKey,
    privatePath,
    endPointName,
    nonce,
    apiPostBodyData
  );
  const httpOptions = {
    headers: { "API-Key": apiPublicKey, "API-Sign": signature },
    responseType: "arraybuffer",
  };

  let jsonData;
  await axios
    .post(apiEndpointFullURL, apiPostBodyData, httpOptions)
    .then((res) => {
      jsonData = res;
    })
    .catch((err) => {
      jsonData = err;
    });

  return jsonData.data;
}

// Authentication algorithm
function CreateAuthenticationSignature(
  apiPrivateKey,
  apiPath,
  endPointName,
  nonce,
  apiPostBodyData
) {
  const apiPost = nonce + apiPostBodyData;
  const secret = Buffer.from(apiPrivateKey, "base64");
  const sha256 = crypto.createHash("sha256");
  const hash256 = sha256.update(apiPost).digest("binary");
  const hmac512 = crypto.createHmac("sha512", secret);
  const signatureString = hmac512
    .update(apiPath + endPointName + hash256, "binary")
    .digest("base64");
  return signatureString;
}

main();

*Un aperçu des critères d'éligibilité (y compris les restrictions géographiques) pour le staking peut être trouvé ici.

Besoin d’aide supplémentaire ?