Connecting multiple Spacelift accounts to the same Slack workspace

Last updated: October 16, 2025

Currently, a Slack workspace can only be connected to one Spacelift account at a time. If you try to connect a second Spacelift account to the same Slack workspace, you'll receive an error message stating "Slack workspace already in use by a Spacelift account."

Workaround: Using Slack Webhooks

While direct Slack integration is limited to one Spacelift account per workspace, you can use Slack webhooks as a workaround to send notifications from multiple Spacelift accounts to the same Slack workspace.

Step 1: Create an Incoming Webhook in Slack

  1. Go to your Slack workspace and navigate to https://api.slack.com/apps

  2. Click Create New App → From scratch

  3. Give it a name (e.g., Spacelift Notifications) and select your workspace

  4. Under Features, select Incoming Webhooks

  5. Toggle Activate Incoming Webhooks to On

  6. Click Add New Webhook to Workspace and choose the channel where messages should post

  7. Copy the Webhook URL (it will look like: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX)

Step 2: Add the Slack Webhook to Spacelift

  1. In Spacelift, go to Integrations → Observability → Webhooks

  2. Click Add Webhook and name it (e.g., slack-notifications)

  3. For URL, paste the Slack Incoming Webhook URL you copied

  4. Save the webhook

This creates a named webhook endpoint that can be referenced from your webhook policy using its endpoint.id.

Step 3: Create a Notification Policy

  1. In Spacelift, go to Policies

  2. Create a new Notification Policy

  3. Use a policy similar to this example:

package spacelift

webhook[{"endpoint_id": endpoint.id, "payload": payload}] {
  endpoint := input.webhook_endpoints[_]
  endpoint.id == "slack-notifications"

  run := input.run_updated.run
  stack := input.run_updated.stack

  # only send when tracked runs finish
  run.type == "TRACKED"
  run.state == "FINISHED"

  payload := {
    "text": sprintf(
      ":rocket: *Spacelift run finished!*\n• *Stack:* %s\n• *State:* %s\n• *Branch:* %s\n• *Commit:* <%s|%s>\n• *Run URL:* <%s|View in Spacelift>",
      [
        stack.name,
        run.state,
        run.branch,
        run.commit.url,
        run.commit.message,
        input.run_updated.urls.run
      ]
    )
  }
}

This will send formatted notifications to your chosen Slack channel when runs finish.

You can repeat this process for each Spacelift account that needs to send notifications to the same Slack workspace, creating separate webhooks and policies for each account.