How to give access to only a specific Teams channel or chat ?

Clemens Ernstberger 20 Reputation points
2026-08-31T15:38:59.9033333+00:00

Dear Community,
i am trying to setup an api access to the graph api in teams. For that i understood that giving ChannelMessage.Send.Group is only possible as a RSC permission https://learn.microsoft.com/en-us/microsoftteams/platform/graph-api/rsc/resource-specific-consent and giving access via app directly is only possible as delegate version https://learn.microsoft.com/en-us/graph/api/channel-post-messages?view=graph-rest-1.0&tabs=http . The goal is to send and read messages only in a specific Teams channel and not in the whole tenant.
For that i understood i would need RSC permissions for an app otherwise i would need a separate Identity in our tenant to use the delegate permissions. This should be a app only access to not manage any Identity's additionally so i created a basic manifest via https://dev.teams.microsoft.com/ and i was able to deploy this basic manifest:


{

  "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.27/MicrosoftTeams.schema.json",

  "version": "1.0.0",

  "manifestVersion": "1.27",

  "id": "secret",

  "name": {

    "short": "test",

    "full": "test"

  },

  "developer": {

    "name": "test",

    "websiteUrl": "https://test.com",

    "privacyUrl": "https://test.com",

    "termsOfUseUrl": "https://test.com"

  },

  "description": {

    "short": "test",

    "full": "this is for testing."

  },

  "icons": { "outline": "outline.png", "color": "color.png" },

  "accentColor": "#1A1A2E",

  "validDomains": [],

  "webApplicationInfo": { "id": "secret",

    "resource": "https://RscBasedStoreApp" },

  "authorization": {

    "permissions": {

      "resourceSpecific": [

        { "name": "ChannelMessage.Read.Group", "type": "Application" },

        { "name": "ChannelMessage.Send.Group", "type": "Application" },

        { "name": "ChatMessage.Read.Chat", "type": "Application" },

        { "name": "ChatMessageReadReceipt.Read.Chat", "type": "Application" },

        { "name": "TeamsActivity.Send.Group", "type": "Application" },

        { "name": "TeamsActivity.Send.Chat", "type": "Application" }

      ]

    }

  }

}

I was able to deploy it but when i tried to install the app in teams i got a generic error saying i would not have access to the chat. I assume since i did not defined a capability of the app it is not possible to add the app.
So i then tried to just add the tab capability with no valid endpoint since i only need the graph api access. That failed with another error message giving me the impression i have to have a full blown bot just to access messages in teams. Based on https://github.com/MicrosoftDocs/msteams-docs/issues/14043 i assume that others came to the same conclusion.
Please if someone found an easy way to just give only access to a specific teams channel to an app which then can use the graph api please let me know. Otherwise did anyone tried it out with a managed identity ? That one cost an office license which is also not ideal.

Thank you for the help.

Microsoft Teams | Microsoft Teams for business | Teams and channels | Manage a team or channel
0 comments No comments

Answer accepted by question author
Hendrix 970 Reputation points Independent Advisor
2026-08-31T23:03:10.4733333+00:00

Hi Clemens,

Thank you for the detailed explanation.

Based on your sharing, your understanding is generally correct as RSC is the appropriate permission model when an application needs app-only access to Teams resources without receiving access to the entire tenant.

However, I want to mention that the permissions ChannelMessage.Read.Group and ChannelMessage.Send.Group apply to a specific Team and the channels within that Team. There is currently no equivalent permission such as ChannelMessage.Read.Channel or ChannelMessage.Send.Channel that can restrict the application permission to only one standard channel.

This means that installing the Teams app in a Team grants the declared .Group permissions for that Team. Your application can still be configured to use only one specific channel ID, but that restriction would be enforced by your own application rather than by the Graph permission itself.

For this situation, the best option depends on whether you need the application do:

1/ If the application only needs to send messages

Use a Teams Workflow webhook:

  • Open the required Teams channel.
  • Create a Workflow that starts when a webhook request is received.
  • Configure the Workflow to post the received content to that channel.
  • Call the generated webhook URL from your application.

2/ If the application needs to read and send messages

  • Use ChannelMessage.Read.Group RSC for application-only reading.
  • Use a Teams bot or a Teams Workflow webhook for sending.
  • Install the app in the required Team.
  • Configure the backend to accept only the approved Team ID and channel ID.

If you want to use Graph for both reading and sending, unfortunately, there is currently no fully supported Graph-only, application-only method that can both read and send normal messages while being restricted by Microsoft Graph permissions to one individual Teams channel.

Hope this information helps you move forward smoothly. If you have any other question, please feel free to reach out on the comments of this post. I'll be happy to assist you further.

Thank you for your understanding and I hope your concern will get resolved soon.


If the answer is helpful, please click "Yes" and kindly upvote it.

Note: Please follow the steps in the forum documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

Was this answer helpful?

1 person found this answer helpful.

0 additional answers

Sort by: Oldest

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.