ms graph api
4 TopicsTeamsTab.ReadWriteSelfForTeam: deleting a tab fails with 400 "appId cannot be null or whitespace"
We have a published Teams app that pins a configurable tab into a team channel via Microsoft Graph and removes it again when the user uninstalls our app from that channel. Creating the tab works. Deleting it always fails with a 400 that looks like an unhandled null-argument exception inside the Graph Teams service rather than a permission problem. I reported this in October 2025 as https://github.com/MicrosoftDocs/msteams-docs/issues/13432, but that is a documentation repository and the issue has had no response, so I am reposting here, as we can still reproduce the issue. We're using a delegated token for the operation. The only tab-related scopes are `TeamsTab.Read.All` (read-only) and `TeamsTab.ReadWriteSelfForTeam`. According to the docs (https://learn.microsoft.com/en-us/graph/api/channel-delete-tabs), `TeamsTab.ReadWriteSelfForTeam` is the **least privileged** delegated permission for the delete, so the token should be ok. What works Creating the tab, with the same delegated user token: POST https://graph.microsoft.com/v1.0/teams/«teamId»/channels/«channelId»/tabs Content-Type: application/json { "displayName": "«AppName»", "email address removed for privacy reasons": "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/«teamsAppId»", "configuration": { "entityId": "«entityId»", "contentUrl": "https://«ourhost»/teams/tabs/channel/«entityId»", "websiteUrl": "https://«ourhost»/app/tickets?channel=«entityId»", "removeUrl": "https://«ourhost»/teams/remove-tab/«entityId»" } } → `201 Created`. The tab appears in the channel and renders correctly. Listing the tabs afterwards also works and returns our tab together with its `id`: GET https://graph.microsoft.com/v1.0/teams/«teamId»/channels/«channelId»/tabs?$expand=teamsApp Works as well and lists our tab. Might be served by the TeamsTab.Read.All permission. What fails DELETE https://graph.microsoft.com/v1.0/teams/«teamId»/channels/«channelId»/tabs/«tabId» → `400 Bad Request` { "error":{ "code":"BadRequest", "message":"appId cannot be null or whitespace. (Parameter 'appId')", "innerError":{ "date":"2026-07-27T13:45:31", "request-id":"f930c847-0b48-4a46-b17e-f0ee10ff8177", "client-request-id":"f930c847-0b48-4a46-b17e-f0ee10ff8177" } } } (leaving in the error details, maybe that helps diagnosing the issue) appID is not even part of the request, it's probably resolved against the TeamsTab.ReadWriteSelfForTeam permission on your side. Let me know if you need any more details.57Views0likes2CommentsUsing Graph API to create a OneNote tab in a Teams Channel
Hello, I'm trying to create a new tab in an existing channel that opens a OneNote notebook using Graph API. According to official documentation (https://learn.microsoft.com/en-us/graph/api/channel-post-tabs?view=graph-rest-1.0&tabs=http), the call should look like this: POST https://graph.microsoft.com/v1.0/teams/{team-id}/channels/{channel-id}/tabs { "displayName": "OneNote", "email address removed for privacy reasons" : "https://graph.microsoft.com/v1.0/appCatalogs/teamsApps/0d820ecd-def2-4297-adad-78056cde7c78", "configuration": { "entityId": "<Notebook_id>", "contentUrl": "<OneNote_notebook_url>", "websiteUrl": "<OneNote_notebook_url>" } } It worked smoothly, but since recently, when you open the tab in Teams (desktop or web), it shows an error message stating that "the application can't be reached". In the end, the tab is created but OneNote notebook is not opened. Reading the official documentation here: https://learn.microsoft.com/en-us/graph/teams-configuring-builtin-tabs#onenote-tabs it mentions that when creating OneNote tabs, "configuration is not supported". Does this mean now you can't specify the OneNote notebook to open in the tab using Graph API? Any suggestions or recommendations? Thanks in advance! FerranSolved2.2KViews0likes14CommentsMs Graph API: Set "Busy - In a call" does not cause new calls to be rejected
Hi everybody, Although I set the Presence State to “Busy – InACall”, new incoming calls are not rejected. And yes, Busy on Busy (Busy Options) is activated. So if I have a real Teams call a new incoming call is rejected. Any idea why setting “Busy – InACall” via Graph API does not cause new calls to be rejected? Regards Gerd501Views1like6Comments