JAuth Logo
J

JAuth

Jake's Key Authenticator
Sign In
Create Account
Logo
J

JAuth

Jake's Key Authenticator
Dashboard Applications License Keys HWID Manager Activity Logs Integration & SDK Documentation Settings
Sign Out
JAuth / Dashboard
App:
J Jake Admin

Welcome back

Here's an overview of your JAuth account and applications.
Applications
0
Active programs
Total Keys
0
Lifetime keys
Active Keys
0
0% of total keys
Auth Requests
0
0 today

Recent License Keys

View all
License Key Application Status Expiration HWID Lock Actions
Loading keys...

Quick Actions

Applications

Manage programs, client secrets, and hardware lock enforcement.

License Keys

Create, extend, pause, ban, and hardware-reset client license keys.
0 selected:
License Key Application Status Duration / Expiration HWID Lock Note Actions
Loading keys...

Hardware ID Manager

Safe & minimal hardware locking. View bound machine hashes and manage hardware resets.

Active Hardware Bindings

0 Bound Devices
License Key Application Hardware ID (Minimal Hash) Last Active Resets Platform / IP Action
No locked hardware records found.

Activity Logs

Live audit logs of client authentications, HWID validations, and admin actions.
Timestamp Event Application License Key HWID / IP Hint Message
Loading logs...

Client Integration & SDK

KeyAuth-style simple integration. Connect your C++, Python, C#, or Roblox script in minutes.

Simple 3-Line Setup

Just like KeyAuth, define your program credentials and initialize. skCrypt or string encryption can be added easily if you want protection against memory inspection:

// Standard KeyAuth-style structure
std::string name = "Temp Woofer v2"; 
std::string ownerid = "usr_xxxxxx"; 
std::string version = "1.0"; 
std::string url = "https://jauth.site/api/v1/";
std::string path = ""; // optional

JAuth::api jauth(name, ownerid, version, url);
jauth.init();
if (jauth.license(user_key)) {
    // Authenticated! HWID bound & subscription verified.
}
Your Owner ID: usr_xxxx
API Base URL: https://jauth.site/api/v1/
Include sdk/cpp/jauth.hpp in your project:
#include <iostream>
#include "jauth.hpp"

// Define application configuration
std::string name = "Temp Woofer v2"; 
std::string ownerid = "YOUR_OWNER_ID"; 
std::string version = "1.0"; 
std::string url = "https://jauth.site/api/v1/";
std::string path = "";

JAuth::api jauth(name, ownerid, version, url);

int main() {
    std::cout << "[*] Connecting to JAuth..." << std::endl;
    if (!jauth.init()) {
        std::cout << "[-] Failed to connect: " << jauth.response.message << std::endl;
        system("pause");
        return 0;
    }

    std::string key;
    std::cout << "[?] Enter License Key: ";
    std::cin >> key;

    if (jauth.license(key)) {
        std::cout << "[+] Logged in successfully!" << std::endl;
        std::cout << "[+] Tier: " << jauth.response.tier << std::endl;
        std::cout << "[+] Days Left: " << jauth.response.daysleft << std::endl;
        std::cout << "[+] Locked HWID: " << jauth.response.hwid << std::endl;

        // Run your protected program code here
    } else {
        std::cout << "[-] Authentication Failed: " << jauth.response.message << std::endl;
    }

    system("pause");
    return 0;
}
Include sdk/python/jauth.py in your project:
from jauth import JAuth

# Configure your application
name = "Temp Woofer v2"
ownerid = "YOUR_OWNER_ID"
version = "1.0"
url = "https://jauth.site/api/v1/"

jauth = JAuth(name=name, ownerid=ownerid, version=version, url=url)

if not jauth.init():
    print("[-] Initialization failed!")
    exit()

license_key = input("Enter License Key: ").strip()

if jauth.license(license_key):
    print(f"[+] Login Successful! Tier: {jauth.data.get('tier')} | Days Left: {jauth.data.get('daysleft')}")
    # Run protected program
else:
    print(f"[-] Authentication Failed: {jauth.error_message}")
Include sdk/csharp/JAuth.cs in your project:
using System;
using System.Threading.Tasks;
using JAuth;

class Program
{
    static async Task Main(string[] args)
    {
        string name = "Temp Woofer v2";
        string ownerid = "YOUR_OWNER_ID";
        string version = "1.0";
        string url = "https://jauth.site/api/v1/";

        api jauth = new api(name, ownerid, version, url);

        Console.WriteLine("[*] Initializing JAuth...");
        if (!await jauth.InitAsync())
        {
            Console.WriteLine("[-] Init failed: " + jauth.ErrorMessage);
            return;
        }

        Console.Write("Enter License Key: ");
        string key = Console.ReadLine();

        if (await jauth.LicenseAsync(key))
        {
            Console.WriteLine("[+] Authenticated successfully!");
            // Run your program
        }
        else
        {
            Console.WriteLine("[-] Authentication failed: " + jauth.ErrorMessage);
        }
    }
}
Include sdk/roblox/JAuth.lua in your script:
local JAuth = require(script.JAuth)
local Players = game:GetService("Players")

local name = "Temp Woofer v2"
local ownerid = "YOUR_OWNER_ID"
local version = "1.0"
local url = "https://jauth.site/api/v1/"

local jauth = JAuth.new(name, ownerid, version, url)
local initialized, err = jauth:init()

if not initialized then
    warn("JAuth init failed:", err)
    return
end

local function verifyPlayerKey(player, licenseKey)
    local success, result = jauth:license(player, licenseKey)
    if success then
        print(player.Name .. " validated key successfully!")
        return true
    else
        warn("Key failed for " .. player.Name .. ":", result)
        return false
    end
end
# 1. Initialize
curl -X POST https://jauth.site/api/v1/init \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Temp Woofer v2",
    "ownerid": "YOUR_OWNER_ID",
    "version": "1.0"
  }'

# 2. Authenticate License Key
curl -X POST https://jauth.site/api/v1/license \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Temp Woofer v2",
    "ownerid": "YOUR_OWNER_ID",
    "key": "JAUTH-XXXX-XXXX-XXXX",
    "hwid": "SAFE_MACHINE_HASH_12345"
  }'

Documentation

Complete developer guide, API references, architecture, and deployment for JAuth.

1. System Architecture & Overview

JAuth is an ultra-lightweight, high-performance software licensing and hardware lock authentication platform designed as a modern alternative to KeyAuth. It is built to operate with zero external server costs on Cloudflare's free global edge network (Cloudflare Pages, Workers, and D1 SQLite) or self-hosted locally on Node.js.

Zero Telemetry Privacy

No invasive file collection, private registry scanning, or intrusive telemetry. Safe minimal hardware IDs only.

KeyAuth-Compatible Syntax

Drop-in structure with name, ownerid, version, and url parameters.

100% Free Hosting

Built for Cloudflare D1 (5,000,000 queries/day free) and Cloudflare Pages edge isolates.

2. Applications & Secrets

Inside your JAuth account, you can create multiple distinct applications (e.g. Temp Woofer v2, Game Loader Pro, Discord Bot). Each application has:

  • Name: The display name of your program (e.g. Temp Woofer v2).
  • App ID: A unique system identifier (e.g. app_1d37460c91a59523).
  • App Secret: A cryptographic 32-byte secret (e.g. sec_...) used to sign response payloads and secure admin operations.
  • HWID Lock Policy: Toggle whether licenses in this application are locked to specific machines or can be freely transferred.

3. License Keys & Expiration Cycles

JAuth supports both first-use activation and fixed-date expiration:

  • First-Use Activation (Default): The key is generated with a duration (e.g. 30 days). The countdown timer does NOT start until the customer enters it into your program for the first time.
  • Fixed Expiration: The countdown begins immediately upon generation.
  • Lifetime: The key never expires.
  • Adding Time: You can extend any key by adding days or hours in real time from the dashboard.
  • Pausing & Banning: Paused keys can be unpaused anytime. Banned keys record a permanent ban reason and reject all incoming auth requests.

4. Hardware Locking & HWID Resets

To prevent key sharing without collecting invasive user data, JAuth hashes minimal machine properties into a safe string:

// Example minimal Windows HWID generator:
DWORD serialNum = 0;
GetVolumeInformationA("C:\\", NULL, 0, &serialNum, NULL, NULL, NULL, 0);
char hwid[64];
sprintf_s(hwid, "JAUTH-%08X-PC", serialNum);

When a customer gets a new PC or replaces hardware components, simply navigate to HWID Manager or License Keys and click Reset HWID. The key will cleanly bind to their new machine on their next launch.

5. REST API Reference

Endpoint Method Required Body Fields Description
/api/v1/init POST name, ownerid, version Initializes client session, verifies application status.
/api/v1/license POST name, ownerid, key, hwid Authenticates license key, verifies expiry, and locks HWID.
/api/v1/check POST name, ownerid Fast heartbeat / session validity check.

6. Deploying to Cloudflare (Free Hosting)

JAuth is 100% pre-configured for free deployment to Cloudflare using Wrangler CLI:

  1. Log in: npx wrangler login
  2. Create free D1 database: npx wrangler d1 create jauth-db
  3. Run database schema: npm run cf:db
  4. Deploy worker and frontend: npm run deploy:cf
  5. Attach your domain jauth.site in the Cloudflare dashboard under Workers > Custom Domains!

Account & System Settings

Manage security, credentials, backups, and Cloudflare setup.

Change Password

Hosting & Domain Status

Domain jauth.site
Hosting Target Cloudflare Pages / Workers (Free)
Database Cloudflare D1 / Local JSON DB
View Cloudflare Deployment Guide

Registration Restricted

JAuth currently is not accepting new users.

Please try again at a later date.

Generate License Keys

Add Single Key

Create New Application

Add Time to License

Edit Expiration Date

Ban License Key

Bulk Add Time to Selected Keys

Adding time will extend all active keys selected by the specified number of days.