The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Bulkpublish listing page.
The free social media API built for automation, AI agents, and LLMs.
Get Started » · API Docs · Website · MCP Server
Programmatically publish to 15 platforms from a single API call. Built for developers, AI agents, LLMs, and agentic workflows that need reliable social media automation without browser sessions or manual interaction.
Most social media tools are built for humans clicking buttons. BulkPublish is built for code — whether that code is written by a developer, an AI agent, an LLM with tool use, or an autonomous workflow.
Create a free account at app.bulkpublish.com.
Go to Settings > Developer in the dashboard and create an API key. Keys start with bp_ and are shown only once — save it securely.
Connect your social accounts in the dashboard under Channels. The API uses your connected channels to publish.
Python
Node.js
Homebrew (macOS/Linux)
Or call the REST API directly with curl, fetch, requests, or any HTTP client.
BulkPublish ships an MCP server so AI assistants can manage your social media directly:
72 tools in the local (stdio) server: create_post, list_channels, upload_media, get_analytics, the interactive compose_post composer (MCP Apps), and more. The hosted server at https://mcp.bulkpublish.com/mcp (OAuth 2.1) serves the 20-tool core profile: channels, posts, media, analytics and the interactive panels. See mcp-server/README.md.
BulkPublish includes a 24-skill library for AI agents to plan, adapt, review, schedule, and publish social media content: Social Media Content Skills.
Ready-made tool definitions for autonomous AI agents:
All examples are complete, runnable scripts with error handling.
| Python | Node.js |
|---|---|
More examples in examples/ — including Python automation scripts, Node.js examples, curl reference, and AI agent integrations.
supportedMetrics / supportedTotals) so a 0 is never mistaken for a measurement — see Metrics by PlatformlinkTrackingOverride, to rewrite links through bulkpubli.sh and count the clicks. Reported as linkClicks / totalLinkClicks and measured by BulkPublish rather than the platform, so it works even where the platform reports nothing — see Character LimitspostTypeOverridesFull interactive API documentation: app.bulkpublish.com/docs
| Method | Endpoint | Description |
|---|---|---|
POST | /api/posts | Create a post (draft, scheduled, or immediate) |
GET | /api/posts | List posts (paginated, filterable by status/date/channel/label) |
GET | /api/posts/:id | Get a post with platform statuses and metrics |
PUT | /api/posts/:id | Update a draft or scheduled post |
DELETE | /api/posts/:id | Delete a post |
POST | /api/posts/:id/publish | Publish a draft immediately |
POST | /api/posts/:id/retry | Retry failed platforms |
POST | /api/posts/:id/approve | Approve a post awaiting team approval (roles with post:approve) |
POST | /api/posts/:id/reject | Reject a pending post back to draft, with an optional reason |
POST | /api/posts/bulk | Bulk delete or retry |
GET | /api/channels | List connected social media channels |
GET | /api/channels/:id/health | Check channel token health |
GET | /api/channels/:id/options | Get platform options (Pinterest boards, YouTube playlists, Tumblr blogs, Discord channels, Reddit ?q=/?subreddit=, Threads ?q= place search) |
GET | /api/channels/:id/mentions | Search accounts for @mention (X, Bluesky, LinkedIn Pages — LinkedIn results are @[Name](https://github.com/azeemkafridi/bulkpublish-api/blob/HEAD/urn:li:organization:ID) tokens plus the vanityName slug they matched on) |
GET/POST | /api/templates | Saved post templates (get/update/delete via /api/templates/:id) |
GET/POST | /api/calendar-notes | Notes pinned to calendar days, ?from&to range (update/delete via /api/calendar-notes/:id) |
POST/DELETE | /api/posts/:id/share | Create or revoke the post's read-only review link (/p/<token>) |
GET/POST | /api/hashtag-groups | Saved hashtag groups, 1-30 hashtags each (get/update/delete via /api/hashtag-groups/:id) |
GET/POST | /api/channel-sets | Saved channel groups for one-click targeting (update/delete via /api/channel-sets/:id) |
GET/POST | /api/rss-feeds | RSS/Atom autopost feeds — new items become posts (update/delete via /api/rss-feeds/:id) |
POST | /api/media | Upload a media file (multipart form, up to 100MB) |
POST | /api/media/multipart/create | Start a chunked upload for large media (videos up to 1GB, 10MB parts) |
POST | /api/media/multipart/complete | Assemble uploaded parts and record the media file |
GET | /api/media | List uploaded media |
GET | /api/analytics/summary | Analytics summary for a date range |
GET | /api/analytics/engagement | Engagement totals, per-day / per-platform / per-channel breakdowns, ranked and full post lists — filterable by channels, platforms, labels, format and media type; compare=1 adds the previous period |
GET | /api/analytics/post-history | Every stored metrics snapshot for one post, per platform (trend since publish) |
GET | /api/analytics/links | Tracked bulkpubli.sh links with click counts |
POST | /api/schedules | Create a recurring schedule |
GET | /api/quotas/usage | Check current plan limits and usage |
See the OpenAPI spec for the complete endpoint list.
| Platform | Post Types | Media |
|---|---|---|
| Post, Story | Images, Videos | |
| Feed, Reel, Story, Carousel | Images (JPEG), Videos (MP4, MOV) | |
| X / Twitter | Tweet, Thread | Images, Videos, GIFs |
| TikTok | Video, Photo Slideshow | Videos (MP4, MOV), Images |
| YouTube | Video, Short | Videos (MP4, MOV, WebM, AVI, WMV, FLV) |
| Threads | Post, Thread, Quote Post | Images, Videos |
| Bluesky | Post, Thread | Images |
| Pin | Images, Videos | |
| Google Business Profile | Post, Event, Offer | Images |
| Post, Multi-image, PDF Carousel, Article | Images (JPEG, PNG, GIF), Videos (MP4) | |
| Mastodon | Post, Thread | Images, Videos |
| Snapchat | Story, Saved Story, Spotlight | Exactly 1 image (JPG, PNG) or video (MP4, MOV, vertical, 5–60s, max 1GB) |
Supports sync and async. Rich docstrings on every method for IDE and LLM consumption.
Full TypeScript types, zero dependencies, native fetch (Node 18+).
Installs the Node SDK via Homebrew.
No SDK needed — any HTTP client works:
| Limit | Free | Pro | Business |
|---|---|---|---|
| Writes/min | 60 | 60 | 60 |
| Reads/min | 300 | 300 | 300 |
| Daily API requests | 100 | 5,000 | 50,000 |
| API keys | 1 | 5 | 10 |
| Recurring schedules | — | 10 | Unlimited |
See the rate limits guide for headers, backoff strategies, and best practices.
| Platform | Package | Install |
|---|---|---|
| Zapier | BulkPublish on Zapier | Search "BulkPublish" in Zapier |
| n8n | n8n-nodes-bulkpublish | Settings > Community Nodes > n8n-nodes-bulkpublish |
| Homebrew | homebrew-bulkpublish | brew tap azeemkafridi/bulkpublish && brew install bulkpublish |
| Resource | URL |
|---|---|
| Dashboard | app.bulkpublish.com |
| API Docs | app.bulkpublish.com/docs |
| Website | bulkpublish.com |
| support@bulkpublish.com |
MIT