Introduction
Secure licensing & authentication made simple
Welcome to ApexAuth documentation. ApexAuth is a high-fidelity, secure, and modern authentication and software licensing platform built for developers, software publishers, and reseller administrators.
Our platform offloads complex encryption, license key validation, user login sessions, and subscription management from your software binaries to our secure servers, protecting you from cracking and unauthorized sharing.
What is ApexAuth?
ApexAuth acts as a cloud-based gateway that intercepts all auth actions. Instead of writing custom database connectors, password hashing routines, and local licensing code, you can use our pre-built developer APIs and SDKs to manage access.
What can ApexAuth be used for?
- Reseller Management: Delegate key generation and user assignment rights to trusted third-party resellers.
- HWID Security Binding: Restrict software license usage to verified machines using multi-parameter HWID locks.
- Real-time Session Kill: Instantly track, inspect, or terminate live user login sessions from your Dashboard.
- Cloud Variables: Inject sensitive application strings, configurations, or URLs dynamically into memory only after successful login.
Security Practices
How ApexAuth protects your software binary integrity
Cracking platforms rely on sniffing local logic paths or dumping active process memory. ApexAuth protects your system by applying robust client-server integrity verification measures.
HMAC-SHA256 Request Signing
Every SDK call to our servers contains an encrypted signature. The client signs request parameters using the HMAC-SHA256 algorithm with your application's private token, ensuring that payload tampering or replay requests are blocked at the server gate.
Hardware Fingerprint (HWID) Validation
Standard license validation can be shared across computers easily. With ApexAuth, when a license is activated, the system calculates and locks a hardware identifier (HWID) combining variables like CPU IDs, OS version, and motherboard details. Subsequent queries are verified against this record.
Cloud-Stored Encryption Variables
Never hardcode decrypt keys, URLs, or crucial logic strings inside your app code. Instead, write them as variables in the dashboard. ApexAuth securely streams these variables over HTTPS only after confirming the HWID and session credentials are valid.
Integration SDKs & Starter Kits
Universal zero-dependency client libraries and runnable starter templates
The SDK file is universal and must NEVER be modified. All developers use the exact same static library. You do not touch or put credentials inside the SDK file. Simply drop the SDK into your project and initialize it in your entry file (main.cpp, Program.cs, main.py, etc.) using your application credentials from the dashboard.
Universal SDK Libraries & Starter Kits
Download our official zero-dependency SDK file for your language, or grab a complete runnable starter kit with boilerplate logic ready to compile:
Integration Code Boilerplates
Select your language below to inspect the complete entry file boilerplate. Initialize the client using your credentials from the developer dashboard:
// C++ Native WinHTTP Client (Drop apexauth.h into your project)
#include <iostream>
#include <windows.h>
#include "apexauth.h"
using namespace ApexAuth;
// Global instance — replace placeholders with dashboard credentials
std::string name = "YOUR_APP_NAME";
std::string ownerid = "YOUR_OWNER_ID";
std::string secret = "YOUR_APP_SECRET";
std::string version = "1.0";
std::string url = "https://apexauth.online/api/v1";
api ApexApp(name, ownerid, secret, version, url);
int main() {
SetConsoleTitleA("ApexAuth Loader");
std::cout << "\n Connecting to server...";
ApexApp.init();
if (!ApexApp.response.success) {
std::cout << "\n [!] " << ApexApp.response.message << std::endl;
Sleep(2500);
return 0;
}
std::cout << "\n\n [1] Login\n [2] Register\n [3] License Key Only\n\n Select option: ";
int option;
std::cin >> option;
if (option == 1) {
std::string user, pass;
std::cout << " Enter username: "; std::cin >> user;
std::cout << " Enter password: "; std::cin >> pass;
ApexApp.login(user, pass);
}
else if (option == 2) {
std::string user, pass, key;
std::cout << " Enter username: "; std::cin >> user;
std::cout << " Enter password: "; std::cin >> pass;
std::cout << " Enter license key: "; std::cin >> key;
ApexApp.register_user(user, pass, key);
}
else if (option == 3) {
std::string key;
std::cout << " Enter license key: "; std::cin >> key;
ApexApp.license(key);
}
if (!ApexApp.response.success) {
std::cout << "\n [!] Auth Failed: " << ApexApp.response.message << std::endl;
Sleep(2500);
return 0;
}
std::cout << "\n [+] Welcome " << ApexApp.user_data.username << "!\n";
std::cout << " [+] HWID: " << ApexApp.user_data.hwid << "\n";
std::cout << " [+] Expiry: " << ApexApp.user_data.expiry << "\n\n";
system("pause");
return 0;
}
// C# .NET Native Client (Drop apexauth.cs into your project)
using System;
using ApexAuth;
namespace LoaderApp
{
class Program
{
// Global static instance — accessible everywhere
public static api ApexApp = new api(
name: "YOUR_APP_NAME",
ownerid: "YOUR_OWNER_ID",
secret: "YOUR_APP_SECRET",
version: "1.0",
url: "https://apexauth.online/api/v1"
);
static void Main(string[] args)
{
Console.Title = "ApexAuth Loader";
Console.WriteLine("Connecting to authentication server...");
ApexApp.init();
if (!ApexApp.response.success)
{
Console.WriteLine("Error: " + ApexApp.response.message);
Console.ReadKey();
return;
}
Console.WriteLine("\n[1] Login\n[2] Register\n[3] License Key Only\n");
Console.Write("Select option: ");
string option = Console.ReadLine();
if (option == "1")
{
Console.Write("Username: "); string user = Console.ReadLine();
Console.Write("Password: "); string pass = Console.ReadLine();
ApexApp.login(user, pass);
}
else if (option == "2")
{
Console.Write("Username: "); string user = Console.ReadLine();
Console.Write("Password: "); string pass = Console.ReadLine();
Console.Write("License: "); string key = Console.ReadLine();
ApexApp.register_user(user, pass, key);
}
else if (option == "3")
{
Console.Write("Enter License Key: "); string key = Console.ReadLine();
ApexApp.license(key);
}
if (!ApexApp.response.success)
{
Console.WriteLine("\n[!] Auth Failed: " + ApexApp.response.message);
Console.ReadKey();
return;
}
Console.WriteLine("\n[+] Welcome " + ApexApp.user_data.username + "!");
Console.WriteLine("[+] Machine HWID: " + ApexApp.user_data.hwid);
Console.WriteLine("[+] Expiry Date: " + ApexApp.user_data.expiry);
Console.WriteLine("\nPress any key to launch application...");
Console.ReadKey();
}
}
}
# Python 3 Native Client (Drop apexauth.py into your project)
from apexauth import api
import sys
# Instantiate universal client
name = "YOUR_APP_NAME"
ownerid = "YOUR_OWNER_ID"
secret = "YOUR_APP_SECRET"
version = "1.0"
url = "https://apexauth.online/api/v1"
ApexApp = api(name, ownerid, secret, version, url)
print("Connecting to authentication server...")
ApexApp.init()
if not ApexApp.response.success:
print(f"\n[!] Error: {ApexApp.response.message}")
sys.exit(1)
print("\n[1] Login\n[2] Register\n[3] License Key Only")
opt = input("\nSelect option: ")
if opt == "1":
u = input("Username: ")
p = input("Password: ")
ApexApp.login(u, p)
elif opt == "2":
u = input("Username: ")
p = input("Password: ")
k = input("License Key: ")
ApexApp.register(u, p, k)
elif opt == "3":
k = input("License Key: ")
ApexApp.license(k)
if not ApexApp.response.success:
print(f"\n[!] Authentication Failed: {ApexApp.response.message}")
sys.exit(1)
print(f"\n[+] Authenticated successfully! Welcome, {ApexApp.user_data.username}")
print(f"[+] Machine HWID: {ApexApp.user_data.hwid}")
print(f"[+] Access Expiry: {ApexApp.user_data.expiry}")
// Rust Native Client (Drop apexauth.rs into your src/ directory)
mod apexauth;
use apexauth::ApexAuth;
use std::io::{self, Write};
fn main() {
let name = "YOUR_APP_NAME";
let ownerid = "YOUR_OWNER_ID";
let secret = "YOUR_APP_SECRET";
let version = "1.0";
let url = "https://apexauth.online/api/v1";
let mut apex = ApexAuth::new(name, ownerid, secret, version, url);
println!("Connecting to authentication server...");
apex.init();
if !apex.response.success {
println!("\n[!] Initialization failed: {}", apex.response.message);
return;
}
println!("\n[1] Login\n[2] Register\n[3] License Key Only");
print!("Select option: ");
io::stdout().flush().unwrap();
let mut choice = String::new();
io::stdin().read_line(&mut choice).unwrap();
match choice.trim() {
"1" => {
print!("Username: "); io::stdout().flush().unwrap();
let mut u = String::new(); io::stdin().read_line(&mut u).unwrap();
print!("Password: "); io::stdout().flush().unwrap();
let mut p = String::new(); io::stdin().read_line(&mut p).unwrap();
apex.login(u.trim(), p.trim());
}
"2" => {
print!("Username: "); io::stdout().flush().unwrap();
let mut u = String::new(); io::stdin().read_line(&mut u).unwrap();
print!("Password: "); io::stdout().flush().unwrap();
let mut p = String::new(); io::stdin().read_line(&mut p).unwrap();
print!("License Key: "); io::stdout().flush().unwrap();
let mut k = String::new(); io::stdin().read_line(&mut k).unwrap();
apex.register(u.trim(), p.trim(), k.trim(), None);
}
"3" => {
print!("Enter License Key: "); io::stdout().flush().unwrap();
let mut k = String::new(); io::stdin().read_line(&mut k).unwrap();
apex.license(k.trim());
}
_ => {
println!("Invalid choice");
return;
}
}
if !apex.response.success {
println!("\n[!] Authentication Failed: {}", apex.response.message);
} else {
println!("\n[+] Authenticated successfully!");
println!("[+] User: {}", apex.user_data.username);
println!("[+] HWID: {}", apex.user_data.hwid);
println!("[+] Expiry: {}", apex.user_data.expiry);
}
}
// TypeScript / Electron Client (Drop apexauth.ts into your project)
import { ApexAuth } from './apexauth';
import * as readline from 'readline';
const apex = new ApexAuth(
"YOUR_APP_NAME",
"YOUR_OWNER_ID",
"YOUR_APP_SECRET",
"1.0",
"https://apexauth.online/api/v1"
);
async function bootstrap() {
console.log("Connecting to authentication server...");
const initRes = await apex.init();
if (!initRes.success) {
console.error(`[!] Init Failed: ${initRes.message}`);
process.exit(1);
}
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
rl.question('Enter License Key: ', async (licenseKey) => {
const auth = await apex.license(licenseKey.trim());
if (!auth.success) {
console.error(`[!] Authorization Denied: ${auth.message}`);
} else {
console.log(`[+] Welcome ${apex.user_data.username || 'License User'}!`);
console.log(`[+] Hardware ID: ${apex.user_data.hwid}`);
console.log(`[+] Expiry Date: ${apex.user_data.expiry}`);
}
rl.close();
});
}
bootstrap();
// Node.js Client (Drop apexauth.js into your project)
const ApexAuth = require('./apexauth');
const name = "YOUR_APP_NAME";
const ownerid = "YOUR_OWNER_ID";
const secret = "YOUR_APP_SECRET";
const version = "1.0";
const url = "https://apexauth.online/api/v1";
const ApexApp = new ApexAuth(name, ownerid, secret, version, url);
async function run() {
console.log("Connecting to authentication server...");
await ApexApp.init();
if (!ApexApp.response.success) {
console.log(`[!] Error: ${ApexApp.response.message}`);
return;
}
// Authenticate with License Key
const licenseKey = "APX-YOUR-LICENSE-KEY";
await ApexApp.license(licenseKey);
if (!ApexApp.response.success) {
console.log(`[!] Auth Failed: ${ApexApp.response.message}`);
return;
}
console.log(`[+] Authenticated! HWID: ${ApexApp.user_data.hwid}`);
console.log(`[+] Expiry: ${ApexApp.user_data.expiry}`);
}
run();
// Java Native Client (Drop ApexAuth.java into your apexauth package)
import apexauth.ApexAuth;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String name = "YOUR_APP_NAME";
String ownerid = "YOUR_OWNER_ID";
String secret = "YOUR_APP_SECRET";
String version = "1.0";
String url = "https://apexauth.online/api/v1";
ApexAuth apex = new ApexAuth(name, ownerid, secret, version, url);
System.out.println("Connecting to authentication server...");
apex.init();
if (!apex.response.success) {
System.out.println("[!] " + apex.response.message);
return;
}
Scanner scanner = new Scanner(System.in);
System.out.print("Enter License Key: ");
String key = scanner.nextLine();
apex.license(key);
if (!apex.response.success) {
System.out.println("[!] Failed: " + apex.response.message);
} else {
System.out.println("[+] Welcome " + apex.user_data.username);
System.out.println("[+] Machine HWID: " + apex.user_data.hwid);
System.out.println("[+] Expiry Date: " + apex.user_data.expiry);
}
}
}
Manage Applications
Configuring application variables and limits in your portal
Once inside the Developer Dashboard, you can select and manage individual platforms. Below are the core dashboards sections you should configure:
Creating an Application
To begin licensing, click Create Application, assign a brand name, and specify security guidelines (such as allowing multiple logins per user, or choosing the default subscription plan length).
Webhook Event Triggers
Configure webhook callback URLs inside the Webhooks settings. You can trigger automated Discord messages or server actions whenever a user registers, activates a key, or is banned for HWID matching anomalies.
API Reference
Direct HTTP API endpoints definitions
For custom application models or platforms without specific SDK libraries, you can make HTTP requests to our endpoints directly.
API Base URL
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| app_id | string | Required | The unique Application identifier code. |
| hwid | string | Required | The unique client hardware profile identification string. |
| signature | string | Required | HMAC-SHA256 signing of the request payload using client secret. |
| Parameter | Type | Requirement | Description |
|---|---|---|---|
| session_id | string | Required | The session token returned by the initial /init request. |
| username | string | Required | The user credential account ID. |
| password | string | Required | The user password key. |