Slack error no_permission: Token lacks permission in this context
Last verified against Slack API reference - chat.postMessage errors
The workspace token used in this request does not have the permissions necessary to complete the request. Make sure your app is a member of the conversation it's attempting to post a message to.What error no_permission means
The token cleared authentication, but it is not permitted to do this particular thing in this particular place. Slack's own description on chat.postMessage points at the most common concrete case: "Make sure your app is a member of the conversation it's attempting to post a message to." Where missing_scope is about what the token was granted at install, no_permission is about what the token's identity is allowed to do in context — and context usually means channel membership.
The overlap with not_in_channel confuses people: both can appear when a bot posts into a channel it has not joined, with the exact string depending on token type and method. The remediation is the same. For public channels, either invite the bot (/invite @botname) or grant the chat:write.public scope, which lets a bot post to public channels without joining (posting only — reading history still requires membership). For private channels there is no scope shortcut: a member must invite the bot, full stop.
If membership checks out, look at the token's nature. Legacy workspace tokens and certain admin-flavored tokens carry permission models of their own, and calling a method outside that model lands here rather than at missing_scope. When an admin-level method returns no_permission, verify the calling user actually holds the admin role the method requires.
What it looks like
{"ok": false, "error": "no_permission"}Why it happens
- The bot is not a member of the conversation it is posting to, and chat:write.public is not granted (or the channel is private).
- The method requires an admin or owner identity that the token's user does not have.
- A legacy or workspace-token permission model does not cover the called method.
- The message targets a Slack Connect or shared channel where the app's side lacks posting rights.
How to fix Slack error no_permission
- 1Invite the bot to the channel with /invite @botname, or for public channels add the chat:write.public scope and reinstall.
- 2For private channels, have an existing member invite the bot; no scope can substitute for membership.
- 3Confirm the conversation ID is the one you think it is with conversations.info from the same token.
- 4For admin methods, check the token's user holds the required role in that workspace.
- 5Retry after the membership or role change; the error is deterministic until the context changes.
How to stop it recurring
Make channel membership part of provisioning: when your app is configured to post somewhere, join public channels programmatically via conversations.join (bot tokens with channels:join) and instruct humans to invite the bot to private ones. Grant chat:write.public if broadcast-to-public-channels is a core behavior, and document which channels the bot genuinely inhabits. See also Slack API limits for per-channel posting ceilings once membership works.
Official reference: Slack API reference - chat.postMessage errors. See all Slack error codes or the Slack limits and quotas.
Related codes
- not_in_channel: Bot is not a member of the channelCannot post user messages to a channel they are not in.
- missing_scope: Token lacks a required OAuth scopeThe token used is not granted the specific scope permissions required to…
- restricted_action: A workspace preference blocks this postingA workspace preference prevents the authenticated user from posting.
- channel_not_found: Value passed for channel was invalidValue passed for channel was invalid.
Error no_permission - quick answers
What does Slack error no_permission mean?
The token cleared authentication, but it is not permitted to do this particular thing in this particular place.
How do I fix Slack error no_permission?
1. Invite the bot to the channel with /invite @botname, or for public channels add the chat:write.public scope and reinstall. 2. For private channels, have an existing member invite the bot; no scope can substitute for membership. 3. Confirm the conversation ID is the one you think it is with conversations.info from the same token. 4. For admin methods, check the token's user holds the required role in that workspace. 5. Retry after the membership or role change; the error…
Stop debugging Slack by hand
Connect the channel through Conferbot: tokens, webhooks and retries are handled, failures show as readable status.