> ## 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.

# Introduction

> BundleUp connects your product to your users’ third-party accounts, then lets you call those accounts from your backend, your Unified API calls, or your AI agents.

BundleUp is integration infrastructure for SaaS products. Your users connect their accounts (GitHub, Slack, HubSpot, Google Drive and many more) once through BundleUp. After that, your backend calls those accounts with an API key and a **connection ID**. BundleUp stores the OAuth tokens, refreshes them, applies retries and rate limits, and logs every request.

You never handle a user’s access token, never write token-refresh code, and never build an OAuth flow per provider.

```mermaid theme={null}
flowchart LR
    U[End user] -->|connects their account once| A[BundleUp Auth]
    A -->|connection_id| B[Your backend]
    B -->|API key + connection ID| S

    subgraph S[BundleUp]
        P[Proxy]
        UA[Unified API]
        M[MCP]
    end

    S -->|user's access token| PR[Provider API<br/>GitHub, Slack, HubSpot, ...]
```

The diagram reads left to right. An end user connects an account once through BundleUp Auth, and your backend receives a `connection_id`. From then on, your backend sends requests to BundleUp with its API key and that connection ID. BundleUp attaches the user’s access token and forwards the call to the provider.

## Three ways to call a connected account

All three use the same connections, the same authentication and the same per-connection rate limit. You can mix them freely.

<Columns cols={3}>
  <Card title="Proxy" icon="arrow-right-arrow-left" href="/docs/guides/proxy/overview">
    Call the provider’s own API, unchanged. You write the provider’s paths and
    payloads; BundleUp adds authentication, retries and logging.
  </Card>

  <Card title="Unified API" icon="merge" href="/docs/guides/unified/overview">
    One request shape across providers in the same category: list repos,
    tickets, contacts, files or calendar events the same way everywhere.
  </Card>

  <Card title="MCP" icon="microchip-ai" href="/docs/guides/mcp/overview">
    Give an AI agent the provider’s own MCP tools, scoped to one user’s
    account, without the agent ever seeing a token.
  </Card>
</Columns>

Not sure which one you need? See [Proxy vs Unified API vs MCP](/docs/choosing-a-surface).

## What it looks like

Once a user has connected their GitHub account, listing their repositories is one call:

<CodeGroup>
  ```bash cURL theme={null}
  curl https://proxy.bundleup.io/user/repos \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "BU-Connection-Id: conn_abc123"
  ```

  ```typescript JavaScript theme={null}
  import { BundleUp } from '@bundleup/sdk';

  const client = new BundleUp(process.env.BUNDLEUP_API_KEY);
  const response = await client.proxy('conn_abc123').get('/user/repos');
  const repos = await response.json();
  ```

  ```python Python theme={null}
  from bundleup import BundleUp

  client = BundleUp(os.environ["BUNDLEUP_API_KEY"])
  repos = client.proxy("conn_abc123").get("/user/repos").json()
  ```

  ```ruby Ruby theme={null}
  require 'bundleup'

  client = BundleUp::Client.new(ENV['BUNDLEUP_API_KEY'])
  repos = client.proxy('conn_abc123').get('/user/repos').body
  ```
</CodeGroup>

That request goes to GitHub with the user’s token attached. If the token had expired, BundleUp would have refreshed it first.

## Who BundleUp is for

* **SaaS teams** that need to read or write data in their customers’ tools and don’t want to run OAuth, token storage and refresh for every provider.
* **AI product teams** whose agents need to act in a user’s Slack, Linear or GitHub on that user’s behalf.
* **Teams with many integrations** that want one place to see every outbound call, its status and its latency.

## Start here

<Columns cols={2}>
  <Card title="Why BundleUp" icon="lightbulb" href="/docs/why-bundleup">
    What you would otherwise build yourself, and what you keep control of.
  </Card>

  <Card title="How it works" icon="diagram-project" href="/docs/how-it-works">
    The moving parts, and what happens to a single request.
  </Card>

  <Card title="Quickstart" icon="rocket" href="/docs/quickstart">
    From sign-up to your first API call in about five minutes.
  </Card>

  <Card title="Core concepts" icon="book" href="/docs/concepts/overview">
    Workspaces, integrations, connections and requests.
  </Card>
</Columns>


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