Microsoft Teams node reference - all 57 operations, the credential it needs, and a worked example.
Microsoft Teams via the Microsoft Graph v1.0 API (Communication). 57 operations: channel messages (send, reply, list, get, update), chat messages (send, list, get, pin and unpin), chats and chat members, teams (list, get, create, update settings, archive, unarchive, clone), team members, channels (create, read, update, delete, files folder), channel members, channel tabs and the Teams app catalog, users and presence — plus the legacy incoming-webhook card post for saved workflows.
Credential: Microsoft (OAuth) - see Credentials.
Each operation below lists the delegated permission it needs. Delegated permissions are added to your own Entra app registration under API permissions → Microsoft Graph → Delegated permissions, then consented to when you connect the Microsoft credential. Every permission below is the DELEGATED one, because Pipory's Microsoft credential is an authorization-code flow acting as the signed-in user — application permissions are deliberately not listed, since Graph cannot send a Teams message app-only outside migration mode and most app-only Teams access is resource-specific consent declared in a Teams app manifest rather than in Entra. Graph permissions do not nest the way Google's scopes do: Chat.ReadWrite does not imply ChatMessage.Send, and Team.ReadBasic.All does not imply Channel.ReadBasic.All, so a workflow that reads and writes usually needs both halves granted. If a run fails with a permission error, the node names the missing delegated permission in the error - grant it and re-run; you do not need to rebuild the workflow.
| Operation | What it does | Delegated permission |
|---|
sendChannelMessage | Send channel message | ChannelMessage.Send |
replyToChannelMessage | Reply to a channel message | ChannelMessage.Send |
listChannelMessages | List channel messages | ChannelMessage.Read.All |
getChannelMessage | Get channel message | ChannelMessage.Read.All |
listChannelMessageReplies | List replies to a message | ChannelMessage.Read.All |
getChannelMessageReply | Get a reply | ChannelMessage.Read.All |
updateChannelMessage | Update channel message | ChannelMessage.ReadWrite |
| Operation | What it does | Delegated permission |
|---|
sendChatMessage | Send chat message | ChatMessage.Send |
listChatMessages | List chat messages | Chat.Read |
getChatMessage | Get chat message | Chat.Read |
listPinnedChatMessages | List pinned messages | Chat.Read |
pinChatMessage | Pin a chat message | ChatMessage.Send |
unpinChatMessage | Unpin a chat message | Chat.ReadWrite |
| Operation | What it does | Delegated permission |
|---|
listChats | List my chats | Chat.ReadBasic |
getChat | Get chat | Chat.ReadBasic |
createChat | Create chat (1:1 or group) | Chat.Create |
updateChat | Update chat topic | Chat.ReadWrite |
listChatMembers | List chat members | Chat.ReadBasic |
addChatMember | Add chat member | ChatMember.ReadWrite |
removeChatMember | Remove chat member | ChatMember.ReadWrite |
| Operation | What it does | Delegated permission |
|---|
listJoinedTeams | List teams I've joined | Team.ReadBasic.All |
listAllTeams | List all teams in the org | Team.ReadBasic.All |
getTeam | Get team | Team.ReadBasic.All |
createTeam | Create team | Team.Create |
updateTeam | Update team settings | TeamSettings.ReadWrite.All |
archiveTeam | Archive team | TeamSettings.ReadWrite.All |
unarchiveTeam | Unarchive team | TeamSettings.ReadWrite.All |
cloneTeam | Clone team | Team.Create |
| Operation | What it does | Delegated permission |
|---|
listTeamMembers | List team members | TeamMember.Read.All |
getTeamMember | Get team member | TeamMember.Read.All |
addTeamMember | Add team member | TeamMember.ReadWriteNonOwnerRole.All |
updateTeamMemberRole | Change team member role | TeamMember.ReadWriteNonOwnerRole.All |
removeTeamMember | Remove team member | TeamMember.ReadWriteNonOwnerRole.All |
| Operation | What it does | Delegated permission |
|---|
listChannels | List channels | Channel.ReadBasic.All |
getChannel | Get channel | Channel.ReadBasic.All |
getPrimaryChannel | Get the General channel | Channel.ReadBasic.All |
createChannel | Create channel | Channel.Create |
updateChannel | Update channel | ChannelSettings.ReadWrite.All |
deleteChannel | Delete channel | Channel.Delete.All |
getChannelFilesFolder | Get the channel's files folder | Files.Read.All |
| Operation | What it does | Delegated permission |
|---|
listChannelMembers | List channel members | ChannelMember.Read.All |
addChannelMember | Add channel member | ChannelMember.ReadWrite.All |
updateChannelMemberRole | Change channel member role | ChannelMember.ReadWrite.All |
removeChannelMember | Remove channel member | ChannelMember.ReadWrite.All |
| Operation | What it does | Delegated permission |
|---|
listChannelTabs | List channel tabs | TeamsTab.Read.All |
addChannelTab | Add a tab to a channel | TeamsTab.Create |
updateChannelTab | Update a tab | TeamsTab.ReadWriteSelfForTeam |
deleteChannelTab | Remove a tab | TeamsTab.ReadWriteSelfForTeam |
listCatalogApps | List Teams apps in the catalog | AppCatalog.Submit |
| Operation | What it does | Delegated permission |
|---|
getMe | Get the signed-in user | User.Read |
getUser | Get a user | User.ReadBasic.All |
listUsers | List / search users | User.ReadBasic.All |
getMyPresence | Get my presence | Presence.Read |
getUserPresence | Get a user's presence | Presence.Read.All |
setUserPreferredPresence | Set a user's presence | Presence.ReadWrite |
clearUserPreferredPresence | Clear a user's presence | Presence.ReadWrite |
| Operation | What it does | Delegated permission |
|---|
sendWebhookMessage | Post to a webhook URL (legacy card) | (no scope — this posts to a webhook URL whose secret is in the URL itself, not to Microsoft Graph) |
Post into a channel as the signed-in user
The connector-webhook path this node used to rely on is retired — Microsoft disabled Office 365 Connectors in Teams in May 2026, so a pasted connector URL now delivers nothing. This is the Graph replacement. It sends as the signed-in user because that is the only flow the Microsoft credential implements, and on Teams that is not a compromise: application permissions cannot send a Teams message at all outside migration mode.
Set Operation to sendChannelMessage, then fill in:
| Field | Value | Notes |
|---|
teamId | {{ vars.teamsTeamId }} | The team's group id |
channelId | {{ vars.teamsChannelId }} | The channel within it |
messageContent | <p>Deploy <b>{{ myTrigger.sha }}</b> finished.</p> | HTML when contentType is html |
contentType | html | html or text |
Sets {{post.messageId}} and {{post.webUrl}}. A credential connected with only the Mail or Files scope preset 403s here until it is reconnected with a Teams preset ticked. Teams throttles POST message to 1 request/second per user.