Background
logo
✦ Developer Resources

Developers

Build & Grow

"DiscordForge is the perfect place to grow your bot's user base. We provide powerful tools and a dedicated community to help you succeed."

Adding a Bot

Adding your bot to DiscordForge is simple and takes less than 2 minutes.

  1. Open the Menu and select Add.
  2. Choose Bot from the submission options.
  3. Fill in your Bot's details (Client ID, Prefix, Description, etc.).
  4. Copy the verification code (e.g., df-verify-xyz) and add it to your bot's About Me section on Discord.
  5. Click Submit. Our system will verify the code automatically.
  6. Once a moderator approves it, your bot will be listed!

Announcements

Keep your users updated directly from your bot's profile page.

  • Visibility: Announcements appear at the top of your bot's profile.
  • Markdown: Full Markdown support including links, lists, and code blocks.
  • One at a time: Each new announcement overwrites the previous one.

Widgets

Show off your bot's status on your website or GitHub README.

Go to your bot's profile, click the Actions menu, and select Widget.

JSON / APIGet raw data for custom implementations.
HTML / MarkdownReady-to-use embed codes.

Management

Need to update your bot's description, prefix, or links?

  • Go to your Dashboard
  • Click "Edit" on your project card
  • Save changes instantly

Growth Tools

Forge Synergy

Link your bot to a "Perfect Match" partner project to cross-promote audiences.


API Access

We offer a robust REST API for posting stats and fetching bot data. Use our official SDKs for the best experience.

How to get your API Key
  1. Go to DashboardMy Bots.
  2. Click on your bot's card to open its details.
  3. Navigate to the API Access tab.
  4. Click Generate or Regenerate.
Example Implementation
import { DiscordForge } from 'discordforge-sdk';

const forge = new DiscordForge('YOUR_API_KEY');

await forge.postStats({
  server_count: 1500,
  shard_count: 5
});
POST /api/bots/stats
1 req / 5 min

Update your bot's server, shard, user, and voice connection counts. Auth: bot API key in Authorization header.

{
  "server_count": 1500,
  "shard_count": 5,
  "user_count": 120000,
  "voice_connections": 12
}
GET /api/bots/:id/votes/check
60 req / min

Check whether a user voted in the last 8 hours. Auth: bot API key in Authorization header. Query: ?userId=DISCORD_ID.

{
  "hasVoted": true,
  "votedAt": "2026-05-03T08:42:11.000Z",
  "nextVoteAt": "2026-05-03T16:42:11.000Z"
}
GET /api/bots/:id
Public

Fetch a bot's public profile. Accepts the bot's DiscordForge ID or Discord client ID. No auth required.

{
  "id": "...",
  "name": "Forge Bot",
  "prefix": "/",
  "shortDescription": "...",
  "avatar": "...",
  "voteCount": 1240,
  "serverCount": 5300,
  "tags": ["moderation", "utility"],
  "owner": { "id": "...", "name": "..." }
}
POST /api/external/bots/commands
Up to 200 commands

Sync your bot's slash commands. Accepts both custom and Discord API formats. Auth: bot API key in x-api-key or Authorization header.

{
  "commands": [
    {
      "name": "ban",
      "description": "Ban a user",
      "usage": "/ban <user> [reason]",
      "category": "Moderation"
    }
  ]
}
GET /api/external/bump/cooldown
60 req / min

Check whether a user can bump a server and when their cooldown expires. Cooldown duration depends on the user's tier (Free: 2h, Premium: 1h, Forge/Pioneer: 30 min). Auth: bot API key in Authorization header. Query: ?userId=DISCORD_ID&serverId=DISCORD_ID.

{
  "canBump": false,
  "cooldownExpiresAt": "2026-05-05T20:30:00.000Z",
  "tierLabel": "FORGE",
  "cooldownMs": 1800000
}

Automatic Bot Status

DiscordForge automatically detects your bot's status if it shares a server with the Forge bot. Forge is a public bot, so you can invite it to any server your bot is already in and uptime checks kick in automatically.

Online
Idle
DND

Why is my bot showing as offline?

It's almost always one of two things:

1

You haven't added Forge to a shared server (most common)

Forge is public and we no longer auto-check every new bot. For uptime to work, the Forge bot needs to be in at least one server your bot is also in.

2

Your bot's presence is set to Offline or Invisible

Some bots set their own presence to invisible in code. When that happens Discord reports them as offline to everyone, including us, even though the process is running fine. Check your bot's presence config and set it to online, idle, or dnd. All three count as online on our end.

Heads up: bots that were on the platform before this change are grandfathered in and still checked the old way. This only affects new submissions.

Still stuck after both? Ping staff with your bot's invite link and we'll take a look.


Vanity URLs

Set a custom vanity URL for your bot or server profile, making it easier to share and remember. Available to FORGE subscribers and PIONEER rank holders.

FORGEPIONEER
https://discordforge.org/bot/your-custom-slug
https://discordforge.org/server/your-custom-slug
  • 3-32 characters, lowercase letters, numbers, and hyphens
  • Must be unique across the platform
  • Configure in Dashboard → Bot or Server Settings

Webhooks

Vote webhooks fire whenever a user upvotes your bot on DiscordForge. Use them to reward voters instantly: grant a Discord role, unlock a premium feature, or DM a custom message. The reward flow is the #1 driver of recurring votes – bots that wire it up see 4x higher repeat votes than bots that don't.

Setup
  1. Go to DashboardMy Bots → your bot.
  2. Open the Webhooks tab.
  3. Set the Webhook URL to your handler endpoint (HTTPS required).
  4. Copy the auto-generated Secret. Store it as FORGE_WEBHOOK_SECRET in your bot's env.
  5. Hit Send Test from the dashboard to verify wiring (sends a payload with isTest: true).

Request

POST YOUR_WEBHOOK_URL

Headers: Authorization: <YOUR_SECRET>Content-Type: application/json

Body:

{
  "id": "123456789012345678",
  "username": "voteruser",
  "weeklyVotes": 42,
  "totalVotes": 150,
  "isTest": false
}
id – Discord user ID of the voter (snowflake string).
username – Discord username at the time of the vote.
weeklyVotes – voter's vote count for your bot in the last 7 days.
totalVotes – voter's lifetime vote count for your bot.
isTesttrue only when the dashboard's "Send Test" button fired the request. Skip rewards for test events.

Expected response

Return any 2xx status within 5 seconds. Body content is ignored. Non-2xx or timeout responses are retried up to 3 times with exponential backoff (5s, 30s, 120s).

After 3 failures the webhook is marked unhealthy and a notice is posted to your bot's integration channel. Use the Webhook Logs tab in the dashboard to inspect failed deliveries.

Security

  • Always verify the secret. The Authorization header must equal the secret you copied during setup. Reject anything else with 401.
  • HTTPS only. The dashboard rejects http:// URLs.
  • Rotate the secret if it leaks. Regenerate from the dashboard and update your env. The old secret is invalidated immediately.
  • Treat id as the user identifier. Don't trust username – Discord usernames can change.

Examples

Vote handler
import express from 'express';
import crypto from 'crypto';

const app = express();
app.use(express.json());

const FORGE_WEBHOOK_SECRET = process.env.FORGE_WEBHOOK_SECRET;

app.post('/webhooks/forge-vote', (req, res) => {
    // 1. Verify the secret in the Authorization header
    const auth = req.headers.authorization;
    if (auth !== FORGE_WEBHOOK_SECRET) {
        return res.status(401).json({ error: 'Invalid secret' });
    }

    // 2. Parse the payload
    const { id, username, weeklyVotes, totalVotes, isTest } = req.body;

    // Skip test events in production handlers
    if (isTest) {
        console.log('Received test webhook for', username);
        return res.status(200).json({ ok: true });
    }

    // 3. Reward the user (example: grant a Discord role for 12h; role duration is intentionally longer than the 8h vote cooldown)
    grantVoterRole(id);

    // 4. Acknowledge within 5 seconds – non-2xx triggers retries (3 attempts)
    return res.status(200).json({ ok: true });
});

app.listen(3000, () => console.log('Webhook listener on :3000'));

Vote Notifications

Get real-time Discord notifications whenever someone votes for your bot.

Zero-Code Setup

Vote notifications are sent directly to your Discord server by the Forge bot. No server infrastructure needed. Configure it in Dashboard → Integrations.