Workspace
The top-level container. Everything else belongs to exactly one workspace, and nothing crosses between workspaces: an API key from one workspace can’t use a connection from another. Use one workspace per environment (development, staging, production). → WorkspacesIntegration
A provider (GitHub, Slack, HubSpot…) configured for your workspace with your OAuth app credentials and the scopes you want to request. An integration holds no user data; it’s the template every connection for that provider is created from. → IntegrationsConnection
One end user’s authorized account at one provider. It holds the encrypted access and refresh tokens. Its connection ID is what you pass on every request to say “act as this account”. → ConnectionsRequest
A single call made through the Proxy, Unified API or MCP using a connection. Each one is logged, rate-limited per connection, and counted toward your plan’s usage. → Requests & usageAPI key and client ID
Two credentials with very different jobs. The API key is a secret for your backend; it authorizes requests. The client ID is public; it identifies your workspace in the browser when a user starts connecting an account. → API keys & client IDPutting it together
A typical lifecycle:- You create a workspace and add a GitHub integration with your GitHub OAuth app.
- A user clicks “Connect GitHub” in your product. The browser goes to BundleUp with your client ID.
- The user approves. BundleUp creates a connection and your backend receives its ID.
- Your backend makes requests with your API key and that connection ID.
- A webhook tells your backend when connections are created, refreshed or deleted.

