Before you start
- A BundleUp account. Sign up at app.bundleup.io.
- A GitHub account, to create an OAuth app and to connect as a test user.
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,
repoandread:user.
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, addhttp://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: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: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:What you just did
- Set up an integration using your own OAuth app.
- Ran the authorization flow and turned a one-time
codeinto aconnection_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.

