Skip to main content
This guide uses GitHub as the example provider and cURL for the API calls, so it works with any language. Framework-specific versions are linked at the end. Steps 1 to 3 are one-time setup in the dashboard. Steps 4 to 6 are what your app does for every user who connects an account.

Before you start

Create a separate workspace for development and production. Each workspace has its own integrations, keys and redirect URIs. See Workspaces.

1. Create an integration

An integration tells BundleUp how to talk to a provider using your OAuth app.
1

Start a GitHub integration in BundleUp

In the dashboard, open Integrations, click to add one, and pick GitHub. Leave the form open. It shows a Redirect URI (https://auth.bundleup.io/callback) that you need in the next step.
2

Create a GitHub OAuth app

In GitHub, go to Settings → Developer settings → OAuth Apps → New OAuth App. Use https://auth.bundleup.io/callback as the Authorization callback URL. After creating it, generate a client secret.
3

Paste the credentials into BundleUp

Back in BundleUp, fill in:
  • Identifier: github. This is the name you’ll use in code to refer to this integration.
  • Client ID and Client Secret from your GitHub OAuth app.
  • Scopes: for this guide, repo and read:user.
Save the integration.
Provider-specific setup notes are on each provider’s page at bundleup.io/integrations.

2. Register a redirect URI

After a user connects an account, BundleUp sends them back to a URL in your app. That URL must be registered first. Open Auth in the dashboard, add http://localhost:3000/callback under Redirect URIs, and save. While you’re there, copy your Client ID. It identifies your workspace in the authorization URL.
This redirect URI is different from the one in step 1. The one in step 1 (https://auth.bundleup.io/callback) is where the provider sends users back to BundleUp. This one is where BundleUp sends users back to you.

3. Create an API key

Open API Keys in the dashboard and create a key. Copy it and keep it on your server. It grants access to every connection in the workspace.

4. Connect an account

Send the user to BundleUp’s authorization URL. For this test, open it in your own browser:
Approve the GitHub consent screen. You’ll land on http://localhost:3000/callback?state=abc123&code=.... Nothing needs to be running on port 3000: copy the code from the address bar.

5. Exchange the code for a connection ID

From your server, within 5 minutes:
Store the connection_id. In a real app you’d save it next to the user who connected it. It stays valid until the connection is deleted, so you only do this once per account.

6. Make a request

Call GitHub through the Proxy, using the provider’s own API path:
Or ask the Unified API, which returns the same shape for every Git provider:
Open Logs in the dashboard to see both requests, with status code and duration.

What you just did

  • Set up an integration using your own OAuth app.
  • Ran the authorization flow and turned a one-time code into a connection_id.
  • Called the user’s GitHub account through the Proxy and the Unified API without touching a token.

Next steps

Next.js

The same flow inside a Next.js app.

Django

The same flow inside a Django app.

Rails

The same flow inside a Rails app.

AI agent

Give an AI agent access to a connected account over MCP.