Skip to content
@bundleglobal

bundleglobal

Creators of bundle.social
bundle.social: the unified social media API for developers

Ship social features, not fifteen OAuth integrations.

One REST API for publishing, comments, media and analytics across 15 social platforms.
Unlimited connected accounts, no per-account charges. The API is closed. The tooling around it is open, and it is all here.

Docs • OpenAPI spec • MCP server • Get an API key • Status

npm install bundlesocial
import { Bundlesocial } from 'bundlesocial';

const bundle = new Bundlesocial(process.env.BUNDLE_SOCIAL_API_KEY!);

await bundle.post.postCreate({
  requestBody: {
    teamId: '<TEAM_ID>',
    title: 'Hello world from bundle.social',
    status: 'SCHEDULED',
    postDate: new Date(Date.now() + 60 * 60 * 1000).toISOString(),
    socialAccountTypes: ['TWITTER', 'LINKEDIN', 'INSTAGRAM'],
    data: {
      TWITTER: { text: 'Hello world from bundle.social!' },
      LINKEDIN: { text: 'Hello world from bundle.social!' },
      INSTAGRAM: {
        type: 'POST',
        text: 'Hello world from bundle.social!',
        uploadIds: ['<UPLOAD_ID>'],
      },
    },
  },
});

bundlesocial bundlesocial-cli bundlesocial-mcp OpenAPI 3.0 Docs

No SDK, no problem. Base URL https://api.bundle.social, everything under /api/v1, an x-api-key header, that is the whole contract:

# 0. Is anything on fire? This one needs no key.
curl https://api.bundle.social/api/v1

# 1. Which teams does this key own? teamId is the workspace every other call hangs off.
#    Every id in the API - teams, uploads, posts, accounts - is a UUID v4.
curl https://api.bundle.social/api/v1/team \
  -H "x-api-key: $BUNDLE_SOCIAL_API_KEY"

# 2. Schedule a post to the accounts connected to one of them.
#    postDate is any ISO 8601 timestamp; status is DRAFT or SCHEDULED.
curl -X POST https://api.bundle.social/api/v1/post \
  -H "x-api-key: $BUNDLE_SOCIAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "teamId": "<TEAM_ID>",
    "title": "Hello from bundle.social",
    "status": "SCHEDULED",
    "postDate": "2027-01-15T15:00:00.000Z",
    "socialAccountTypes": ["TWITTER"],
    "data": { "TWITTER": { "text": "Hello from bundle.social" } }
  }'

Platforms

Same request, same auth, same error contract for every one of them. You change one entry in socialAccountTypes, not one integration.

Platform socialAccountTypes value
Instagram INSTAGRAM
TikTok TIKTOK
YouTube YOUTUBE
Facebook FACEBOOK
LinkedIn LINKEDIN
Twitter / X TWITTER
Threads THREADS
Snapchat SNAPCHAT
Pinterest PINTEREST
Reddit REDDIT
Bluesky BLUESKY
Mastodon MASTODON
Discord DISCORD
Slack SLACK
Google Business GOOGLE_BUSINESS

Note

The platform list and its enum values come from the socialAccountTypes enum in the published OpenAPI spec, which is the contract that decides what you can actually post to. If a README anywhere lags a platform behind, the enum is the contract.

What you can call

One key, one base URL, 114 paths in the published spec. A sample of the surface:

Area Endpoints Does
Publish POST /api/v1/post · /post/{id}/retry · /post/reference-key/{key} Schedule or publish, per-platform overrides under data.<PLATFORM>, retries, your own idempotency key
Media /upload · /upload/from-url · /upload/multipart/* Images, video and documents up to 5 GB, multipart or straight from a URL, transcoding handled
Accounts /social-account/connect · /create-portal-link · /set-channel · /refresh-channels Hosted OAuth or your own UI, page/channel/location selection, token refresh you never see
Analytics /analytics/social-account · /analytics/post · /analytics/post/bulk · /analytics/*/raw Normalized views, impressions, likes and demographics, plus the untouched platform payload
Comments /comment · /comment/import · /comment/import/comments/{id}/action Auto first comments, comment import, moderation actions
Import /post-history-import · /post-csv-import Backfill posts and analytics from before you connected; bulk-create from CSV
Platform extras /misc/youtube/* · /misc/linkedin/* · /misc/reddit/* · /misc/google-business/* Edit and delete after publish, playlists, thumbnails, LinkedIn mentions, subreddit flairs, GBP hours and reviews
Plumbing GET /api/v1 · /organization/usage/* · /team Live per-platform health, usage metering, teams as tenants

Tip

Building multi-tenant? A team per customer is the pattern - accounts, posts and daily limits are scoped to a team, while API keys and webhooks are org-wide. Start at the API introduction. Prefer to generate your own client? The spec is public and complete.

SDK and tooling

Package Install Version
Node.js SDK npm install bundlesocial npm
CLI npm install -g bundlesocial-cli npm
MCP server npx bundlesocial-mcp npm

The SDK is generated from the OpenAPI spec. Need Python, Go or anything else? Point your generator at the spec, or ask us.

Python quickstart, no SDK required
import os, requests
from datetime import datetime, timedelta, timezone

BASE = "https://api.bundle.social/api/v1"
HEADERS = {"x-api-key": os.environ["BUNDLE_SOCIAL_API_KEY"]}

post_date = (datetime.now(timezone.utc) + timedelta(hours=1)).isoformat()

r = requests.post(
    f"{BASE}/post",
    headers=HEADERS,
    json={
        "teamId": os.environ["BUNDLE_SOCIAL_TEAM_ID"],
        "title": "Hello world from bundle.social",
        "status": "SCHEDULED",
        "postDate": post_date,
        "socialAccountTypes": ["TWITTER", "LINKEDIN"],
        "data": {
            "TWITTER": {"text": "Hello world from bundle.social!"},
            "LINKEDIN": {"text": "Hello world from bundle.social!"},
        },
    },
)
r.raise_for_status()
print(r.json())

A runnable version lives in bundlesocial-examples/python.

Agents, editors and automation

What How
MCP server npx bundlesocial-mcp - a local stdio server exposing the whole API as MCP tools, for Claude Code, Claude Desktop, Cursor and any other MCP client
CLI npx bundlesocial-cli - JSON on stdout, human status on stderr, so it pipes into jq, into CI, into cron and into shell-out agents. Requires Node 20+
MCP agent example A working agent wired to the MCP server, ready to clone
Make.com No-code TikTok workflow built on the REST API
Postman workspace The whole API, importable, no local setup

Examples

Runnable code, not pseudocode. The fastest way to see what the API can carry.

Project Stars What it is
bundlesocial-examples stars Every example below, one repo. Each directory is independent - clone it and run the one that matches your runtime
nextjs/ Full-stack SaaS integration: connect flow, composer, scheduling
express/ Node backend: server-side publishing and webhook handling
python/ Scripts and backend jobs straight against the REST API
mcp-agent/ An AI agent posting through the MCP server
cli-github/ CI/CD automation driving the CLI from GitHub Actions
Also in this org
Repo What it is
bundlesocial-node Source of the typed TypeScript SDK, generated from the OpenAPI spec
bundlesocial-docs The MDX behind info.bundle.social. Typo in the docs? PR it here

Anything not listed on this page is an experiment, a fork or an archive.

Start

  1. Create an account and generate a key under API Keys in the dashboard.
  2. export BUNDLE_SOCIAL_API_KEY=pk_live_...
  3. Create a team, connect an account, paste either snippet above.

Connected accounts are unlimited on every plan, so step 3 never turns into a per-seat conversation.

Pricing · Changelog · Webhooks · Rate limits · Platform limits · Status

Bugs and feature requests go in the issue tracker of the relevant repo above.

Pinned Loading

  1. bundlesocial-node bundlesocial-node Public

    TypeScript 2

  2. bundlesocial-examples bundlesocial-examples Public

    Examples of how to use the bundle.social API a unified social media API with no accounts limits

    TypeScript 2

  3. bundlesocial-mcp bundlesocial-mcp Public

    TypeScript

  4. bundlesocial-cli bundlesocial-cli Public

    TypeScript

  5. bundlesocial-docs bundlesocial-docs Public

    https://info.bundle.social

    MDX 5

Repositories

Showing 6 of 6 repositories

Top languages

Loading…

Most used topics

Loading…