REST API Befehlszeilen-Client (NodeJS)

Zuletzt aktualisiert: 31. Dez. 2025

Der REST API-Befehlszeilen-Client in NodeJS ermöglicht den vollständigen Zugriff auf die Kraken REST API über die Befehlszeile (z. B. Terminal unter macOS), sodass keine Programmierkenntnisse oder API-Erfahrung erforderlich sind.

Alle REST API-Funktionen sind zugänglich, einschließlich:

  • öffentliche Marktdaten-Endpunkte

  • private Kontoverwaltungs-Endpunkte

  • Handels-Endpunkte

  • private Funding-Endpunkte

  • private Staking-Endpunkte*

Der Befehlszeilen-Client kann als eigenständiger API-Client verwendet oder von anderen Programmen (wie anderen interpretierten Sprachen wie Bash-Skripten oder kompilierten Sprachen wie C/C++) aufgerufen werden.

Installation

1. NodeJS installieren (falls erforderlich).

  • macOS und Linux haben NodeJS wahrscheinlich bereits installiert.

  • Windows hat NodeJS wahrscheinlich nicht installiert, aber es kann von https://www.nodejs.org/ installiert werden.

2. Laden Sie die krakenapi.js Datei auf Ihren Computer in den Ordner (Verzeichnis) Ihrer Wahl herunter und speichern Sie sie. Zum Beispiel:

Macintosh HD > Users > Satoshi > KrakenAPI


3. Öffnen Sie eine Eingabeaufforderung (z. B. das Terminal von macOS), und navigieren Sie zu dem Ordner (Verzeichnis), das im vorherigen Schritt ausgewählt wurde.

Sie können den Befehl „cd“ (change directory) verwenden, um zu navigieren. Zum Beispiel:

cd /Users/Satoshi/KrakenAPI


4. Fügen Sie Ihre API-Schlüssel in denselben Ordner, in dem Sie die krakenapi.js Datei aufbewahren.

Kopieren/fügen Sie Ihren öffentlichen API-Schlüssel aus der Kontoverwaltung in eine einfache Textdatei namens „API_PUBLIC_KEY“.

Kopieren/fügen Sie Ihren privaten (geheimen) API-Schlüssel in eine einfache Textdatei namens „API_PRIVATE_KEY“.

Ein API-Schlüssel wird nur benötigt, wenn Sie die privaten API-Endpunkte verwenden möchten, um auf Ihr Kraken-Konto zuzugreifen (z. B. Saldoabfragen, Platzieren/Stornieren von Aufträgen, Export von Kontoverläufen usw.).

Siehe Wie generiere ich ein API-Schlüsselpaar? für weitere Anweisungen.

Beispielbefehle

Die Verwendung des REST API-Befehlszeilen-Clients ist wie folgt:

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

NodeJS-Code

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();

*Eine Übersicht über die Zulassungskriterien (einschließlich geografischer Beschränkungen) für Staking finden Sie hier.

Brauchst du weitere Hilfe?