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.
- Open the Menu and select Add.
- Choose Bot from the submission options.
- Fill in your Bot's details (Client ID, Prefix, Description, etc.).
- Copy the verification code (e.g.,
df-verify-xyz) and add it to your bot's About Me section on Discord. - Click Submit. Our system will verify the code automatically.
- 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.
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
- Go to Dashboard → My Bots.
- Click on your bot's card to open its details.
- Navigate to the API Access tab.
- Click Generate or Regenerate.
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 }
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" }
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": "..." } }
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" } ] }
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.
Why is my bot showing as offline?
It's almost always one of two things:
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.
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.
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.
- 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
- Go to Dashboard → My Bots → your bot.
- Open the Webhooks tab.
- Set the Webhook URL to your handler endpoint (HTTPS required).
- Copy the auto-generated Secret. Store it as
FORGE_WEBHOOK_SECRETin your bot's env. - Hit Send Test from the dashboard to verify wiring (sends a payload with
isTest: true).
Request
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.isTest – true 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
Authorizationheader must equal the secret you copied during setup. Reject anything else with401. - 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
idas the user identifier. Don't trustusername– Discord usernames can change.
Examples
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.


