Become a 10x Brand Engineer with Cuppa AI See Who's Hiring

Slack Integration

Available on: Solo plans and higher

Connect Slack to receive Cuppa notifications in your workspace and run /cuppa slash commands without leaving Slack. Generate articles, check status, pull Performance Hub snapshots, refresh your content planner, and more.


What You Can Do

  • Real-time notifications when articles, bulk projects, or brand setup complete (or fail)
  • Performance alerts for visibility score drops, audit regressions, and weekly digests
  • Social inbox alerts when new comments or DMs arrive (Slack only)
  • Slash commands to generate content, check status, and manage brands from any Slack channel
  • @mention triggers so bots and automations can run the same commands (Slack blocks slash commands from bot-posted messages)
  • Approval cards to review and approve commands before they run (human-in-the-loop)
  • Per-brand channels so multi-brand teams route each brand’s alerts to the right channel

Plan Requirements

PlanSlack Access
SoloAvailable
StudioAvailable
ScaleAvailable
EnterpriseAvailable

Legacy plans: Power, Business, Agency, and Agency+ include the same access (mapped to Solo, Studio, Scale, and Enterprise). Hobby does not. Legacy plans are no longer available for new purchases.


Prerequisites

  1. A Slack workspace where you can install apps (Workspace Admin or permission to approve apps)
  2. A Cuppa Solo plan or higher
  3. API keys configured in Team Settings if you plan to use generation commands (/cuppa generate, /cuppa bulk, etc.)

Step 1: Connect Slack

  1. Go to Team SettingsIntegrations
  2. Find Slack
  3. Click Add to Slack
  4. Sign in to Slack if prompted
  5. Review the permissions and click Allow

After authorization, you return to Cuppa with a Connected badge showing your workspace name.

Important: One Slack workspace connects to one Cuppa team. If you manage multiple Cuppa teams, connect Slack from the team you want commands and notifications to use. Large agencies often connect each client’s Cuppa team to that client’s Slack workspace.


Step 2: Choose Your Notification Channel

During OAuth, Slack may ask you to pick a default channel for incoming webhooks. That channel becomes the team default for notifications.

To change notification preferences later:

  1. Go to Team SettingsNotifications
  2. Toggle events under Slack Notifications

Default Slack notifications (enabled out of the box)

EventDescription
Article generation completedArticle finished successfully
Article generation failedArticle hit an error
Bulk project completedBulk run finished
Bulk project failedBulk run had failures
Brand setup completedBrand onboarding finished
Weekly performance digestBVS and search snapshot (Mondays)
Visibility score droppedBVS fell significantly
Website audit regressionAudit score dropped or checks failed
New social comment or messageSocial inbox item (Slack only)

Additional events (approvals, agent workflows, client notes, firehose mentions) can be toggled on in Team Settings → Notifications.


Step 3: Route Notifications per Brand (Optional)

If your Cuppa team has multiple brands, send each brand’s alerts to a dedicated Slack channel:

  1. Open Brand Settings for the site
  2. Go to Integrations
  3. Find Brand Slack channel
  4. Select a channel and click Save channel

Notes:

  • Only channels the Cuppa app has joined appear in the list
  • For private channels, invite the Cuppa app first: in Slack, open the channel → IntegrationsAdd apps → add Cuppa
  • If you see a message about a webhook-only connection, click Reconnect on the Slack card in Team Settings to grant full channel-posting permissions

Slash Commands

Type /cuppa in any Slack channel where the Cuppa app is installed.

Run /cuppa help anytime for the full list. Common commands:

Brands (multi-brand teams)

/cuppa sites
/cuppa sites coffee

Lists or searches your brands by domain. When you have more than one brand, include site= or brand= on generation commands.

Generate a single article

/cuppa generate keyword="best coffee makers" site=cuppa.ai
/cuppa generate keyword="best coffee makers" site=cuppa.ai model=gpt-5-mini preset=1

Bulk generation

/cuppa bulk keywords="kw1, kw2" site=cuppa.ai
/cuppa bulk keywords="kw1, kw2" site=cuppa.ai model=gpt-5-mini

Brand keywords

/cuppa brand-keywords site=cuppa.ai keywords="kw1, kw2"

Bulk images

/cuppa images count=5 site=cuppa.ai
/cuppa images count=5 site=cuppa.ai model=gpt-image-1

Content cluster

/cuppa cluster pillar="main keyword" supporting="kw1, kw2" site=cuppa.ai

Video generation

/cuppa video prompt="sunrise over mountains" site=cuppa.ai duration=5
/cuppa video prompt="sunrise over mountains" site=cuppa.ai model=replicate:runway-gen-4.5

Performance Hub snapshot

/cuppa performance site=cuppa.ai

Returns Brand Visibility Score and search snapshot for the brand.

Social post drafts

/cuppa social site=cuppa.ai article=<article_id>
/cuppa social site=cuppa.ai article=<article_id> platforms=linkedin,twitter draft=true

Content planner

/cuppa planner site=cuppa.ai
/cuppa planner refresh site=cuppa.ai

refresh resyncs the calendar from keywords and publish cadence.

Status and summaries

/cuppa status
/cuppa status <article_id>
/cuppa summary
/cuppa summary weekly

Triggering Commands from Automations (@Cuppa mentions)

Slack does not fire /cuppa slash commands from messages posted by bots or the Slack API. Only a human typing /cuppa in the Slack client triggers a slash command. So if you have an automation (for example, a Claude/agent workflow) that drafts commands and posts them into a channel, those slash commands will never run.

To support this, Cuppa also listens for @mentions. Anywhere the Cuppa app is present, post:

@Cuppa generate keyword="best coffee makers" site=cuppa.ai

Cuppa runs the exact same command as /cuppa generate ... and replies in a thread on your message. This works whether the message was typed by a human or posted by a bot/automation via the Slack API.

Anything after @Cuppa is treated as the command (no /cuppa prefix needed). All the same commands, options, and per-brand site= handling apply.

Human-in-the-loop: propose and approve

For an audit or review loop, prefix the command with propose:

@Cuppa propose generate keyword="best coffee makers" site=cuppa.ai

Cuppa posts an Approve & run / Reject card instead of running immediately. When a teammate clicks Approve & run, Cuppa executes the command and replies with the result. Reject discards it. This lets an automation draft commands while a human stays in control of what actually runs.

Notes for automations

  • The command runs asynchronously: Cuppa acknowledges the mention instantly and posts the result in-thread when it finishes (generation can take a while).
  • Cuppa ignores its own messages, so replies never trigger new commands (no loops).
  • For teams with many brands, always include site=domain.com so the command targets the right brand.

API, CLI, and MCP

The same command execution and approval flow is available programmatically, so you can trigger Cuppa from your own tools without going through the Slack UI.

REST API

# Run a command (optionally post the result into a Slack channel)
curl -X POST https://api.cuppa.ai/v1/integrations/slack/command 
  -H "X-API-KEY: cpa-your-key" 
  -H "Content-Type: application/json" 
  -d '{"command":"generate keyword=\"best coffee makers\" site=cuppa.ai","channel":"C0123456789"}'
 
# Propose a command for human approval in a Slack channel
curl -X POST https://api.cuppa.ai/v1/integrations/slack/propose 
  -H "X-API-KEY: cpa-your-key" 
  -H "Content-Type: application/json" 
  -d '{"command":"generate keyword=\"best coffee makers\" site=cuppa.ai","channel":"C0123456789"}'

command runs synchronously and returns the result blocks plus a plain-text summary. Include channel to also post the result into Slack. propose requires a channel and posts an Approve/Reject card.

CLI

cuppa slack run "generate keyword=\"best coffee makers\" site=cuppa.ai"
cuppa slack run "status" --channel C0123456789
cuppa slack propose "bulk keywords=\"a, b, c\" site=cuppa.ai" --channel C0123456789

MCP

Two tools are exposed to MCP clients (Claude, Cursor, etc.):

  • slack_run_command - run a command, optionally post the result to a channel
  • slack_propose_command - post an Approve/Reject card to a channel

Command Options Reference

OptionUsed byDescription
keyword="..."generateTarget keyword (required for generate)
keywords="kw1, kw2"bulk, brand-keywordsComma-separated keywords
site=example.commost commandsBrand domain or slug (required when you have multiple brands)
brand=example.commost commandsAlias for site=
model=gpt-5-minigenerate, bulkAI model
preset=1generate, bulkPreset ID
count=5imagesNumber of images
pillar="..."clusterPillar keyword
supporting="..."clusterSupporting keywords
prompt="..."videoVideo scene description
duration=5videoLength in seconds
article=<id>socialCompleted article ID
platforms=linkedin,twittersocialTarget platforms
draft=truesocialCreate drafts instead of publishing

Generation commands use your team’s API keys (same as the Cuppa web app). They run on behalf of the team owner account.


Permissions Cuppa Requests

When you click Add to Slack, Cuppa requests:

ScopePurpose
chat:writePost notifications and command responses
channels:readList public channels for per-brand routing
groups:readList private channels the app has joined
incoming-webhookPost to your chosen default channel
commandsHandle /cuppa slash commands
app_mentions:readHandle @Cuppa mention triggers (for automations)

You do not need to create your own Slack app or configure slash command URLs. Cuppa manages the Slack app on our side.

Reconnect for @mentions: If you connected Slack before mention triggers launched, click Reconnect on the Slack card in Team Settings to grant app_mentions:read. Slash commands and notifications keep working without reconnecting.


Troubleshooting

”Slack workspace not connected to Cuppa” when running /cuppa

The Slack workspace you are typing in has not completed OAuth for your Cuppa team.

  1. Open app.cuppa.ai/team/settings/integrations
  2. Confirm you are on the correct Cuppa team (check the team name in the sidebar)
  3. Click Add to Slack and approve the install for this workspace
  4. Retry /cuppa help

OAuth fails or redirects with an error

SymptomFix
App install blockedAsk a Slack Workspace Admin to approve the Cuppa app
Wrong team connectedDisconnect and reconnect from the intended Cuppa team
Cancelled during OAuthClick Add to Slack again and complete authorization

Notifications not appearing

  1. Confirm Slack shows Connected in Team Settings → Integrations
  2. Check Team Settings → Notifications and ensure the event is enabled for Slack
  3. Verify the Cuppa app is in the target channel (especially private channels)
  4. For per-brand routing, confirm Brand Settings → Integrations → Brand Slack channel is saved

/cuppa generate fails but connection works

Generation needs valid API keys:

  1. Go to Team Settings → API Keys
  2. Add or verify your OpenAI key (and any model-specific keys you use)
  3. Confirm the key has credits and is not expired

Multiple brands: “Which site?” or site not found

Use site= with a domain fragment or full domain:

/cuppa sites
/cuppa generate keyword="..." site=yourbrand.com

@Cuppa mentions don’t respond

  1. Make sure the Cuppa app is a member of the channel (invite it for private channels)
  2. Click Reconnect on the Slack card in Team Settings to grant the app_mentions:read permission (needed if you connected before mention triggers launched)
  3. Confirm the message is @Cuppa <command> (the command follows the mention, with no /cuppa prefix)
  4. Remember results post in a thread on your message and generation can take a moment

Per-brand channel list is empty

  • Invite the Cuppa app to the private channel first
  • Reconnect Slack if you only have webhook-only permissions (see Step 3 above)

Disconnect and reconnect

  1. Team Settings → Integrations → Slack → Disconnect
  2. Click Add to Slack again
  3. Re-select your default channel during OAuth if prompted
  4. Re-save per-brand channel mappings if you use them