API reference

Bans & key holders

Ban a Discord account or device from a whole service, and look up everyone who holds your keys.

On this page

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

POST/api/keys/banskeys:write

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> 0

    Service the resource belongs to

  • subject_typestringrequired

    What to ban

    One ofdiscordhwid
  • subjectstringrequired1–512 chars

    Discord user id or HWID

  • reasonstring | null≤ 256 chars

    Shown to your team only

  • duration_minutesinteger | null1–525600

    Omit for a permanent ban

Response fieldsinside data
  • idstring
  • subject_typestring
    One ofdiscordhwid
  • subjectstring
  • reasonstring | null
  • expires_atdatetime | null

    null = 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
}'
201 Created
{
  "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

GET/api/keys/banskeys:read

Active bans of the service. Expired temporary bans are left out.

Query parameters

  • service_idintegerrequired> 0

    Service the resource belongs to

Response fieldsinside data
  • idstring
  • subject_typestring
    One ofdiscordhwid
  • subjectstring
  • reasonstring | null
  • expires_atdatetime | null

    null = permanent

  • created_atdatetime
curl "https://api.santiauth.com/api/keys/bans?service_id=1" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "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

DELETE/api/keys/bans/{banId}keys:write

Removes a ban right away. Get banId from List bans.

Path parameters

  • banIdstringrequired

    Ban id

Query parameters

  • service_idintegerrequired> 0

    Service the resource belongs to

Response fieldsinside data
  • okboolean
    One 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"
200 OK
{
  "success": true,
  "data": {
    "ok": true
  }
}

Get a key holder

GET/api/keys/discord-users/{discordUserId}keys:read

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

  • discordUserIdstringrequired

    Discord user id

Query parameters

  • service_idintegerrequired> 0

    Service the resource belongs to

Response fieldsinside data
  • discord_user_idstring
  • banobject | null

    Active service ban on this account

    Show 6 child attributes
    • idstring
    • subject_typestring
      One ofdiscordhwid
    • subjectstring
    • reasonstring | null
    • expires_atdatetime | null

      null = permanent

    • created_atdatetime
  • profileobject | null

    Discord account details; null when Discord can't be reached

    Show 3 child attributes
    • usernamestring
    • global_namestring | null
    • avatar_urlstring | null
  • statsobject
    Show 6 child attributes
    • keys_totalinteger
    • keys_activeinteger
    • hwidsinteger
    • validationsinteger
    • first_seendatetime | null
    • last_activitydatetime | null
  • keysarray of objects

    Up to 100 most recent keys

    Show 23 child attributes
    • iduuid

      Key unique identifier

    • key_valuestring

      The actual key value

    • key_namestring | null

      Optional custom name for the key

    • statusstring

      Current key status

      One ofactiveusedexpireddisabled
    • expires_atdatetime | null

      Key expiration timestamp

    • used_atdatetime | null

      Timestamp when key was first used

    • provider_namestring | null

      Name of the provider this key belongs to

    • service_idinteger | null

      ID of the service this key is associated with

    • service_namestring | null

      Name of the service this key is associated with

    • folder_namestring | null

      Name of the folder this key is organized in

    • is_premiumboolean

      Whether this is a premium key

    • one_time_useboolean

      Whether the key can only be used once

    • expiry_on_first_useboolean

      Whether the key expiry timer starts on first use

    • no_hwidboolean

      Whether hardware ID binding is disabled

    • hwid_limitinteger | null

      Maximum number of hardware IDs that can use this key

    • roblox_usernamestring | null

      Roblox username associated with this key

    • roblox_user_idstring | null

      Roblox user id associated with this key

    • discord_user_idstring | null

      Discord user id the key is linked to

    • hwidstring | null

      Device the key is bound to, if any

    • folder_idinteger | null

      Folder the key is organized in, if any

    • validity_minutesinteger | null

      Duration (minutes) granted on activation for expiry_on_first_use keys that haven't started yet

    • is_disabledboolean

      Whether the key was manually disabled

    • created_atdatetime

      Creation timestamp

  • hwidsarray of objects
    Show 5 child attributes
    • hwidstring
    • key_countinteger
    • key_valuesarray of strings
    • last_bound_atdatetime
    • ban_idstring | null
  • usageobject
    Show 2 child attributes
    • executorsarray of objects
      Show 2 child attributes
      • namestring
      • countinteger
    • countriesarray of objects
      Show 2 child attributes
      • codestring
      • countinteger
  • activityarray of objects

    Merged timeline, newest first (up to 100 entries)

    Show 10 child attributes
    • typestring
      One ofkey_createdkey_validateddiscord_actiongiveaway_claim
    • atdatetime
    • labelstring | null

      Discord panel event (redeem, reset_hwid, …) or giveaway title

    • outcomestring | null
    • detailstring | null
    • key_idstring | null
    • key_valuestring | null
    • provider_namestring | null
    • executorstring | null
    • countrystring | null
curl "https://api.santiauth.com/api/keys/discord-users/1550213780359610410?service_id=1" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "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

GET/api/keys/discord-userskeys:read

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> 0

    Service the resource belongs to

  • idsstringrequired

    Comma-separated Discord user ids (max 100)

Response fieldsinside data
  • idstring
  • usernamestring
  • global_namestring | null
  • avatar_urlstring | null
curl "https://api.santiauth.com/api/keys/discord-users?service_id=1&ids=1550213780359610410%2C80351110224678912" \
  -H "x-api-key: $SANTIAUTH_API_KEY"
200 OK
{
  "success": true,
  "data": [
    {
      "id": "string",
      "username": "string",
      "global_name": "string",
      "avatar_url": "string"
    }
  ]
}