Documentation
Quickstart
This walks you through minting and validating your first key. Time budget: 5 minutes.
1. Sign up
Create an account at /signup. You'll automatically get a workspace (organization) on the free plan.
2. Create an application
In the dashboard go to Applications → New application. Give it a name (e.g. Acme Studio). KeyStack will create:
- A unique application ID.
- An empty license-key board.
- A default
productionAPI key (visible only on creation — copy it now).
3. Issue a license
From your backend, POST a signed request to the public API:
TS=$(date +%s)
KEY="your-api-key-secret"
BODY='{"planCode":"basic","customer":{"email":"alice@example.com"},"duration":"365d"}'
SIG=$(printf "%s.%s" "$TS" "$BODY" | openssl dgst -sha256 -hmac "$KEY" -hex | sed 's/^.* //')
curl https://api.keystack.dev/v1/issue \
-H "Authorization: Bearer ak_live_..." \
-H "X-KeyStack-Timestamp: $TS" \
-H "X-KeyStack-Signature: $SIG" \
-H "Content-Type: application/json" \
-d "$BODY"You'll get back a KS-... license key:
{
"id": "ckxz1ab2c0000abcd",
"key": "KS-7F3K9-9XYLM-4N2A1-Q7C9F-WT2K",
"status": "ACTIVE",
"expiresAt": "2027-05-15T20:00:00.000Z",
"customer": { "id": "cus_8a3f...", "email": "alice@example.com" }
}4. Validate it
In your product (desktop app, server, whatever the user runs):
curl https://api.keystack.dev/v1/validate \
-H "Authorization: Bearer ak_live_..." \
-H "X-KeyStack-Timestamp: $TS" \
-H "X-KeyStack-Signature: $SIG" \
-H "Content-Type: application/json" \
-d '{"key":"KS-7F3K9-9XYLM-4N2A1-Q7C9F-WT2K","fingerprint":"machine-uuid"}'Response:
{
"valid": true,
"status": "ACTIVE",
"expiresAt": "2027-05-15T20:00:00.000Z",
"plan": { "code": "basic", "name": "Basic", "features": {} },
"customer": { "id": "cus_8a3f...", "email": "alice@example.com" },
"activations": { "used": 1, "max": 1 }
}5. Wire it up to Stripe (optional)
Drop the KeyStack webhook URL into Stripe and KeyStack will auto-issue a license every time checkout.session.completed fires. See Stripe for the full walkthrough.
That's it — you're done. Now go to the dashboard and watch your validations roll in.