NapNodes

← Discord bot guides

Discord bots · updated 5 November 2026

“Missing Access” and “Missing Permissions” in Your Discord Bot: Errors 50001 and 50013

Your bot works until it tries to do something and the console shows Missing Access or Missing Permissions. They look alike but they're not: the first (50001) says your bot can't reach that place, and the second (50013) that it can, but isn't allowed to do that. Here's how to tell them apart, what causes each one and how to check permissions from code, in discord.py and discord.js.

Which one you have

Both are a 403 from Discord. In discord.py they look like discord.errors.Forbidden: 403 Forbidden (error code: 50001): Missing Access and discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions. In discord.js, like DiscordAPIError[50001]: Missing Access and DiscordAPIError[50013]: Missing Permissions.

Missing Access (50001): your bot can't reach what you're asking for. It can't view the channel, it isn't in that server or it has no access to that part.

Missing Permissions (50013): it can see the place, but it lacks the permission for that action, or the person or role it's acting on ranks above it.

Also look for the line of your code in the error: it says what it was trying to do, and that nearly always points to the missing permission.

Rather not set it up yourself? Discord bot hosting from €1.50 a month, no contract and a full refund within 72 hours. Or create a free Discord bot, no card needed.

Missing Access: the usual causes

If a channel shows up as ___hidden___ in your logs, this is the same family of errors: your bot can't view it. From November 16, 2026 that happens with every channel it can't view (what changes). These are the causes, from most to least common:

  1. It can't view the channel

    This is the most common one. Without “View Channels”, the bot can't do anything there, not even write. Check in “Edit Channel” → “Permissions” that its role has it. If the channel is inside a private category, check the category too.

  2. You register commands without the commands scope

    If the error appears at startup, when syncing commands to a server, you may be using the id of a server it isn't in, or the invite may not have included applications.commands. Discord says the bot scope already includes it; even so, if you get this error, invite it again with both. It's covered in slash commands not showing.

  3. You're using an id from somewhere else

    A test channel or server left in your .env, in a server the bot is no longer in. Check the ids you're using.

  4. It's a private thread

    Even if it's been added, to view any thread the bot needs VIEW_CHANNEL on the channel the thread is in.

Missing Permissions: which one is missing

Each action needs its own. The ones most often missing:

Sending messages: “Send Messages”, plus “Send Messages in Threads” inside a thread. Sending an embed: “Embed Links”. Sending an image or file: “Attach Files”. Adding a new reaction: “Add Reactions”.

Deleting other people's messages: “Manage Messages”. Giving or removing roles: “Manage Roles”. Changing nicknames: “Manage Nicknames”. Removing someone: “Kick Members”. Banning: “Ban Members”. Timing someone out: “Timeout Members”.

If you're not sure which to ask for, tick them in the bot permissions calculator: it gives you the invite link ready made, and opening it doesn't mean kicking the bot first.

If it has the permission and still fails

Three things can take away a permission it seems to have.

Role hierarchy. A bot can only kick, ban or change the nickname of someone whose highest role is below the bot's highest role. And it can only give roles below its own. When it joins, the bot's role sits at the bottom: in “Server Settings” → “Roles”, drag it above the ones it has to manage.

Channel permissions. What a role allows, a specific channel can take away. Discord applies the server-wide ones first and then the channel's, in this order: @everyone, roles and finally the specific member. Check whether anything is denied on that channel.

Who the other person is. The server owner can't be kicked or have their nickname changed, whatever role the bot has. Nor can you time out the owner or anyone with “Administrator”.

Check it from your code

Instead of letting the error reach the console, you can check what's missing first and tell whoever used the command:

app.py (discord.py)
@bot.tree.command(name="notice", description="Post a notice")
async def notice(interaction: discord.Interaction, channel: discord.TextChannel, text: str):
    permissions = channel.permissions_for(interaction.guild.me)
    if not (permissions.view_channel and permissions.send_messages):
        await interaction.response.send_message(
            f"I can't write in {channel.mention}: give me View Channels and Send Messages.",
            ephemeral=True,
        )
        return
    try:
        await channel.send(text)
    except discord.Forbidden as error:
        await interaction.response.send_message(f"Discord won't let me: {error.text}", ephemeral=True)
        return
    await interaction.response.send_message("Posted.", ephemeral=True)
index.js (discord.js)
const { MessageFlags, PermissionFlagsBits } = require("discord.js");

// Inside your “notice” command
const channel = interaction.options.getChannel("channel");
const missing = channel
  .permissionsFor(interaction.guild.members.me)
  .missing([PermissionFlagsBits.ViewChannel, PermissionFlagsBits.SendMessages]);

if (missing.length > 0) {
  await interaction.reply({
    content: `I can't write in ${channel}. I'm missing: ${missing.join(", ")}`,
    flags: MessageFlags.Ephemeral,
  });
  return;
}
await channel.send(interaction.options.getString("text"));
await interaction.reply({ content: "Posted.", flags: MessageFlags.Ephemeral });

Why not just give it Administrator

It removes nearly all these errors at once, which is why it's so widely recommended. But if someone gets your bot's token, they have the whole server in their hands (what to do if it leaks). And it doesn't fix everything: hierarchy still applies, so an administrator bot with its role at the bottom can't kick anyone above it either.

Give it only what it uses. If it needs another permission tomorrow, the error will tell you.

Errors that look similar

50007 (Cannot send messages to this user): that person has DMs closed or shares no server with the bot. You can't fix this: catch the error and carry on.

10008 (Unknown message): the message no longer exists; for example, someone deleted it before your bot touched it.

50035 (Invalid Form Body): what you sent is badly formed, like a message that's too long or an empty field in an embed. It isn't a permissions problem.

401 Unauthorized: the token isn't valid (my bot isn't responding explains how to get a new one). And 429: you're making too many requests.

If your bot is on NapNodes

  1. Read the error in the “Console”

    Copy the whole line. With the code and the line of your program, you know which permission to look for.

  2. Change the permissions in Discord

    Roles and channels are changed in your Discord server, not in the panel.

  3. Upload the fix and press “Restart”

    Permissions apply immediately and don't need a restart. Only if you change the code, upload it in “Files” and restart.

Frequently asked questions

What's the difference between Missing Access and Missing Permissions?

Missing Access (50001) means the bot can't reach that channel or server. Missing Permissions (50013) means it can, but lacks the permission for that action or role hierarchy blocks it.

Why can't my bot give a role if it has Manage Roles?

Because it can only give roles below its own. In “Server Settings” → “Roles”, drag the bot's role above them.

Why do I get Missing Access when registering commands?

Usually because the id isn't of a server the bot is in, or the invite didn't include applications.commands. Check the id and invite it again with the bot and applications.commands scopes.

Should I give my bot Administrator?

Better not. If the token leaks, they take the whole server, and it doesn't bypass role hierarchy either. Give it only the permissions it uses.

Why can't my bot kick an administrator?

Because it can only kick someone whose highest role is below the bot's highest role. It can never kick the server owner.

Do I need to restart the bot after changing its permissions?

No. Permissions apply immediately. You only need to restart it if you change its code.

Shall we set it up for you?

Discord bot hosting from €1.50 a month, never oversold: your RAM is yours alone. And if you'd rather start without paying, there's a free Discord bot, no card needed.

Free tool: Discord bot permissions calculator. Tick your bot's permissions and get the number and the invite link; or paste a number and see which permissions it grants.

Keep reading

All Discord bot guides, sorted →