API reference
Bans & key holders
Ban a Discord account or device from a whole service, and look up everyone who holds your keys.
A ban applies to the entire service: a banned Discord account or HWID can't validate any key, get a new one from the key page or redeem one in your Discord bot. Bans need keys:write; lookups need keys:read.
Ban a key holder
Bans a Discord account (subject_type: "discord") or a device (subject_type: "hwid"). Omit duration_minutes for a permanent ban. Banning someone who is already banned replaces the old ban.
Bodyapplication/json
service_idintegerrequired> 0Service the resource belongs to
subject_typestringrequiredWhat to ban
One ofdiscordhwidsubjectstringrequired1–512 charsDiscord user id or HWID
reasonstring | null≤ 256 charsShown to your team only
duration_minutesinteger | null1–525600Omit for a permanent ban
Response fieldsinside data
idstringsubject_typestringOne ofdiscordhwidsubjectstringreasonstring | nullexpires_atdatetime | nullnull = permanent
created_atdatetime
curl -X POST "https://api.santiauth.com/api/keys/bans" \
-H "x-api-key: $SANTIAUTH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"service_id": 1,
"subject_type": "discord",
"subject": "1550213780359610410",
"reason": "Chargeback",
"duration_minutes": 10080
}'{
"success": true,
"data": {
"id": "string",
"subject_type": "discord",
"subject": "string",
"reason": "string",
"expires_at": "2026-09-30T12:00:00.000Z",
"created_at": "2026-09-30T12:00:00.000Z"
}
}List bans
Active bans of the service. Expired temporary bans are left out.
Query parameters
service_idintegerrequired> 0Service the resource belongs to
Response fieldsinside data
idstringsubject_typestringOne ofdiscordhwidsubjectstringreasonstring | nullexpires_atdatetime | nullnull = permanent
created_atdatetime
curl "https://api.santiauth.com/api/keys/bans?service_id=1" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": [
{
"id": "string",
"subject_type": "discord",
"subject": "string",
"reason": "string",
"expires_at": "2026-09-30T12:00:00.000Z",
"created_at": "2026-09-30T12:00:00.000Z"
}
]
}Lift a ban
Removes a ban right away. Get banId from List bans.
Path parameters
banIdstringrequiredBan id
Query parameters
service_idintegerrequired> 0Service the resource belongs to
Response fieldsinside data
okbooleanOne oftrue
curl -X DELETE "https://api.santiauth.com/api/keys/bans/3f2b8c1e-4d5a-4e6f-9a7b-8c9d0e1f2a3b?service_id=1" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": {
"ok": true
}
}Get a key holder
Everything about one Discord user in the service: their keys, bound devices, where they run your script, an activity timeline and their current ban, if any.
Path parameters
discordUserIdstringrequiredDiscord user id
Query parameters
service_idintegerrequired> 0Service the resource belongs to
Response fieldsinside data
discord_user_idstringbanobject | nullActive service ban on this account
ShowHide 6 child attributes
idstringsubject_typestringOne ofdiscordhwidsubjectstringreasonstring | nullexpires_atdatetime | nullnull = permanent
created_atdatetime
profileobject | nullDiscord account details; null when Discord can't be reached
ShowHide 3 child attributes
usernamestringglobal_namestring | nullavatar_urlstring | null
statsobjectShowHide 6 child attributes
keys_totalintegerkeys_activeintegerhwidsintegervalidationsintegerfirst_seendatetime | nulllast_activitydatetime | null
keysarray of objectsUp to 100 most recent keys
ShowHide 23 child attributes
iduuidKey unique identifier
key_valuestringThe actual key value
key_namestring | nullOptional custom name for the key
statusstringCurrent key status
One ofactiveusedexpireddisabledexpires_atdatetime | nullKey expiration timestamp
used_atdatetime | nullTimestamp when key was first used
provider_namestring | nullName of the provider this key belongs to
service_idinteger | nullID of the service this key is associated with
service_namestring | nullName of the service this key is associated with
folder_namestring | nullName of the folder this key is organized in
is_premiumbooleanWhether this is a premium key
one_time_usebooleanWhether the key can only be used once
expiry_on_first_usebooleanWhether the key expiry timer starts on first use
no_hwidbooleanWhether hardware ID binding is disabled
hwid_limitinteger | nullMaximum number of hardware IDs that can use this key
roblox_usernamestring | nullRoblox username associated with this key
roblox_user_idstring | nullRoblox user id associated with this key
discord_user_idstring | nullDiscord user id the key is linked to
hwidstring | nullDevice the key is bound to, if any
folder_idinteger | nullFolder the key is organized in, if any
validity_minutesinteger | nullDuration (minutes) granted on activation for expiry_on_first_use keys that haven't started yet
is_disabledbooleanWhether the key was manually disabled
created_atdatetimeCreation timestamp
hwidsarray of objectsShowHide 5 child attributes
hwidstringkey_countintegerkey_valuesarray of stringslast_bound_atdatetimeban_idstring | null
usageobjectShowHide 2 child attributes
executorsarray of objectsShowHide 2 child attributes
namestringcountinteger
countriesarray of objectsShowHide 2 child attributes
codestringcountinteger
activityarray of objectsMerged timeline, newest first (up to 100 entries)
ShowHide 10 child attributes
typestringOne ofkey_createdkey_validateddiscord_actiongiveaway_claimatdatetimelabelstring | nullDiscord panel event (redeem, reset_hwid, …) or giveaway title
outcomestring | nulldetailstring | nullkey_idstring | nullkey_valuestring | nullprovider_namestring | nullexecutorstring | nullcountrystring | null
curl "https://api.santiauth.com/api/keys/discord-users/1550213780359610410?service_id=1" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": {
"discord_user_id": "string",
"ban": {
"id": "string",
"subject_type": "discord",
"subject": "string",
"reason": "string",
"expires_at": "2026-09-30T12:00:00.000Z",
"created_at": "2026-09-30T12:00:00.000Z"
},
"profile": {
"username": "string",
"global_name": "string",
"avatar_url": "string"
},
"stats": {
"keys_total": 1,
"keys_active": 1,
"hwids": 1,
"validations": 1,
"first_seen": "2026-09-30T12:00:00.000Z",
"last_activity": "2026-09-30T12:00:00.000Z"
},
"keys": [
{
"id": "880e8400-e29b-41d4-a716-446655440003",
"key_value": "MYAPP-ABC1-DEF2-GHI3",
"key_name": "Trial Key for John",
"status": "active",
"expires_at": "2026-05-30T15:35:47.850Z",
"used_at": "2026-04-30T15:35:47.850Z",
"provider_name": "My Application",
"service_id": 1,
"service_name": "Premium Service",
"folder_name": "Trial Keys",
"is_premium": false,
"one_time_use": false,
"expiry_on_first_use": false,
"no_hwid": false,
"hwid_limit": 1,
"roblox_username": "RobloxPlayer123",
"roblox_user_id": "156",
"discord_user_id": "1550213780359610410",
"hwid": "a1b2c3d4",
"folder_id": 1,
"validity_minutes": 43200,
"is_disabled": false,
"created_at": "2026-04-30T15:35:47.850Z"
}
],
"hwids": [
{
"hwid": "string",
"key_count": 1,
"key_values": [
"string"
],
"last_bound_at": "2026-09-30T12:00:00.000Z",
"ban_id": "string"
}
],
"usage": {
"executors": [
{
"name": "string",
"count": 1
}
],
"countries": [
{
"code": "string",
"count": 1
}
]
},
"activity": [
{
"type": "key_created",
"at": "2026-09-30T12:00:00.000Z",
"label": "string",
"outcome": "string",
"detail": "string",
"key_id": "string",
"key_value": "string",
"provider_name": "string",
"executor": "string",
"country": "string"
}
]
}
}Look up Discord profiles
Display names, usernames and avatars for up to 100 Discord IDs at once (comma-separated ids). Profiles are cached for an hour.
Query parameters
service_idintegerrequired> 0Service the resource belongs to
idsstringrequiredComma-separated Discord user ids (max 100)
Response fieldsinside data
idstringusernamestringglobal_namestring | nullavatar_urlstring | null
curl "https://api.santiauth.com/api/keys/discord-users?service_id=1&ids=1550213780359610410%2C80351110224678912" \
-H "x-api-key: $SANTIAUTH_API_KEY"{
"success": true,
"data": [
{
"id": "string",
"username": "string",
"global_name": "string",
"avatar_url": "string"
}
]
}