Skip to main content
A consumer is an entry point where users interact with the AI. A Slack channel, an API key, a WhatsApp number, or a CLI integration. Each consumer is bound to exactly one workspace, preventing cross-workspace data pollution.

Consumer types

TypeDescription
slackSlack channel via Socket Mode. Users mention the bot to query.
apiDirect HTTP API. Query via POST /api/workspaces/:id/query.
whatsappWhatsApp number (via webhook).
claude-codeCLI integration for developer workflows.
Consumer types are provider-agnostic. Adding a new consumer type is a registry change on the server; no route modifications needed.

How consumers work

Slack

  1. Configure Slack bot credentials at the organisation level (Settings > Integrations)
  2. Bind a Slack channel to a workspace consumer
  3. Users mention the bot in the channel to start a query
  4. SupaProxy routes the message to the correct workspace based on channel binding
  5. The response is posted back to the Slack thread
A single Slack bot is shared across all workspaces. Individual workspaces bind channels to it. A channel can only belong to one workspace.

API

The API consumer is always available. Query any workspace directly:
POST /api/workspaces/:id/query
Content-Type: application/json
Cookie: supaproxy_session=YOUR_JWT

{"query": "Your question here"}

Channel binding

Each consumer can have multiple channels bound to it. For Slack, a channel is a Slack channel ID. The binding ensures:
  • Messages from that channel route to the correct workspace
  • One channel cannot be bound to multiple workspaces
  • Channel metadata (name, type) is stored for observability

Consumer status

StatusMeaning
activeConsumer is running and accepting messages
inactiveConsumer is configured but not running