{"formatVersion":"1","kind":"dock_integration","slug":"slack-web-api","title":"Slack Web API","summary":"Import a Harbor-safe Slack starter set for channel discovery, workspace user listing, and approval-friendly message posting.","description":"A Dock-hosted Slack Web API starter integration for Harbor. Importing it creates a local http_api port shell plus a Harbor-safe Slack action set for listing conversations, listing workspace users, and posting messages with explicit approval. Tokens remain local to Harbor Node.","version":"0.1.0","publisher":{"slug":"slack","name":"Slack","websiteUrl":"https://docs.slack.dev/apis/web-api/"},"category":"Messaging","tags":["slack","messaging","chat","collaboration","workspace"],"compatibility":{"harborNode":">=0.1.0","notes":"Requires local operator-configured auth after import. Slack reads use typed `input.query` values and Slack writes use `input.body` JSON payloads."},"requiredPlan":"community","portTemplates":[{"kind":"http_api","label":"Slack Web API","description":"Slack Web API connection managed locally through Harbor.","baseUrl":"https://slack.com/api/","authMode":"header_token","authHeaderName":"Authorization","authTokenPrefix":"Bearer"}],"actionTemplates":[{"slug":"list-conversations","label":"List Conversations","description":"List Slack conversations visible to the authenticated token with typed pagination and channel-type filters.","method":"GET","path":"/conversations.list","inputs":{"parameters":[{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor from a previous Slack conversations.list response."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200},"default":100,"description":"Maximum number of conversations to return per page."},{"name":"exclude_archived","in":"query","schema":{"type":"boolean"},"description":"Whether to exclude archived conversations."},{"name":"types","in":"query","schema":{"type":"string","enum":["public_channel","public_channel,private_channel","public_channel,private_channel,mpim,im"]},"description":"Slack conversation types to include."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"list-users","label":"List Users","description":"List Slack workspace users with typed pagination and locale controls.","method":"GET","path":"/users.list","inputs":{"parameters":[{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor from a previous Slack users.list response."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200},"default":100,"description":"Maximum number of users to return per page."},{"name":"include_locale","in":"query","schema":{"type":"boolean"},"description":"Whether to include user locale values in the response."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-user","label":"Get User","description":"Fetch a Slack user using an explicit user ID.","method":"GET","path":"/users.info","inputs":{"parameters":[{"name":"user","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"Slack user ID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-conversation","label":"Get Conversation","description":"Fetch a Slack conversation using an explicit channel ID.","method":"GET","path":"/conversations.info","inputs":{"parameters":[{"name":"channel","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"Slack conversation ID."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"get-conversation-history","label":"Get Conversation History","description":"List messages in a Slack conversation using an explicit channel ID and typed pagination inputs.","method":"GET","path":"/conversations.history","inputs":{"parameters":[{"name":"channel","in":"query","required":true,"schema":{"type":"string","minLength":1},"description":"Slack conversation ID."},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Cursor from a previous Slack history response."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200},"default":100,"description":"Maximum number of messages to return."}]},"approvalMode":"automatic","requestBodyMode":"none","resultMode":"json_summary"},{"slug":"post-message","label":"Post Message","description":"Post a Slack message using a JSON request body. Supply channel and message content under `input.body` and keep the action approval-friendly.","method":"POST","path":"/chat.postMessage","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"update-message","label":"Update Message","description":"Update a Slack message using a bounded JSON request body.","method":"POST","path":"/chat.update","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"},{"slug":"delete-message","label":"Delete Message","description":"Delete a Slack message using a bounded JSON request body.","method":"POST","path":"/chat.delete","approvalMode":"require_approval","requestBodyMode":"json","resultMode":"json_summary"}],"helpText":"Import to Harbor, configure local auth, then validate and test the read actions before enabling post-message. Use list-conversations to find conversation IDs and list-users to resolve user IDs. Keep post-message on approval unless your local Harbor Guard policy deliberately permits it.","installNotes":"Dock shares only safe metadata. Hidden auth must be configured locally inside Harbor after import. Slack recommends bearer tokens in the Authorization header and JSON bodies for write methods such as chat.postMessage."}