To add a bot to a Discord server, open the bot's invite link or its page in the App Directory, choose Add to server, pick your server, review the permissions it asks for and press Authorize. The bot then appears in your member list and under Server Settings > Integrations > Bots and Apps.
You can only do this on a server you own or where one of your roles has the Manage Server permission. That single permission explains most "why can't I add bots" questions: if your server is missing from the list on the authorize screen, you don't have Manage Server there, or you are signed in to a different account. The steps and screen names below were checked against Discord's help center and developer docs in September 2026.
What you need before you add a bot
- Manage Server on the target server. Discord's developer docs require the person installing an app to a server to have this permission (
MANAGE_GUILDin the API). The server owner always qualifies, and Administrator includes it. - The right account. The authorize page uses whichever account is signed in to discord.com in that browser, which is not always the one in your desktop app.
- 2FA, on some servers. If the owner turned on the server-wide 2FA requirement, moderators and admins need two-factor authentication on their own account before they can take administrative actions. If you have the right role but the server still doesn't show up, turn on 2FA and try again.
Can a moderator add bots?
Only if one of their roles includes Manage Server. Most moderator roles leave it off on purpose, because the same permission lets them change server settings. If you are a mod without it, send the bot's invite link to the owner or an admin. It takes them a minute.
How to add a bot to a Discord server on desktop
There are three ways in, and they end on the same authorize screen.
- From the bot's invite link. Most bots link to it from their website, documentation or top.gg page. Open it, sign in if asked, and choose Add to server if the app offers a choice.
- From the App Directory. Click your server's name, then Server Settings > App Directory, search for the bot and press Add App. In a browser the directory is at discord.com/discovery/applications.
- From chat. If you see the bot in another server, click its name to open its profile and press Add App.
On the authorize screen, pick your server from the dropdown, read the permission list and untick anything the bot doesn't need, then press Authorize. Server Settings > Integrations now shows the bot, who added it, when, and which permissions it requested.
Two habits worth keeping: the real authorize page always lives on discord.com, so check the address bar, and treat an unknown bot that asks for Administrator as a reason to stop and read its docs first.
How to add a bot on mobile (iPhone, iPad and Android)
Discord's help center lists the App Directory as available on desktop, in browser clients and on the website; the mobile app isn't on that list. On a phone or iPad you have two routes:
- Open the invite link. Get it from the bot's website, or open discord.com/discovery/applications in your phone's browser and find the bot there. Sign in to discord.com if asked, choose Add to server, pick the server and tap Authorize.
- Use the bot's profile. If the bot is in another server you're in, tap its name to open its profile and look for Add App.
If the link keeps opening under the wrong account, copy it into the browser where the right account is signed in.
How to add your own bot from the Developer Portal
If you built the bot yourself, or someone built it on an application you own, you make the invite link in the Developer Portal.
- Open your app and go to Installation in the sidebar.
- Under Installation Contexts, make sure Guild Install is ticked. Tick User Install only if people should also be able to use the bot as a personal app.
- Under Install Link, choose Discord Provided Link. A Default Install Settings section appears.
- For Guild Install, add the
applications.commandsandbotscopes. Choosingbotopens a Permissions menu. Tick only what the bot needs. - Save, copy the install link, open it and choose Add to server.
The older route still works: OAuth2 > URL Generator. Tick bot, pick permissions and copy the generated URL. Discord's docs say applications.commands is "included by default with the bot scope", so ticking both is harmless but no longer required. The generator also shows an integration type, and it lets you pick User Install next to the bot scope even though only Guild Install makes sense there (reported as issue #8066 in January 2026), so leave it on Guild Install.
A bot invite link has a few parts:
| Part | Example | What it does |
|---|---|---|
client_id |
your Application ID | Which app is being added |
scope |
bot applications.commands |
Adds the bot user and lets it register slash commands |
permissions |
117760 |
The permissions the bot's role gets, as one integer |
integration_type |
0 |
0 installs to a server, 1 to a user account |
guild_id + disable_guild_select |
a server ID + true |
Preselects a server and locks the dropdown |
Put together, it looks like https://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot%20applications.commands&permissions=117760&integration_type=0. The integer 117760 is View Channels, Send Messages, Embed Links, Attach Files and Read Message History, a sensible start for a bot that only posts. Build your own with the permissions calculator and invite link generator. A link that carries only client_id falls back to your Default Install Settings; adding scope or integration_type overrides them.
Two settings on the Bot page cause most failed invites for self-built bots:
- Public Bot. When it is off, only you (the app owner) can add the bot. To switch it off you first have to set Install Link to None, or the portal answers "Private application cannot have a default authorization link" (issue #5292, still reported in 2025). Then add the bot with a URL Generator link.
- Requires OAuth2 Code Grant. Leave it off unless your own backend completes the full OAuth2 flow. With it on and no backend, adding the bot fails with "Integration requires code grant".
Add to server or Add to my apps?
Apps that support both installation contexts ask where to go. The choice changes what the app can do.
| Add to server | Add to my apps | |
|---|---|---|
| Who can use it | Everyone on the server, subject to permissions | Only you, in every server, DM and group DM |
| Shows in member list and Integrations | Yes | No |
| Can act on the server (roles, channels, moderation) | Yes, with the permissions you approved | No, it can only answer your commands |
| Who can install it | Owner or Manage Server | Any user |
If you added a moderation or ticket bot and it never appeared in the member list, you probably chose Add to my apps. Remove it under User Settings > Authorized Apps and add it again with Add to server. Server admins can also turn off Use External Apps so personal apps can still be used on the server but only reply privately.
Why can't I add bots to my Discord server?
| What you see | Likely cause | Fix |
|---|---|---|
| Your server isn't in the dropdown, or the list is empty | No Manage Server on that server, or the wrong account is signed in | Ask the owner for the permission or send them the link; check which account is signed in to discord.com |
| You have the role, the server is still missing | The server may require 2FA for moderation, and your account has none | Turn on two-factor authentication, then reload the link |
| "Integration requires code grant" | Requires OAuth2 Code Grant is on for that app | The app owner turns it off on the Bot page |
| Only the developer can add it | Public Bot is off | The owner adds it, or makes the bot public |
| A small public bot suddenly can't be added anywhere | Unverified apps can't grow past 100 servers | Only the developer can fix this, by verifying the app |
| Adding fails on a server full of bots | Discord caps a server at 50 integrations | Remove unused bots and integrations under Server Settings > Integrations |
| It said it worked, but the bot isn't in the member list | You chose Add to my apps | Add it again with Add to server |
The bot joined but says "missing permissions"
"Missing Permissions" is Discord API error 50013, "You lack permissions to perform that action". Adding the bot worked; the bot is now trying something its role or the channel doesn't allow. In rough order of how often each one is the cause:
- The permission was never granted. It wasn't in the invite, or someone unticked it. Open Server Settings > Roles, find the role named after the bot and switch the permission on.
- Role hierarchy. A bot can only give out roles below its own highest role, and can only kick, ban or rename members whose highest role is lower than its own. Drag the bot's role above the roles it manages. Administrator doesn't get around this, and nothing lets a bot act on the server owner.
- Channel overwrites. A private channel usually denies View Channel to @everyone, and the bot is caught by that too. Edit the channel, open Permissions, add the bot's role and allow View Channel and Send Messages (plus Embed Links or Attach Files if it posts those). Denying View Channel silently cancels everything else in that channel, and threads need Send Messages in Threads, which is separate from Send Messages.
- 2FA on the bot's side. On servers with the 2FA requirement, Discord only lets a bot use the permissions its docs mark as 2FA-protected, such as Kick, Ban, Manage Roles, Manage Channels, Manage Messages and Administrator, if the app owner's account has 2FA. For a bot you built or commissioned, that means the developer account behind it needs 2FA on.
- It's the members, not the bot. If people can't see or run the bot's slash commands, check the Use Application Commands permission and the command settings under Server Settings > Integrations, where you choose which roles and channels can use each command. Allow your own role before you deny @everyone, or you can lock yourself out.
To see the server through a role's eyes, select the role under Server Settings > Roles and use View Server As Role on its Display tab (owners and admins only). Try it on the bot's role when a channel seems invisible to the bot.
One change is coming: from November 16, 2026, Discord stops sending bots the details of channels they can't view, and the channel list endpoint leaves those channels out. If a bot's setup command can't find a channel after that date, give its role View Channel there first.
If it's your own bot: check before you act
Your code can find the problem before Discord rejects the request. Every interaction carries appPermissions, the bot's permissions in that exact channel after overwrites, so a short helper can explain the failure in plain words. Tested with discord.js 14.27.0 on Node 24.15.0.
// Explains why an action would fail with "Missing Permissions" (error 50013).
// Returns an empty array when the bot should be able to do it.
function whyItWillFail(interaction, { needs = [], role = null, member = null } = {}) {
const problems = [];
const me = interaction.guild.members.me;
// What the bot may do in this channel, after role permissions and channel overwrites.
const missing = interaction.appPermissions.missing(needs);
if (missing.length) {
problems.push(`I'm missing ${missing.join(', ')} in this channel.`);
}
// Role hierarchy: the bot can only hand out roles below its own highest role.
if (role?.managed) {
problems.push(`"${role.name}" is managed by an integration and can't be given out.`);
} else if (role && me.roles.highest.comparePositionTo(role) <= 0) {
problems.push(`Move my role above "${role.name}" in Server Settings > Roles.`);
}
// Kick, ban, timeout and nickname changes need the bot above the member's highest role.
if (member && !member.manageable) {
problems.push(`${member.displayName} has a role at or above mine, or owns the server.`);
}
return problems;
}
module.exports = { whyItWillFail };Use it right before the call that could fail:
const { MessageFlags, PermissionFlagsBits } = require('discord.js');
const { whyItWillFail } = require('./permission-check');
async function giveRole(interaction, role) {
const problems = whyItWillFail(interaction, {
needs: [PermissionFlagsBits.ManageRoles],
role,
});
if (problems.length) {
return interaction.reply({ content: problems.join('\n'), flags: MessageFlags.Ephemeral });
}
await interaction.member.roles.add(role);
return interaction.reply({ content: `Added ${role.name}.`, flags: MessageFlags.Ephemeral });
}
module.exports = { giveRole };Checking first also protects the bot itself. Discord counts 401, 403 and most 429 responses as invalid requests, and an IP that makes 10,000 of them in 10 minutes is temporarily blocked from the API. A bot that retries a forbidden action in a loop can get there, and Discord's rate limit docs name checking role and channel permissions before the request as the way to avoid 403s.
How do I add a bot to a channel?
You don't add a bot to a channel. A bot sees every channel its role can view, the same way a member does. To let it into a private channel, add its role to that channel's permissions. To keep it out of one, deny View Channel for its role there. To limit where members can use its commands, pick channels for the app under Server Settings > Integrations instead of changing the bot's own permissions.
How to remove a bot
Right-click the bot in the member list and kick it, or remove it under Server Settings > Integrations. Discord's help center says removing an app takes Manage Server or ownership of the server, and kicking from the member list also needs Kick Members. Either way the app leaves the server, and you can add it again later with its invite link.
When a bot you can add isn't enough
Everything above covers bots someone else built and hosts. If the bot is yours and it has stopped working, the Discord bot not working guide walks through the usual causes, and Bot Rescue is a fixed $149: I find and fix the problem, and if I can't fix it you pay nothing. If what you need is a gate for new members, such as a captcha or a sign-in with a school, company or game account, see custom verification bots. If none of the bots in the directory do what your server needs, compare bot makers first, then send me a short brief for a bot built on your own application.