> ## Documentation Index
> Fetch the complete documentation index at: https://bundleup.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Workspaces

> A workspace is the boundary for everything in BundleUp: integrations, connections, keys, webhooks, members, billing.

A **workspace** is the top-level container in BundleUp. It owns:

* **Integrations**, and the connections created through them
* **API keys**, which can only reach that workspace’s connections
* A **client ID** and a list of allowed **redirect URIs** for the authorization flow
* **Webhooks**
* **Members** and their roles
* A **plan**, usage and billing
* **Request logs**

Workspaces are fully isolated. A connection ID from workspace A used with an API key from workspace B is treated as not found.

## One workspace per environment

Create a separate workspace for each environment you run, for example `acme-dev`, `acme-staging` and `acme-prod`.

```mermaid theme={null}
flowchart LR
    subgraph DEV[acme-dev]
        D1[GitHub integration<br/>dev OAuth app]
        D2[API key: dev]
        D3[Redirect URI:<br/>localhost:3000/callback]
    end
    subgraph STG[acme-staging]
        S1[GitHub integration<br/>staging OAuth app]
        S2[API key: staging]
        S3[Redirect URI:<br/>staging.acme.com/callback]
    end
    subgraph PROD[acme-prod]
        P1[GitHub integration<br/>production OAuth app]
        P2[API key: prod]
        P3[Redirect URI:<br/>app.acme.com/callback]
    end
```

Each environment has its own workspace, with its own OAuth apps, API key and redirect URIs.

This keeps:

* **Test connections out of production.** Developers connecting their own accounts while testing never show up next to customer connections.
* **Keys separate.** A leaked development key can’t reach production data.
* **OAuth apps separate.** Many providers only allow one callback URL per app, or require review before production use. Separate apps per environment avoid both problems.
* **Logs readable.** Production logs aren’t mixed with local experiments.

Integration identifiers (like `github`) can be the same in every workspace, so your code doesn’t change between environments. Only the API key, client ID and redirect URI do, and those belong in environment variables anyway.

## Workspace settings

| Setting | Where in the dashboard | Notes |
| - | - | - |
| Name, slug, icon | **Settings → General** | Shown in the dashboard only. |
| Client ID | **Auth** | Public. Used in the authorization URL. |
| Redirect URIs | **Auth** | Every `redirect_uri` you use in the authorization flow must be listed here exactly. |
| Members | **Settings → Members** | Invite people and assign roles. See [Team & members](/docs/platform/team). |
| Webhooks | **Settings → Webhooks** | See [Webhooks](/docs/guides/webhooks/overview). |
| Plan and billing | **Settings → Billing** | See [Pricing](/docs/platform/pricing). |

## Deleting a workspace

Only the workspace **owner** can delete a workspace, from **Settings → General**. Deleting it removes its integrations, connections, keys and webhooks.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.