Install
openclaw skills install slack-openapi-skillOperate Slack Web API through UXC with a curated OpenAPI schema, bearer-token auth, and messaging-core guardrails.
openclaw skills install slack-openapi-skillUse this skill to run Slack Web API operations through uxc + OpenAPI.
Reuse the uxc skill for shared execution, auth, and error-handling guidance.
uxc is installed and available in PATH.https://slack.com/api.https://raw.githubusercontent.com/holon-run/uxc/main/skills/slack-openapi-skill/references/slack-web.openapi.jsonThis skill covers a Messaging Core surface:
thread_tsThis skill does not cover:
users.*, admin.*, or usergroups.* method familiesSlack inbound events can be delivered through Socket Mode. uxc now has a built-in Slack Socket Mode transport, but this skill still treats it as a limited event-ingest path rather than a fully packaged workflow surface.
Current uxc subscribe status:
uxc subscribe start https://slack.com/api --transport slack-socket-mode --auth slack-app --sink file:...hello frame was receivedevents_api envelopeack_sent=trueWhat the current built-in transport already handles:
xapp-... auth via --authapps.connections.open before each connect attemptenvelope_idWhat is still not packaged:
Slack Socket Mode is now a validated IM subscribe provider at the transport/runtime level.
Slack Web API uses Authorization: Bearer <token>.
Token types used in practice:
xoxb-...: Bot User OAuth Token. This is the recommended default for this skill.xoxp-...: User OAuth Token. Use this only when you explicitly want user-token semantics.xapp-...: App-level token. Use this for Socket Mode subscribe, not for normal Web API methods.To create an app-level xapp-... token for Socket Mode:
https://api.slack.com/appsBasic InformationApp-Level Tokensconnections:write scopeSocket Mode in the app configuration before relying on subscribe-based event intakeUse the Slack Bot User OAuth Token (xoxb-...) for the default binding and for most messaging operations:
uxc auth credential set slack-bot \
--auth-type bearer \
--secret-env SLACK_BOT_TOKEN
uxc auth binding add \
--id slack-bot \
--host slack.com \
--path-prefix /api \
--scheme https \
--credential slack-bot \
--priority 100
Use a separate Slack User OAuth Token (xoxp-...) when the method requires user-token semantics, especially thread/history access outside bot-accessible conversations:
uxc auth credential set slack-user \
--auth-type bearer \
--secret-env SLACK_USER_TOKEN
Do not bind slack-user by default to the same host/path. Invoke it explicitly when needed:
uxc auth binding match https://slack.com/api
slack-openapi-cli --auth slack-user get:/conversations.replies channel=C1234567890 ts=1717171717.000100
If you intentionally want writes to appear as the installing user rather than the bot, you can also invoke write methods with --auth slack-user, but treat that as an explicit override rather than the default path.
Use the fixed link command by default:
command -v slack-openapi-cliuxc link slack-openapi-cli https://slack.com/api --schema-url https://raw.githubusercontent.com/holon-run/uxc/main/skills/slack-openapi-skill/references/slack-web.openapi.jsonslack-openapi-cli -hInspect operation schema first:
slack-openapi-cli get:/auth.test -hslack-openapi-cli get:/conversations.history -hslack-openapi-cli post:/chat.postMessage -hPrefer read validation before writes:
slack-openapi-cli get:/auth.testslack-openapi-cli get:/conversations.list limit=20 types=public_channel,private_channelslack-openapi-cli get:/conversations.info channel=C1234567890Execute with key/value or positional JSON:
slack-openapi-cli get:/conversations.history channel=C1234567890 limit=20slack-openapi-cli post:/chat.postMessage '{"channel":"C1234567890","text":"Hello from UXC"}'get:/auth.testget:/conversations.listget:/conversations.infoget:/conversations.historyget:/conversations.repliespost:/chat.postMessagepost:/reactions.add--text.ok, kind, protocol, data, error.Bot User OAuth Token (xoxb-...); do not confuse it with xapp-... app-level tokens.User OAuth Token (xoxp-...); use --auth slack-user when you intentionally need user identity or user-token-only reads.get:/conversations.replies has token-type restrictions:
--auth slack-userget:/conversations.history only returns conversations visible to the supplied token; a bot token is limited to joined conversations.conversations.history and conversations.replies vary by app distribution. Slack documents a tighter limit for newly created commercially distributed non-Marketplace apps starting on May 29, 2025; do not assume generic Tier 3 behavior.post:/chat.postMessage and post:/reactions.add as write/high-risk operations; require explicit user confirmation before execution.slack-openapi-cli <operation> ... is equivalent to uxc https://slack.com/api --schema-url <slack_openapi_schema> <operation> ....references/usage-patterns.mdreferences/slack-web.openapi.jsonchat.postMessage: https://docs.slack.dev/reference/methods/chat.postMessageconversations.history: https://docs.slack.dev/reference/methods/conversations.historyconversations.replies: https://docs.slack.dev/reference/methods/conversations.replies/