NordGuard Docs

v1.0

Welcome to the NordGuard documentation. Here you'll find a complete reference for all slash commands and the REST API used by the web dashboard.

Getting Started

1. Invite the bot. Click "Add to Discord", select your server, and accept the permissions. NordGuard requires Manage Roles, Send Messages, and Embed Links at minimum.

2. Open the Dashboard. Log in at /dashboard using Discord OAuth2. You'll see all servers where you have Manage Server permissions.

3. Configure modules. Each module (Welcome, Economy, Birthdays, etc.) can be toggled and configured independently per server. Changes persist immediately.

4. Use slash commands. All bot functionality is accessible via / slash commands in Discord. Type /help for a quick overview.

Slash Commands

All commands use Discord's native slash command interface. Options marked with * are required.

💰 Economy

CommandDescriptionOptionsCooldown
/economy balanceCheck your or another member's coin balance.[user]
/economy dailyClaim your daily coin reward.24 hours
/economy workWork for coins. Amount is random each time.1 hour
/economy paySend coins to another member.user*, amount*
/economy leaderboardShow the top 10 richest members in the server.

🎂 Birthday

CommandDescriptionOptions
/birthday setSet your birthday. Will be announced annually.month*, day*
/birthday checkCheck when your or another member's birthday is.[user]
/birthday removeRemove your birthday from the system.

🏆 Leveling

CommandDescriptionOptions
/rankShow your current XP level and rank card.[user]
/leaderboardShow the server's top members by XP.

🛡️ Moderation

CommandDescriptionPermissions
/kickKick a member from the server.Kick Members
/banBan a member permanently or with an optional duration.Ban Members
/timeoutTemporarily mute a member.Moderate Members
/warnIssue a warning. Warns are logged and visible to staff.Moderate Members
/purgeBulk-delete up to 100 messages from a channel.Manage Messages

General

CommandDescription
/helpShow all available commands.
/pingCheck the bot's current latency and status.
/userinfoDisplay detailed info about a user (join date, roles, etc.).
/serverinfoDisplay info about the current server.
/avatarGet a user's full-size avatar.

REST API

The dashboard exposes a REST API for reading and updating guild configuration. All endpoints require the user to be authenticated via Discord OAuth2 and to have Manage Server permission on the target guild.

Base URL: https://nordguard.nordcappe.com/apiAuth: Cookie: next-auth.session-token

⚙️ Guilds

GET/api/guilds

Returns all Discord guilds the authenticated user is a member of that have NordGuard installed.

Response

[
  {
    "id": "123456789012345678",
    "name": "My Server",
    "icon": "a_abc123",
    "owner": true,
    "permissions": "2147483647",
    "botPresent": true
  }
]
GET/api/guild/[guildId]

Returns configuration and status for a specific guild.

Parameters

NameTypeDescription
guildId*stringDiscord guild (server) snowflake ID.

Response

{
  "id": "123456789012345678",
  "name": "My Server",
  "icon": "a_abc123",
  "memberCount": 420,
  "botOnline": true
}

👋 Welcome

GET/api/guild/[guildId]/welcome

Fetch the current welcome message configuration for the guild.

Response

{
  "enabled": true,
  "channelId": "987654321098765432",
  "message": "Welcome to {server.name}, {user.mention}!",
  "embedColor": "#5865F2"
}
PUT/api/guild/[guildId]/welcome

Update the welcome message configuration.

Request Body

{
  "enabled": true,
  "channelId": "987654321098765432",
  "message": "Welcome to {server.name}, {user.mention}!",
  "embedColor": "#5865F2"
}

Response

{ "success": true }

Custom Commands

GET/api/guild/[guildId]/customcommands

List all custom commands for the guild.

Response

[
  {
    "id": "clxyz123",
    "trigger": "rules",
    "response": "Please follow the server rules in #rules!",
    "createdAt": "2024-01-15T10:30:00.000Z"
  }
]
POST/api/guild/[guildId]/customcommands

Create a new custom command.

Request Body

{
  "trigger": "rules",
  "response": "Please follow the server rules in #rules!"
}

Response

{
  "id": "clxyz123",
  "trigger": "rules",
  "response": "Please follow the server rules in #rules!",
  "createdAt": "2024-01-15T10:30:00.000Z"
}
DELETE/api/guild/[guildId]/customcommands/[id]

Delete a custom command by ID.

Parameters

NameTypeDescription
id*stringThe custom command record ID.

Response

{ "success": true }

📣 Social Alerts

GET/api/guild/[guildId]/socialalerts

List all social alert subscriptions for the guild.

Response

[
  {
    "id": "clxyz456",
    "platform": "YOUTUBE",
    "channelId": "987654321098765432",
    "targetId": "UCxxxxxx",
    "targetName": "MyChannel",
    "lastSeenId": "dQw4w9WgXcQ"
  }
]
POST/api/guild/[guildId]/socialalerts

Create a new social alert subscription.

Request Body

{
  "platform": "YOUTUBE",
  "channelId": "987654321098765432",
  "targetId": "UCxxxxxx",
  "targetName": "MyChannel"
}

Response

{ "success": true }
DELETE/api/guild/[guildId]/socialalerts/[id]

Remove a social alert subscription.

Parameters

NameTypeDescription
id*stringThe social alert record ID.

Response

{ "success": true }

🎂 Birthdays

GET/api/guild/[guildId]/birthdays

Get the birthday module configuration for the guild.

Response

{
  "enabled": true,
  "channelId": "987654321098765432",
  "roleId": "111222333444555666",
  "message": "Happy Birthday {user.mention}! 🎉"
}
PUT/api/guild/[guildId]/birthdays

Update the birthday module configuration.

Request Body

{
  "enabled": true,
  "channelId": "987654321098765432",
  "roleId": "111222333444555666",
  "message": "Happy Birthday {user.mention}! 🎉"
}

Response

{ "success": true }

💰 Economy

GET/api/guild/[guildId]/economy

Get the economy module configuration.

Response

{
  "enabled": true,
  "currencyName": "coins",
  "currencySymbol": "🪙",
  "dailyAmount": 100,
  "workMin": 10,
  "workMax": 50
}
PUT/api/guild/[guildId]/economy

Update the economy module configuration.

Request Body

{
  "enabled": true,
  "currencyName": "gold",
  "currencySymbol": "🥇",
  "dailyAmount": 200,
  "workMin": 20,
  "workMax": 80
}

Response

{ "success": true }

🏆 Leveling

GET/api/guild/[guildId]/leveling

Get the leveling module configuration.

Response

{
  "enabled": true,
  "channelId": "987654321098765432",
  "xpPerMessage": 15,
  "xpCooldown": 60,
  "levelUpMessage": "GG {user.mention}, you reached level {level}!"
}
PUT/api/guild/[guildId]/leveling

Update the leveling module configuration.

Request Body

{
  "enabled": true,
  "channelId": "987654321098765432",
  "xpPerMessage": 15,
  "xpCooldown": 60
}

Response

{ "success": true }

🛡️ Automod

GET/api/guild/[guildId]/automod

Get the automod configuration for the guild.

Response

{
  "enabled": true,
  "filterProfanity": true,
  "filterLinks": false,
  "filterCaps": true,
  "capsThreshold": 70,
  "logChannelId": "987654321098765432"
}
PUT/api/guild/[guildId]/automod

Update the automod configuration.

Request Body

{
  "enabled": true,
  "filterProfanity": true,
  "filterLinks": true,
  "capsThreshold": 80
}

Response

{ "success": true }

Rate Limits

The dashboard API enforces per-user rate limits to prevent abuse. Limits reset on a rolling window.

ScopeLimitWindow
GET requests120 requests1 minute
POST / PUT / DELETE30 requests1 minute
Global per IP200 requests1 minute

When rate limited, the API returns 429 Too Many Requests with a Retry-After header indicating when you can retry.

Need help or found a bug? Join the support server.