Slack
A Slack workspace that answers the Web API, Events API, Socket Mode and interactivity flows slack_sdk and Bolt use, plus an MCP server.
Vendor reference: https://api.slack.com/methods ↗. Machine-readable: compat/slack.json.
Surfaces
| Kind | Path | Notes |
|---|---|---|
| REST | /api/<method> | the Web API; an unknown method answers 404 unknown_method |
| Streaming | apps.connections.open | Socket Mode WebSocket with an xapp- app-level token |
| Webhooks | Events API | event callbacks and interactivity payloads delivered to your app |
| OAuth | oauth.v2.access | bot and user tokens, and Sign in with Slack (openid.connect.*) |
| MCP | /mcp | Slack MCP tools over the same workspace |
API versions: Web API (unversioned methods)
Supported
- Users, conversations, history, replies, members, chat, reactions, pins, bookmarks, usergroups and views
- The
files_upload_v2external upload flow, file info and downloads;files.uploadanswersmethod_deprecated search.messages,search.filesandsearch.allwith the operatorsin:,from:,after:,before:,on:andduring:- Socket Mode with
slack_sdk'sSocketModeClient, the Events API and interactivity - The official Python SDK, documented in its own matrix
- SCIM and the Audit Logs API for the one workspace a tenant models
Not supported
- Enterprise Grid, cross-team installs and
admin.*methods - Slack Connect with a second real org; shared channels are with synthetic partner orgs
- Methods the SDK documents but the replica does not simulate
Known differences and test guidance
| Scenario | Difference from Slack | In your tests |
|---|---|---|
| Search ranking | Search is substring matching over the workspace, not Slack's ranked index; score and highlighting are approximations. | Assert that the expected message is in the results, not on its rank or score. |
| Rate limits | Nothing throttles on its own; a 429 only happens when you inject one. | Do not expect organic tier limits. Inject throttle or fail_next to test retry handling. |
| Human activity | Nobody clicks buttons, votes or replies unless you inject the event or interaction. | Drive interactions yourself; do not wait for a user response. |
| File contents | Text, Markdown and CSV bodies are generated from the document's title, folder and owner, not original bytes. | Assert on file metadata and format, not on content. |
| Canvases, polls, assistant threads, streaming replies, link unfurls | Canvases are markdown sections; polls are ordinary messages with poll blocks; assistant status and streamed text are stored but not rendered; chat.unfurl stores what the app sends and nothing fetches links. | Assert on what the API returns, not on client rendering or automatic unfurls. |
| Timestamps on writes | A message you post is stamped from the host clock, which can fall after the seeded history unless the workspace runs on today's date. | Do not assert that new messages sort before or among the seeded history. |
| Restarts | Without a state directory the workspace lives in memory and a restart drops writes. | Treat each run as starting from the seeded workspace. |
| Request size | A Web API body over 8 MiB is refused with HTTP 413; Slack documents per-argument limits instead. | Do not test large-body behaviour against the replica. |
Fault injection
| Key | What the client sees |
|---|---|
throttle | 429 with Retry-After and {"ok": false, "error": "ratelimited"}, which slack_sdk retries on |
fail_next | The next N calls fail as throttle does, then clear |
quota_limit | 429 ratelimited, the same shape as throttle |
error_rate | 500 {"ok": false, "error": "internal_error"} for the given fraction of calls |
latency_ms | Fixed added latency on every data-plane request |
Applies to every system
- The hosted data plane is read-only: a write is refused with
403 writes_disabled. A SOQL, GraphQL or searchPOSTis a read and is answered. - Faults are injected through
POST /_admin/faultson a simulator you run yourself;POST /_admin/faults/resetclears them. - Rate limits do not happen on their own unless a page says so. Use fault injection to exercise a client's backoff.
- Distributions come from aggregated metadata sketches of data Eon backs up; no customer records; all Era data is simulated.