BundleUp logo
Unified APISee all endpoints

One API.
Many providers.

Access common resources across services through a normalized, provider-agnostic interface. No per-provider rewrites required.

SlackDiscord BotHubSpotLinearJiraAsanaAttioApolloBasecampGitHub OAuthBitbucketGitLabGoogle DriveBoxDropboxOneDriveMicrosoft SharePointPipedriveSalesforceZoho CRMZendeskGoogle CalendarOutlookZoommonday.comClickUpTrelloCalendlyCloseCopperGorgiasHelp ScoutMicrosoft Dynamics 365ServiceNowTodoistWrikeZoho Desk
Three lines

Swap the connection. Keep the code.

Ask for channels, contacts or tickets by resource. Whether the user connected Slack or Discord, HubSpot or Salesforce, the response looks the same.

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

const bundleup = new BundleUp('Zw7Lt7...');
const unify = bundleup.unify('conn_456');
const channels = await unify.chat.channels();
Endpoints

Normalized resources, live today.

GET/chat/channels
GET/chat/channels/{channel_id}/messages
GET/chat/users
POST/chat/channels/{channel_id}/message
GET/crm/companies
GET/crm/contacts
GET/tasks/tasks
GET/tasks/tasks/{id}
GET/tasks/projects
GET/git/repos
GET/git/repos/{repo}/pulls
GET/git/repos/{repo}/issues
GET/git/repos/{repo}/tags
GET/git/repos/{repo}/releases
GET/git/repos/{repo}/branches
GET/git/repos/{repo}/commits
GET/drive/files
GET/helpdesk/tickets
GET/helpdesk/tickets/{id}
GET/calendar/events
20 of 20 endpoints
Why unified

Add a provider.
Ship zero new code.

Many shapes in, one shape out

Every provider in a category maps to the same fields, so your database and UI only learn one model.

Linear Jira Asana ClickUp
/tasks/tasks
{ "data": [...],
  "metadata": { "next" } }
Consistent paging
p1p2next →

One metadata.next cursor, everywhere.

Seven categories
CHATCRMPROJECT-MANAGEMENTGITDRIVECUSTOMER-SUPPORTCALENDAR

The resources most products integrate first.

Proxy when you need the edges
bundleup.unify('conn_456') // common
bundleup.proxy('conn_456') // specific

Same connection. Drop to the provider's raw API for anything not normalized. See Proxy →

Edge network

Normalized at the edge, close to your users. No servers to run.

01
User picks their tool

Slack or Discord, Jira or Linear. They authorize through BundleUp.

02
Call by resource

unify.tasks.tasks(), whatever the provider.

03
Store one shape

Same fields, same pagination. Your code has one path.

PROXYOne Endpoint. Every API.Call any provider endpoint from your code with auth handled at the edge.Explore Proxy →MCPOne Protocol. Any Agent.Give agents a provider's own MCP tools with the same connection ID.Explore MCP →

Write it once.
Support every provider.

250,000 free requests every month. Unlimited connections and integrations.

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.