Pipory
Node reference

Mattermost

Mattermost node reference - all 157 operations, the credential it needs, and a worked example.

Mattermost v4 REST API (Communication). 157 operations: messages (post, reply in thread, ephemeral, edit, delete, pin, search, threads, reminders, acknowledgements), scheduled posts and drafts, channels and channel members, channel bookmarks, teams, team members and invites, users, statuses and custom statuses, custom profile attributes, files, reactions, custom emoji, preferences, slash commands, incoming and outgoing webhook management, bots — plus the original credential-free incoming-webhook post.

Credential: Mattermost - see Credentials.

Permissions

Each operation below lists the permission it needs. Permissions are held by the OWNER of the personal access or bot token, not by the token itself. Mattermost has NO OAuth scopes and no consent screen - a token is one opaque string that carries its creator's full roles and memberships, so you cannot mint a narrower one. The equivalent question is which RBAC permission that user holds, which is exactly what a 403 is asking for, and it is granted in System Console -> User Management -> Permissions (or by adding the user to the team or channel). Two things this catches people out on: a 404 rather than a 403 is Mattermost's answer for a channel or team the token owner is not a member of, so a missing membership reads as a missing resource; and a handful of operations answer 501 instead, which means the admin has the FEATURE switched off (synced drafts, public file links) rather than the permission missing. If a run fails with a permission error, the node names the missing permission in the error - grant it and re-run; you do not need to rebuild the workflow.

Operations (157)

Messages

OperationWhat it doesPermission
postToWebhookPost via incoming webhook (no credential)(no permission — an incoming webhook URL is its own credential; what limits it is the channel the webhook was created against, and whether the admin allowed webhooks to override the channel and username)
createPostPost a messagecreate_post (for the target channel)
replyToPostReply in a threadcreate_post (for the target channel)
createEphemeralPostPost an ephemeral message (system admin)create_post_ephemeral — currently granted to SYSTEM ADMINS only, so a normal personal access token cannot use this
getPostGet a postread_channel (or read_public_channels for a public channel)
getPostsByIdsGet posts by IDsread_channel (or read_public_channels)
updatePostUpdate a post (replaces omitted fields)edit_post (for the channel the post is in)
patchPostPatch a postedit_post (for the channel the post is in)
deletePostDelete a postown post, or delete_others_posts (for the channel the post is in)
getPostThreadGet a threadread_channel (or read_public_channels)
getChannelPostsGet posts in a channelread_channel
searchPostsSearch posts in a teamview_team
searchPostsAllTeamsSearch posts across all teams(any valid token — results are limited to the posts the token owner can already see)
pinPostPin a postread_channel
unpinPostUnpin a postread_channel
getPinnedPostsGet a channel's pinned postsread_channel
getPostFileInfosGet a post's attachmentsread_channel
getPostEditHistoryGet a post's edit historyedit_post — and for most posts only the original author can read the history
getFlaggedPostsGet saved (flagged) postsown account, or manage_system
setPostUnreadMark a channel unread from a postread_channel — plus edit_other_users when marking for somebody else
setPostReminderSet a reminder about a postread_channel
acknowledgePostAcknowledge a priority postread_channel
removePostAcknowledgementRemove a post acknowledgementread_channel
doPostActionTrigger an interactive message actionread_channel

Scheduled posts

OperationWhat it doesPermission
createScheduledPostSchedule a messagecreate_post (for the target channel)
listScheduledPostsList scheduled messages for a teamview_team
updateScheduledPostUpdate a scheduled messagecreate_post (for the scheduled post's channel)
deleteScheduledPostCancel a scheduled messagecreate_post (for the scheduled post's channel)

Drafts

OperationWhat it doesPermission
upsertDraftCreate or update a draftcreate_post for the channel, and the server must have synced drafts enabled (otherwise 501)
listDraftsList drafts for a teamview_team, and the server must have synced drafts enabled (otherwise 501)
deleteDraftDelete a channel draftown draft, and the server must have synced drafts enabled (otherwise 501)
deleteThreadDraftDelete a thread draftown draft, and the server must have synced drafts enabled (otherwise 501)

Channels

OperationWhat it doesPermission
createChannelCreate a channelcreate_public_channel or create_private_channel
createDirectChannelOpen a direct message channelcreate_direct_channel
createGroupChannelOpen a group message channelcreate_group_channel
getChannelGet a channelread_channel
getChannelByNameGet a channel by name (team ID)read_channel
getChannelByTeamNameGet a channel by name (team name)read_channel
updateChannelUpdate a channel (replaces omitted fields)manage_*_channel_members
patchChannelPatch a channelmanage_*_channel_properties
archiveChannelArchive a channeldelete_*_channel (or manage_system)
restoreChannelRestore an archived channelmanage_team
convertChannelPrivacyConvert a channel public / privateconvert_public_channel_to_private / convert_private_channel_to_public (manage_team on servers older than 5.28)
listTeamChannelsList a team's public channelslist_team_channels
listPrivateChannelsList a team's private channelsmanage_system
listDeletedChannelsList a team's archived channels(any valid token with access to the team)
getChannelsByIdsGet team channels by IDsview_team
searchTeamChannelsSearch a team's channelslist_team_channels — without it (server 5.16+) the results are limited to channels the token owner is in
searchAllChannelsSearch all channelsmanage_system for a true cross-workspace search; without it the results are limited to the token owner's channels
getChannelStatsGet channel member countsread_channel
getChannelMemberTimezonesGet channel member timezonesread_channel
getChannelUnreadGet a user's unread counts for a channelread_channel
viewChannelMark a channel as viewedown account, or edit_other_users

Channel members

OperationWhat it doesPermission
listChannelMembersList channel membersread_channel
addChannelMemberAdd member(s) to a channel(membership-dependent — joining a public channel needs join_public_channels; adding somebody else needs manage_*_channel_members)
getChannelMemberGet a channel membershipread_channel
getChannelMembersByIdsGet channel memberships by user IDsread_channel
removeChannelMemberRemove a member from a channelmanage_*_channel_members
updateChannelMemberRolesSet a member's channel rolesmanage_channel_roles
updateChannelNotifyPropsSet a member's channel notificationsown account, or edit_other_users
listUserChannelMembershipsList a user's memberships on a teamview_team
listUserChannelsList a user's channels on a teamown account, or edit_other_users
listAllUserChannelsList all of a user's channelsown account, or edit_other_users

Channel bookmarks

OperationWhat it doesPermission
listChannelBookmarksList channel bookmarksread_channel (must be a channel member)
createChannelBookmarkCreate a channel bookmarkadd_bookmark_public_channel / add_bookmark_private_channel (server 9.5+)
updateChannelBookmarkUpdate a channel bookmarkedit_bookmark_public_channel / edit_bookmark_private_channel (server 9.5+)
deleteChannelBookmarkDelete a channel bookmarkdelete_bookmark_public_channel / delete_bookmark_private_channel (server 9.5+)
reorderChannelBookmarkReorder a channel bookmarkorder_bookmark_public_channel / order_bookmark_private_channel (server 9.5+)

Teams

OperationWhat it doesPermission
createTeamCreate a teamcreate_team
listTeamsList teams(any valid token — regular users see open teams only; manage_system sees every team)
getTeamGet a teamview_team
getTeamByNameGet a team by nameview_team
teamExistsCheck whether a team name is taken(any valid token)
updateTeamUpdate a team (replaces omitted fields)manage_team
patchTeamPatch a teammanage_team
updateTeamPrivacyConvert a team open / invite-onlymanage_team
deleteTeamDelete a teammanage_team
restoreTeamRestore a deleted teammanage_team
searchTeamsSearch teams(any valid token — manage_system is what widens the results to private teams)
getTeamStatsGet team member countsview_team
listUserTeamsList a user's teamsown account, or edit_other_users
getTeamUnreadsGet a user's unread counts across teamsown account, or edit_other_users

Team members & invites

OperationWhat it doesPermission
listTeamMembersList team membersview_team
addTeamMemberAdd a member to a teamadd_user_to_team
addTeamMembersAdd members to a team (bulk)add_user_to_team
getTeamMemberGet a team membershipview_team
getTeamMembersByIdsGet team memberships by user IDsview_team
removeTeamMemberRemove a member from a teamremove_user_from_team
listUserTeamMembershipsList a user's team membershipsown account, or edit_other_users
updateTeamMemberRolesSet a member's team rolesmanage_team_roles
inviteToTeamInvite members by emailinvite_user and add_user_to_team
inviteGuestsToTeamInvite guests by emailinvite_guest
getTeamInviteInfoGet team info for an invite ID(no permission — this is the public info behind an invite link)
regenerateTeamInviteIdRotate a team's invite linkmanage_team

Users

OperationWhat it doesPermission
listUsersList users(any valid token)
getUserGet a user(any valid token)
getUserByUsernameGet a user by username(any valid token)
getUserByEmailGet a user by email(any valid token — but the server hides email addresses unless ShowEmailAddress is on or the token owner is a system admin)
getUsersByIdsGet users by IDs(any valid token)
getUsersByUsernamesGet users by usernames(any valid token)
searchUsersSearch users(any valid token)
createUserCreate a usercreate_user — or an open server that allows signup; creating a user with roles set needs manage_system
updateUserUpdate a user (replaces omitted fields)own account, or edit_other_users
patchUserPatch a userown account, or edit_other_users
updateUserActiveActivate / deactivate a userown account to deactivate yourself; manage_system to change anybody else

Status

OperationWhat it doesPermission
getUserStatusGet a user's status(any valid token)
getStatusesByIdsGet statuses by user IDs(any valid token)
updateUserStatusSet a user's statusown account, or edit_other_users
setCustomStatusSet a custom statusown account only
clearCustomStatusClear a custom statusown account only

Custom profile attributes

OperationWhat it doesPermission
listCustomAttributeFieldsList custom profile fields(any valid token — server 10.5+)
getUserCustomAttributesGet a user's custom profile values(any valid token that can view the member — server 10.5+)
updateOwnCustomAttributesSet my custom profile values(any valid token — sets your own values only)

Files

OperationWhat it doesPermission
uploadFileUpload a fileupload_file (for the target channel)
getFileDownload a fileread_channel for the post that owns the file, or be its uploader
getFileInfoGet file metadataread_channel
getFileLinkGet a file's public linkread_channel — and the admin must have EnablePublicLink switched on, otherwise this 501s
searchFilesSearch files in a teamview_team
searchFilesAllTeamsSearch files across all teams(any valid token — results are limited to the files the token owner can already see)

Reactions

OperationWhat it doesPermission
addReactionReact to a postread_channel
getReactionsGet a post's reactionsread_channel
removeReactionRemove a reactionread_channel
getBulkReactionsGet reactions for many postsread_channel

Custom emoji

OperationWhat it doesPermission
listEmojiList custom emoji(any valid token)
getEmojiGet a custom emoji(any valid token)
getEmojiByNameGet a custom emoji by name(any valid token)
getEmojisByNamesGet custom emoji by names(any valid token)
searchEmojiSearch custom emoji(any valid token)

Preferences

OperationWhat it doesPermission
getPreferencesGet a user's preferencesown account only
getPreferencesByCategoryGet preferences in a categoryown account only
savePreferencesSave preferencesown account only
deletePreferencesDelete preferencesown account only

Slash commands

OperationWhat it doesPermission
executeCommandRun a slash commanduse_slash_commands (for the channel)
listCommandsList slash commandsmanage_slash_commands to see custom commands
createCommandCreate a slash commandmanage_slash_commands (for the team)
getCommandGet a slash commandmanage_slash_commands
updateCommandUpdate a slash commandmanage_slash_commands
deleteCommandDelete a slash commandmanage_slash_commands

Webhook integrations

OperationWhat it doesPermission
listIncomingWebhooksList incoming webhooksmanage_incoming_webhooks (for the team)
createIncomingWebhookCreate an incoming webhookmanage_incoming_webhooks (for the team)
getIncomingWebhookGet an incoming webhookmanage_incoming_webhooks
updateIncomingWebhookUpdate an incoming webhookmanage_incoming_webhooks
deleteIncomingWebhookDelete an incoming webhookmanage_incoming_webhooks
listOutgoingWebhooksList outgoing webhooksmanage_outgoing_webhooks (for the team)
createOutgoingWebhookCreate an outgoing webhookmanage_outgoing_webhooks (for the team)
getOutgoingWebhookGet an outgoing webhookmanage_outgoing_webhooks
updateOutgoingWebhookUpdate an outgoing webhookmanage_outgoing_webhooks
deleteOutgoingWebhookDelete an outgoing webhookmanage_outgoing_webhooks
regenerateOutgoingWebhookTokenRotate an outgoing webhook tokenmanage_outgoing_webhooks

Bots

OperationWhat it doesPermission
createBotCreate a bot accountcreate_bot
listBotsList bot accountsread_bots, plus read_others_bots to see bots you do not own
getBotGet a bot accountread_bots (read_others_bots for somebody else's bot)
patchBotUpdate a bot accountmanage_bots (manage_others_bots for somebody else's bot)
disableBotDisable a bot accountmanage_bots (manage_others_bots for somebody else's bot)
enableBotEnable a bot accountmanage_bots (manage_others_bots for somebody else's bot)
assignBotReassign a bot's ownermanage_bots (manage_others_bots for somebody else's bot)

System

OperationWhat it doesPermission
pingPing the server(no permission — the health check is unauthenticated)

Example

Reply in a thread instead of starting a new one

Before the operation wave this node could only POST to a pasted incoming-webhook URL — no credential, no reading, no threading. With a token it can create a real post, and rootId is what makes it a threaded reply rather than a new message in the channel, which is the difference between a useful bot and a noisy one.

Set Operation to replyToPost, then fill in:

FieldValueNotes
postId{{ myTrigger.postId }}The post being replied to
messageOn it — run {{ myTrigger.executionId }} started.Markdown
rootId{{ myTrigger.rootId }}The thread root. Reply to a reply and Mattermost still threads under the ROOT, not the parent

Sets {{reply.postId}}, {{reply.channelId}} and {{reply.message}}. Remember the host lives in the credential — Mattermost is self-hosted and there is no shared API host to default to.