<article class="sy-endpoint"><h3><code>POST /v1/connectors/slack/messages</code></h3><p>Post a message to a channel or as a threaded reply.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Slack workspace to post into.</td></tr><tr><td>channel</td><td>string</td><td>yes</td><td>Channel ID or name. Private channels work once the Syncline app has been invited to them.</td></tr><tr><td>text</td><td>string</td><td>yes</td><td>Message body in Slack markup. Bold, links and bullet lists are all supported.</td></tr><tr><td>thread_ts</td><td>string</td><td>no</td><td>Parent message timestamp. Supply it to reply in a thread instead of posting to the channel.</td></tr><tr><td>idempotency_key</td><td>string</td><td>no</td><td>Repeating a key within 24 hours returns the original message instead of posting twice.</td></tr></tbody></table></div><pre><code>{
"run_id": "run_1a77c930",
"connector": "slack",
"status": "ok",
"data": {
"message_ts": "1757236921.004300",
"channel_id": "C08H2QK4T",
"permalink": "https://example.slack.com/archives/C08H2QK4T/p1757236921004300",
"posted_at": "2026-09-07T10:02:01Z"
}
}</code></pre></article><article class="sy-endpoint"><h3><code>PATCH /v1/connectors/slack/messages/{message_ts}</code></h3><p>Edit a message Syncline posted earlier, so a status line stays current.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Slack workspace holding the message.</td></tr><tr><td>channel</td><td>string</td><td>yes</td><td>The channel the message lives in. A timestamp is unique only within a channel.</td></tr><tr><td>text</td><td>string</td><td>yes</td><td>The replacement body. Slack shows an edited marker to readers.</td></tr></tbody></table></div><pre><code>{
"run_id": "run_2b91d044",
"connector": "slack",
"status": "ok",
"data": {
"message_ts": "1757236921.004300",
"channel_id": "C08H2QK4T",
"edited_at": "2026-09-07T10:19:33Z"
}
}</code></pre></article><article class="sy-endpoint"><h3><code>GET /v1/connectors/slack/channels</code></h3><p>List the channels this connection can post into.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Slack workspace to enumerate.</td></tr><tr><td>types</td><td>string</td><td>no</td><td>Comma separated list of public, private and im. Defaults to public,private.</td></tr><tr><td>limit</td><td>integer</td><td>no</td><td>Results per page, 1 to 200. Defaults to 100.</td></tr><tr><td>cursor</td><td>string</td><td>no</td><td>Opaque cursor from the previous response.</td></tr></tbody></table></div><pre><code>{
"run_id": "run_3c05ae71",
"connector": "slack",
"status": "ok",
"data": [
{
"channel_id": "C08H2QK4T",
"name": "revenue-alerts",
"is_private": true,
"member_count": 9
}
],
"next_cursor": null
}</code></pre></article><article class="sy-endpoint"><h3><code>POST /v1/connectors/slack/reactions</code></h3><p>Add an emoji reaction as a quiet acknowledgement that a flow handled a message.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Slack workspace to act in.</td></tr><tr><td>channel</td><td>string</td><td>yes</td><td>The channel containing the target message.</td></tr><tr><td>message_ts</td><td>string</td><td>yes</td><td>The message timestamp to react to.</td></tr><tr><td>emoji</td><td>string</td><td>yes</td><td>Emoji short name without colons, such as white_check_mark.</td></tr></tbody></table></div><pre><code>{
"run_id": "run_4d16bf82",
"connector": "slack",
"status": "ok",
"data": {
"message_ts": "1757236921.004300",
"emoji": "white_check_mark",
"already_present": false
}
}</code></pre></article><article class="sy-endpoint"><h3><code>GET /v1/connectors/slack/events</code></h3><p>Read inbound message events the connector observed on your selected channels.</p><div class="sy-table-wrap"><table><thead><tr><th>Param</th><th>Type</th><th>Required</th><th>Description</th></tr></thead><tbody><tr><td>connection_id</td><td>string</td><td>yes</td><td>The authorised Slack workspace whose events you want.</td></tr><tr><td>channel</td><td>string</td><td>no</td><td>Restrict to one channel. Omit for every channel the connection watches.</td></tr><tr><td>since</td><td>string</td><td>no</td><td>ISO 8601 timestamp. Events are retained for 30 days on paid plans.</td></tr><tr><td>limit</td><td>integer</td><td>no</td><td>Results per page, 1 to 200. Defaults to 50.</td></tr></tbody></table></div><pre><code>{
"run_id": "run_5e27ca93",
"connector": "slack",
"status": "ok",
"data": [
{
"event_id": "evt_7d31b0",
"type": "message.keyword",
"channel_id": "C08H2QK4T",
"author": "U04QN7RM2",
"text": "refund requested for order 20481",
"matched_keyword": "refund",
"observed_at": "2026-09-07T08:55:12Z"
}
],
"next_cursor": null
}</code></pre></article>