Skip to main content

Documentation Index

Fetch the complete documentation index at: https://info.bundle.social/llms.txt

Use this file to discover all available pages before exploring further.

bundlesocial-cli is a thin, scriptable wrapper over the bundle.social SDK. It prints JSON to stdout by default (one object per command) and human status to stderr — easy for scripts and AI agents to parse.

npm: bundlesocial-cli

npx bundlesocial-cli --help

OpenClaw / agent skill

npx skills add bundleglobal/bundlesocial-cli

Install

npx bundlesocial-cli --help     # one-off
npm install -g bundlesocial-cli # global → `bundle-social`
Requires Node.js 20+.

Authenticate

Create an API key in the dashboard, then:
export BUNDLESOCIAL_API_KEY="sk_live_..."
# optional, if your org has more than one team:
export BUNDLESOCIAL_TEAM_ID="team_..."
# optional, for self-hosted/staging:
export BUNDLESOCIAL_API_URL="https://api.bundle.social"

bundle-social doctor    # sanity-check the setup
Every env var also has a flag: --api-key, --team-id, --api-url (work before or after the command).

Commands

Run bundle-social <command> --help for the full option list of any command. The CLI covers the whole bundle.social API surface (the platform-specific edit/delete-after-publish helpers live under integrations:trigger). Posts
CommandWhat it does
posts:createPublish a post immediately (or --draft).
posts:scheduleSchedule a post for a future ISO-8601 --date.
posts:update <id>Update a post — only the fields you pass change.
posts:listList recent posts with filters.
posts:get <id> / posts:delete <id> / posts:retry <id>Fetch / delete / re-attempt a post.
posts:importImport post history from a connected account: posts:import, posts:imports, posts:import:get <importId>, posts:import:posts, posts:import:delete-posts, posts:import:retry <importId>.
posts:csvBulk-schedule from a CSV: posts:csv --file <path>, posts:csv:list, posts:csv:get <importId>, posts:csv:status <importId>, posts:csv:rows <importId>.
Comments
CommandWhat it does
comments:createComment on a post; repeat -c for a chain of replies (X-style thread via comments).
comments:list / comments:get <id> / comments:update <id> / comments:delete <id>List / fetch / update / delete comments.
comments:importPull existing comments for a post: comments:import, comments:imports, comments:import:get <importId>, comments:import:comments.
Media
CommandWhat it does
media:upload <path-or-url>Upload an image/video/document; returns the upload object.
media:upload-large <path>Chunked upload for large files (>~90 MB).
media:list / media:get <id> / media:delete <id> / media:delete-manyList / fetch / delete uploads.
Integrations (social accounts)
CommandWhat it does
integrations:listList connected social accounts (ids, platform types, channels).
integrations:tools / integrations:trigger <method>List & call the read-only platform helpers — subreddit flairs/requirements, YouTube categories/playlists/regions, LinkedIn mentions, Instagram locations, Google Business categories, TikTok trending music.
integrations:connect / integrations:disconnectStart an OAuth connect flow / disconnect an account.
integrations:portal-linkCreate a hosted portal link for end users to connect accounts.
integrations:set-channel / integrations:unset-channel / integrations:refresh-channelsPick / clear / refresh the channel (page, board, server channel) for an account.
integrations:check / integrations:refresh-profile / integrations:by-type <type> / integrations:copy / integrations:to-deleteConnection check, profile refresh, lookup by platform, copy between teams, list accounts pending deletion.
Analytics
CommandWhat it does
analytics:post <id>Engagement metrics for one post (--raw for the unprocessed payload).
analytics:accountLatest analytics for a connected account by -p <platform> (--raw for the unprocessed payload).
analytics:bulkEngagement metrics for several posts (--post-id repeatable).
analytics:refreshForce a fresh pull — --post-id for a post, otherwise -p <platform> for an account.
analytics:summaryOrg-level usage quotas + latest per-integration analytics snapshot.
Teams, organization & diagnostics
CommandWhat it does
teams:list / teams:get <id> / teams:create / teams:update <id> / teams:delete <id>Manage teams.
org:get / org:usageYour organization, and posts/comments/uploads/imports usage & quotas.
doctorDiagnostic JSON: API key, connectivity, organization API access, team selection, integrations, quotas.

Examples

# text post to X and Bluesky
bundle-social posts:create -c "We just shipped dark mode 🌙" -i x -i bluesky

# TikTok video with the required privacy level
bundle-social posts:create -c "BTS" -i tiktok -m ./demo.mp4 \
  --platform-settings '{"TIKTOK":{"privacy":"PUBLIC_TO_EVERYONE"}}'

# schedule a thread: post, then add replies as comments
POST=$(bundle-social posts:create -i linkedin -c "1/ A thread 🧵")
ID=$(printf '%s' "$POST" | jq -r .id)
bundle-social comments:create --post-id "$ID" -c "2/ more…" -c "3/ even more…"

# Reddit, done right: check requirements + flairs first
bundle-social integrations:trigger reddit:requirements --data '{"subreddit":"r/test"}'
bundle-social integrations:trigger reddit:flairs --data '{"subreddit":"r/test"}'
bundle-social posts:create --data '{"REDDIT":{"sr":"r/test","text":"Title","flairId":"<id>","uploadIds":[]}}'
The per-platform fields you can put under --platform-settings / --data are documented in Platform parameters.

Output contract (for scripts & agents)

  • stdout = exactly one JSON value per command (or a table with --pretty). Pipe it to jq.
  • stderr = human progress + --pretty error lines. Never parse stderr.
  • On error: exit code 1 and { "error": { "code", "message", "details"? } } on stdout.
The CLI ships with a SKILL.md (OpenClaw / agent skill), a PROVIDER_SETTINGS.md (exhaustive per-platform field reference) and an examples/ directory of ready-to-run data JSON templates and shell recipes — see the repo.
Also see: MCP server · SDK · Examples.