Skip to main content
Slack is a manifest-driven source — connectors/http/manifests/slack.yaml declares its resources, auth, and pagination against the shared grammar in connectors/http/manifest/; no Slack-specific Go code exists. See HTTP for how the manifest mechanism works. It’s also the only bundled SaaS manifest that declares an incremental: block, so it’s the best reference for what incremental support looks like at the manifest level.

Auth

A bot or user OAuth token (bearer auth), plus an optional conversation_types config value (default public_channel) that controls which conversation types conversations enumerates — set it to include private_channel, mpim, or im if the token has access.

Resources

Nine resources, statically discovered:
conversations is deliberately membership-aware: it calls users.conversations rather than a workspace-wide channel list, because conversations.history (used by messages) rejects a channel the bot can see but hasn’t joined with not_in_channel. Enumerating only channels the token is actually a member of keeps discovery and extraction consistent.

Incremental sync

messages is the one resource in the bundled catalog with an incremental: block:
Each run reads a channel’s messages newer than the last checkpointed ts (Slack’s per-message timestamp, which doubles as a numeric cursor), injects it as the oldest query parameter on the next run, and checkpoints under messages_since per conversation.

Error handling

Slack’s Web API returns HTTP 200 even on failure, signaling errors via an error field in the JSON body. The manifest’s connection-wide defaults.response.error block (path: error, when_present: true) makes every resource check that field and fail the request instead of silently ingesting an error payload as if it were data.

Modes

ModeFull and ModeIncremental (see HTTP).