Keys & players
Discord bot
A member panel in your server — players get keys, redeem, fetch the script and reset their HWID themselves.
On this page
Connecting a server
- Open Discord Bot (sidebar → Integrations) and add the SantiAuth bot to your server.
- Pick the server in the list to bind it to the service.
- Post a panel in a channel (see below).
Each connected server has its own sections: Overview, Panels, Roles, Rewards, Notifications and Activity.
Member panel
A panel is a message with buttons. Every button works for the player who presses it — replies are private.
| Button | What the player gets |
|---|---|
| Get Key | Their personal key-page link — or their current key if they already have one. |
| Redeem Key | A form to paste a key. The key is linked to their Discord account (SA_LinkedDiscordID) and roles are synced. |
| Get Script | The loader snippet you set on the panel. |
| Mobile | A separate reply for phone players, e.g. a copy-friendly loader. |
| Get Role | Syncs their Discord role with their key (Standard / Premium). |
| Reset HWID | Lets them pick a bound device and unbind it — no ticket needed. |
| Get Stats | Key status, type and expiry. |
| Pay with Robux | Buy a key with Robux through your Robux shop. Off by default — turn it on per panel. |
You can hide any button, rename it, change its emoji and color, and add custom buttons. Each button can be open to everyone, to key holders only or to Premium key holders only (in keyless mode key-holder buttons open to everyone).
Slash commands
Members:
/key info — status, expiry and devices of your key
/key redeem — link a license key to your Discord account
/key reset-hwid — unbind your key from its device
/script — get the script for this service
/invites — your invite count and the next invite reward
/boost status — your booster rewards and when the next one unlocks
/boost claim — collect unlocked booster rewardsService admins (/admin):
| Command | What it does |
|---|---|
/admin key create | Create up to 10 keys: minutes (empty = lifetime), premium, name. |
/admin key list / info | Keys of a user or the latest keys; details of one key. |
/admin key extend | Add minutes to a key. |
/admin key revoke / unrevoke | Block or unblock a key. |
/admin key reset-hwid / delete | Unbind a key's device; delete a key (asks to confirm). |
/admin user ban / unban / bans | Ban a Discord user (optionally for N minutes), lift a ban, list active bans. |
/admin info | Service overview: keys, providers, bans, panel state. |
/admin stats | Statistics for 7 or 30 days. |
/admin maintenance | Turn the panel's maintenance mode on or off. |
Custom messages
Every reply can be rewritten in Panels (panel → Responses). Use placeholders between percent signs, e.g. %key% (write %% for a literal %):
| Placeholder | Value |
|---|---|
%discord_mention%, %discord_username%, %user_name%, %discord_user_id% | The player. |
%key%, %key_masked% | Their key, full or masked. |
%key_type%, %is_premium%, %key_status%, %expires_at%, %created_at%, %last_used_at%, %executions% | Key details. |
%key_url% | Their personal key-page link (signed for this member). |
%script% | The panel's loader snippet. |
%resets_left%, %next_reset_at%, %devices_count%, %hwid_reset_status% | HWID reset details. |
%redeem_result%, %role_name%, %role_assigned%, %cooldown% | Results of Redeem, Get Role and cooldowns. |
%service_name%, %service_slug%, %provider_name%, %panel_name% | Your service, provider and panel. |
%date%, %time% | Current date and time. |
Unknown placeholders are flagged when you save.
For example, a Get Script reply (inside a lua code block) that hands out a ready-to-run loader:
script_key = "%key%"
%script%Roles
Set a Basic access role (given for any active key) and a Premium access role (for Premium keys, on top of Basic). With Grant automatically on Redeem on, roles are granted on Redeem and Get Role; otherwise players only get their key linked.
Rewards
- Invite rewards — hand out a key or a role when a member reaches a number of verified invites. Anti-abuse rules ignore bots, self-invites and rejoins, can subtract leavers, and can require a role, a minimum account age and a hold period.
- Booster rewards — reward members who boost your server. Boosters check and collect rewards with the slash commands:
/boost status — see your rewards and when the next one unlocks
/boost claim — collect unlocked rewardsNotifications and activity
Notifications posts public announcements (e.g. a thank-you for boosts) and a private staff log to channels you choose. Activity lists every panel action — who pressed what and whether it worked.
Discord webhooks from your script
Posting to a Discord webhook straight from Lua leaks its URL — anyone can dump it and spam your channel. Instead, create a relay in Webhooks → Discord notifications: SantiAuth stores the real Discord URL and gives you a public dispatch URL with a Rate limit — max messages per caller IP each minute (0 = no throttling).
local HttpService = game:GetService("HttpService")
request({
Url = "https://api.santiauth.com/api/v1/discord-webhooks/<dispatch-id>/dispatch",
Method = "POST",
Headers = { ["Content-Type"] = "application/json" },
Body = HttpService:JSONEncode({
values = { roblox_username = game.Players.LocalPlayer.Name, place_id = tostring(game.PlaceId) },
}),
})The embed is designed in the dashboard; {placeholders} in curly braces are filled from values — key, script_name, provider_name, service_name, hwid, place_id, roblox_username, roblox_job_id, roblox_universe_id, executor, timestamp and more. Unknown placeholders stay as typed so you can spot typos. Over the limit extra events are dropped.