Input & Output
Output ports and response data schemas for all 42 Slack node operations across all 6 resources.
Output Ports
Every Slack node operation produces exactly two output ports:
| Port | Operations | Description |
|---|---|---|
| success | All 42 operations | The Slack API accepted the request and the operation completed without error. Output fields vary by operation — see tables below. |
| error | All 42 operations | The Slack API returned an error, the Bot Token was invalid, a required property was missing, or a network timeout occurred. Always includes errorCode and status. |
status (always "error"), errorCode (the Slack API error string such as channel_not_found, not_authed, invalid_auth), plus the relevant input field names that were provided so you can route on the error context.
message / send — Success Output
| Field | Type | Description |
|---|---|---|
messageSent | boolean | true when the message was accepted by Slack. |
channel | string | Channel ID the message was posted to. |
messageTs | string | Timestamp of the sent message. Use this as the message identifier for updates, deletes, thread replies, and reactions. |
threadTs | string | Thread root timestamp. Matches messageTs if this is a new thread root, or the parent message ts if posted as a reply. |
incomingText | string | Pass-through of the IncomingText input property value (empty string if not provided). |
conversationId | string | Pass-through of the ConversationId input property value (empty string if not provided). |
status | string | Always "success" on this port. |
errorCode | string | Empty string on success. |
payload | object | Raw Slack API response object for advanced use. |
{
"messageSent": true,
"channel": "C012AB3CD",
"messageTs": "1748000000.000100",
"threadTs": "1748000000.000100",
"incomingText": "",
"conversationId": "",
"status": "success",
"errorCode": "",
"payload": { "ok": true, "channel": "C012AB3CD", "ts": "1748000000.000100", "message": { ... } }
}
message / sendAndWait — Success Output
This operation posts the message, then suspends the workflow. It resumes on the success port when a reply message arrives in the same channel or thread. The output contains the reply text from the responding user.
| Field | Type | Description |
|---|---|---|
replyText | string | The text content of the reply message that caused the workflow to resume. |
replyUserId | string | Slack user ID of the person who sent the reply. |
replyTs | string | Timestamp of the reply message. |
channel | string | Channel ID where the reply was received. |
originalMessageTs | string | Timestamp of the original message that was sent before waiting. |
status | string | Always "success" on this port. |
errorCode | string | Empty string on success. Set to "timeout" if the wait timed out before a reply arrived (routes to error port). |
payload | object | Raw reply event payload from Slack. |
user / get — Success Output
| Field | Type | Description |
|---|---|---|
userId | string | Slack user ID. |
userName | string | Slack username (login handle). |
isBot | boolean | true if this user is a bot account. |
deleted | boolean | true if this account has been deactivated. |
realName | string | User's full real name. |
displayName | string | User's display name as shown in Slack. |
email | string | User's email address (requires users:read.email scope). |
statusText | string | User's current status text (e.g. "In a meeting"). |
statusEmoji | string | User's current status emoji (e.g. ":spiral_calendar_pad:"). |
avatarUrl | string | URL to the user's avatar image (512px version). |
status | string | Always "success" on this port. |
errorCode | string | Empty string on success. |
payload | object | Raw Slack API user object. |
{
"userId": "U012AB3CD",
"userName": "jane.smith",
"isBot": false,
"deleted": false,
"realName": "Jane Smith",
"displayName": "Jane Smith",
"email": "jane.smith@acmecorp.com",
"statusText": "Working from home",
"statusEmoji": ":house_with_garden:",
"avatarUrl": "https://avatars.slack-edge.com/2025-01-10/abc123_512.jpg",
"status": "success",
"errorCode": "",
"payload": { ... }
}
channel / create — Success Output
| Field | Type | Description |
|---|---|---|
id | string | Slack channel ID of the newly created channel. |
name | string | Normalised channel name (lowercase, hyphens). |
isPrivate | boolean | true if the channel was created as private. |
created | integer | Unix timestamp of when the channel was created. |
status | string | Always "success" on this port. |
errorCode | string | Empty string on success. |
payload | object | Raw Slack API channel object. |
{
"id": "C07XYZ1234",
"name": "project-atlas-q2",
"isPrivate": true,
"created": 1748000000,
"status": "success",
"errorCode": "",
"payload": { ... }
}
file / upload — Success Output
| Field | Type | Description |
|---|---|---|
fileId | string | Slack file ID for the uploaded file (e.g. F01234567). |
fileName | string | Filename as stored in Slack. |
permalink | string | Shareable URL to the file in the Slack web UI. |
fileType | string | Slack file type identifier (e.g. csv, pdf). |
status | string | Always "success" on this port. |
errorCode | string | Empty string on success. |
payload | object | Raw Slack API file object. |
{
"fileId": "F08ABCDE01",
"fileName": "sales-report-2026-05.csv",
"permalink": "https://acmecorp.slack.com/files/U012AB3CD/F08ABCDE01/sales-report-2026-05.csv",
"fileType": "csv",
"status": "success",
"errorCode": "",
"payload": { ... }
}
Other Operation Output Summaries
message / sendEphemeral
Returns messageSent (boolean), channel, messageTs, status, errorCode, payload. Ephemeral messages have no persistent ts in the channel history.
message / update
Returns channel, messageTs (the timestamp of the updated message), text (the new text as confirmed by Slack), status, errorCode, payload.
message / delete
Returns channel, messageTs (the deleted message's timestamp), status, errorCode.
message / getPermalink
Returns channel, permalink (the permanent URL string), status, errorCode, payload.
message / search
Returns matches (array of message objects — each with channel, ts, text, username), total (integer total result count), status, errorCode, payload.
channel / get
Returns the full channel object: id, name, isPrivate, topic, purpose, memberCount, created (Unix timestamp), status, errorCode, payload.
channel / getMany
Returns channels (array of channel summary objects), count (number returned), status, errorCode, payload.
channel / getHistory
Returns messages (array of message objects — each with ts, text, userId, type), hasMore (boolean), status, errorCode, payload.
channel / invite / join / kick / leave / archive / unarchive / open / close
These operations return channelId, status, errorCode, and payload. They confirm the action was applied without returning detailed data.
channel / getMembers
Returns members (array of user ID strings), count (integer), status, errorCode, payload.
channel / rename
Returns channelId, name (new channel name), status, errorCode, payload.
channel / getReplies
Returns messages (array of thread reply objects — each with ts, text, userId), count, status, errorCode, payload.
channel / setPurpose / setTopic
Returns channelId, purpose or topic (the value that was set), status, errorCode, payload.
file / get
Returns fileId, fileName, fileType, size (bytes), permalink, created (Unix timestamp), status, errorCode, payload.
file / getMany
Returns files (array of file summary objects), total, page, pageCount, status, errorCode, payload.
reaction / add / remove
Returns channel, timestamp, emoji, status, errorCode. These are confirmation-only responses.
reaction / get
Returns reactions (array of objects — each with name, count, users array if Full=true), status, errorCode, payload.
user / getMany
Returns users (array of user summary objects), count, status, errorCode, payload.
user / getProfile
Returns userId, displayName, realName, email, phone, title, statusText, statusEmoji, avatarUrl, status, errorCode, payload.
user / getStatus
Returns userId, statusText, statusEmoji, statusExpiration (Unix timestamp when status expires, 0 if no expiry), status, errorCode, payload.
user / updateProfile
Returns userId, displayName, status ("success"), errorCode, payload.
userGroup / create
Returns usergroupId, name, handle, description, dateCreate (Unix timestamp), status, errorCode, payload.
userGroup / disable / enable
Returns usergroupId, name, isEnabled (boolean), userCount (if IncludeCount=true), status, errorCode, payload.
userGroup / getMany
Returns userGroups (array of group objects — each with id, name, handle, description, userCount if IncludeCount=true, users array if IncludeUsers=true), count, status, errorCode, payload.
userGroup / getUsers
Returns users (array of Slack user ID strings), count, status, errorCode, payload.
userGroup / addUsers
Returns usergroupId, users (full updated member list), count, status, errorCode, payload.
userGroup / update
Returns usergroupId, name, handle, description, dateUpdate (Unix timestamp), status, errorCode, payload.
Error Port Output
All 44 operations route to the error port on failure with the following fields:
| Field | Type | Description |
|---|---|---|
status | string | Always "error". |
errorCode | string | Slack API error code string (e.g. channel_not_found, not_authed, invalid_auth, missing_scope, cant_kick_self). |
payload | object | Raw Slack API error response. Includes ok: false and error string. |
{
"status": "error",
"errorCode": "channel_not_found",
"payload": {
"ok": false,
"error": "channel_not_found"
}
}