Tokens
xoxb-bot token: acts as the app's bot userxoxp-user token: acts on behalf of a personxapp-app-level token: Socket Mode (connections:write)- Signing secret: verifies HTTP requests from Slack
Request signing
- Base string: v0:{X-Slack-Request-Timestamp}:{raw body}
- HMAC-SHA256 with the signing secret, compare with X-Slack-Signature (v0=...)
- Reject timestamps older than 5 minutes
- Retries carry X-Slack-Retry-Num and X-Slack-Retry-Reason
Delivery modes
- Events API over HTTP: public Request URL, url_verification challenge on setup
- Socket Mode: WebSocket from your app, no public URL; not allowed for Marketplace apps
- Acknowledge events, commands and interactions within 3 seconds
- response_url lets you reply to a command or interaction later
mrkdwn
- *bold* _italic_ ~strike~ `code` ```block```
<https://example.com|text>links<@U123>,<#C123>,<!here>,<!channel>- Escape &, < and > as & < >
Common bot scopes
chat:writepost messagescommandsslash commandsapp_mentions:read@mentions of the appchannels:history,im:historyread messagesusers:read,reactions:write,files:write
Common errors
not_in_channelinvite the bot or use chat:write.publicchannel_not_foundwrong ID or no accessmissing_scopeadd the scope and reinstallinvalid_blockscheck limits and field typesratelimited/ HTTP 429 honor Retry-After
Source: api.slack.com.
Last checked against official documentation: