BundleUp logo
ProxyRead the guide

One endpoint.
Every API.

Execute third-party API calls at the edge with built-in OAuth, token refresh, retries, and rate limiting. No integration servers required.

curl proxy.bundleup.io/{any path}BU-Connection-Id: conn_456
SlackDiscordDiscord BotMailchimpHubSpotLinearMicrosoft TeamsJiraAsanaAttioApolloAirtableBasecampGitHub OAuthBitbucketGitLabGmailLinkedInIntercomGongGoogle DocsGoogle SheetsGoogle SlidesGoogle DriveBoxDropboxOneDriveMicrosoft SharePointNotionPipedriveFreshBooksQuickBooksRedditSalesforceXXeroZoho BooksZoho CRMFacebookZendeskGoogle CalendarOutlookConfluenceZoomStripeYouTubemonday.comClickUpTrelloCalendlyFigmaSentryDatadogPagerDutyAircallBambooHRBrexCanvaCloseCloudflareConstant ContactCopperDatabricksDialpadDigitalOceanDocuSignDropbox SignGoogle AdsGoogle AnalyticsGoogle MeetGoogle TasksGorgiasGreenhouseGustoHelp ScoutInstagramKitKlaviyoLeverMeta AdsMicrosoft Dynamics 365Microsoft ExcelMicrosoft To DoMiroNeonPandaDocPayPalPinterestPostHogRampServiceNowShopifySnowflakeSpotifySquareSupabaseTickTickTikTokTodoistTwitchTypeformVercelWebexWebflowWorkdayWrikeZoho DeskZoomInfo
Three lines

Call the provider's API, as documented.

Use their paths and payloads. BundleUp attaches the right credentials for the connection and returns the response untouched.

Proxy reference →
import { BundleUp } from '@bundleup/sdk';

const bundleup = new BundleUp('Zw7Lt7...');
const proxy = bundleup.proxy('conn_456');
const channels = await proxy.get('conversations.list');
// 200 OK · provider response, untouched
{
  "channels": [{
    "id": "<string>",
    "name": "<string>",
    "is_channel": "<boolean>",
    "created": "<int>"
  }],
  "response_metadata": {}
}
Request path

What happens between your call and theirs.

All of it at the edge, close to your users. Nothing for you to run.

Your app
GET conversations.list
BU-Connection-Id: conn_456
BundleUp edge
✓ credentials✓ token fresh✓ retry policy✓ rate limit
Provider API
slack.com/api/…
Bearer ***********
Built in

Everything around the API call.
Already done.

Token refresh, per user

Every connection's token is refreshed ahead of expiry. No cron jobs, no refresh races, no 401s at 3am.

conn_456 · Slackrefreshed
conn_789 · GitHubvalid
conn_012 · HubSpotvalid
Retries
attempt 1502
attempt 2200

A flaky upstream doesn't become your incident.

Rate limiting

Paced to stay inside each provider's limits.

Credential storage
conn_456xoxp-************
conn_789gho_************

Tokens live with BundleUp. Your database only keeps the ID.

Edge network

Processed close to your users. No regional bottlenecks, no servers to manage.

01
Connect an account

Your user authorizes through BundleUp's page. You get back a connection ID.

02
Open a proxy

Pass the ID to bundleup.proxy(). Store the ID, never the token.

03
Call any endpoint

Anything the provider exposes and the user's scopes allow.

MCPOne Protocol. Any Agent.Give agents a provider's own MCP tools with the same connection ID.Explore MCP →UNIFIED APIOne API. Many Providers.Common resources across services through one normalized interface.Explore Unified API →

Never build another
OAuth flow.

250,000 free requests every month. Unlimited connections.

We use cookies to understand how you use our site and to improve your experience. Analytics cookies are only set once you accept. See our Privacy Policy for details.