Client API

Put Keyguard in your app

Every product call after init is HMAC-signed. Replay is blocked with nonce + timestamp. Do not embed a seller key in the client.

You need

  • App name (exactly as in the panel)
  • Owner ID (Overview or Setup tab)
  • A license key or a user you created

C#

Add KeyguardClient.cs to the project.

var kg = new Keyguard.Client.KeyguardClient("https://api.keyguard.live");
await kg.InitAsync("YourAppName", "OWNERID");
await kg.LicenseAsync(licenseKey, hwid);
// or: await kg.LoginAsync(user, pass, hwid);

Files in the loader

The Files tab assigns a random File ID and a full SHA-256. Copy both (or use Copy for loader). After a signed file download, compare the hash before writing bytes to disk.

var file = await kg.FileAsync("FILEID", expectedSha256: "SHA256_FROM_PANEL");
File.WriteAllBytes(file.Name, file.Bytes);

If the hash does not match, the SDK throws. Do not embed a seller key or website API key in the product. Loaders get dumped.

Python

Drop keyguard.py next to your entrypoint. pip install requests.

from keyguard import KeyguardClient
kg = KeyguardClient("https://api.keyguard.live")
kg.init("YourAppName", "OWNERID")
kg.license(key, hwid)

Node / Electron

keyguard.js

const { KeyguardClient } = require("./keyguard");
const kg = new KeyguardClient("https://api.keyguard.live");
await kg.init("YourAppName", "OWNERID");
await kg.license(key, hwid);

Protocol (any language)

  1. POST /api/client/v1/init with { "name", "ownerId" }. Response: sessionid, enckey (base64).
  2. For each action, HMAC-SHA256 of type|timestamp|nonce|sessionid|payloadJson using the decoded enckey.
  3. POST /api/client/v1/dispatch with type, sessionid, timestamp, nonce, signature, payload.

Actions: login, license, register, upgrade, renew, check, logout, changepassword, var, getvar, setvar, file, webhook, log, chatget, chatsend, fetchstats, updates.

The Setup tab in the panel fills Owner ID and app name for you.