---
audience: developer
summary: Room bridges + workspace bridges.
title: Bridges API
path: reference/api/bridges
status: published
---

# Bridges API

13 endpoints (9 room bridges + 4 workspace bridges).

## Room bridges (admin)

| Method | Path | Purpose |
|---|---|---|
| `GET` | `/v1/admin/bridges` | List bridges in this tenant. |
| `POST` | `/v1/admin/bridges` | Create. |
| `GET` | `/v1/admin/bridges/{bridge_id}` | Detail. |
| `DELETE` | `/v1/admin/bridges/{bridge_id}` | Remove. |
| `POST` | `/v1/admin/bridges/{bridge_id}/pause` | Pause without removing. |
| `POST` | `/v1/admin/bridges/{bridge_id}/resume` | Resume. |
| `POST` | `/v1/admin/bridges/{bridge_id}/rotate-secret` | Rotate the HMAC secret. Old still valid 5 min. |

### POST /v1/admin/bridges body

```jsonc
{
  "transport": "slack",          // or discord / teams / scaiwave / custom
  "direction": "both",            // in / out / both
  "room_id": "<scaiwave-room-id>",
  "name": "Engineering Slack",
  "slack_team_id": "T0123",
  "slack_channel_id": "C0123",
  "slack_signing_secret": "...",
  "slack_bot_token": "xoxb-..."
}
```

For `transport: "custom"`, supply an `outbound_webhook` URL. The
response includes a generated `shared_secret`.

## Inbound webhooks

Called by the foreign system, not by your own clients.

| Method | Path | Purpose |
|---|---|---|
| `POST` | `/v1/bridges/{bridge_id}/inbound` | Generic inbound (HMAC-signed). |
| `POST` | `/v1/bridges/{bridge_id}/slack/events` | Slack-specific Events API webhook. |

### Generic inbound shape

Body:

```jsonc
{
  "event_id": "<foreign-side-unique>",
  "sender": {
    "external_id": "U12345",
    "display_name": "Alice Anderson",
    "avatar_url": "https://..."
  },
  "content": {
    "msgtype": "swp.text",
    "body": "Hello from the other side"
  },
  "reply_to_external_id": null
}
```

Signature header:

```http
X-ScaiWave-Bridge-Signature: t=<unix-ts>,v1=<hex-hmac-sha256>
```

Where the HMAC is `HMAC-SHA256(shared_secret, f"{ts}.{body}")`.

See [Build an integration bridge](/docs/scaiwave/tutorials/developer/build-an-integration-bridge).

## Workspace bridges (admin)

Different concept: connects a workspace to an external data
source (Notion DB, SharePoint, etc.) so the AI can read/write it
via the `scaiwave.workspace_bridge` plugin.

| Method | Path | Purpose |
|---|---|---|
| `GET` | `/v1/workspaces/{ws}/bridges` | List. |
| `POST` | `/v1/workspaces/{ws}/bridges` | Create. |
| `PATCH` | `/v1/workspaces/{ws}/bridges/{id}` | Update. |
| `DELETE` | `/v1/workspaces/{ws}/bridges/{id}` | Delete. |

(These don't relay chat — that's room bridges. They're more like
"plug an external system into the workspace's tool surface".)
