Bulkpublish Api — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Bulkpublish Api (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
The free social media API built for automation, AI agents, and LLMs.
Programmatically publish to 11 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.
from bulkpublish import BulkPublish
bp = BulkPublish("bp_your_key_here")
bp.posts.create(
content="Launching our new product today!",
channels=[{"channelId": 1, "platform": "x"}, {"channelId": 2, "platform": "linkedin"}],
status="scheduled",
scheduled_at="2026-04-10T09:00:00Z",
)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
pip install bulkpublishNode.js
npm install bulkpublishHomebrew (macOS/Linux)
brew tap azeemkafridi/bulkpublish && brew install bulkpublishOr call the REST API directly with curl, fetch, requests, or any HTTP client.
curl -X POST https://app.bulkpublish.com/api/posts \
-H "Authorization: Bearer bp_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"content": "Hello from the BulkPublish API!",
"channels": [{"channelId": 1, "platform": "linkedin"}],
"status": "draft"
}'BulkPublish ships an MCP server so AI assistants can manage your social media directly:
{
"mcpServers": {
"bulkpublish": {
"command": "npx",
"args": ["-y", "@bulkpublish/mcp-server"],
"env": {
"BULKPUBLISH_API_KEY": "bp_your_key_here"
}
}
}
}37 tools available: create_post, list_channels, upload_media, get_analytics, the interactive compose_post composer (MCP Apps), and more. Runs locally (stdio) or hosted over Streamable HTTP at https://mcp.bulkpublish.com/mcp. See mcp-server/README.md.
Ready-made tool definitions for autonomous AI agents:
All examples are complete, runnable scripts with error handling.
<table> <tr><th>Python</th><th>Node.js</th></tr> <tr> <td>
from bulkpublish import BulkPublish
bp = BulkPublish("bp_your_key_here")
post = bp.posts.create(
content="Check out our latest update!",
channels=[
{"channelId": 1, "platform": "facebook"},
{"channelId": 2, "platform": "x"},
{"channelId": 3, "platform": "linkedin"},
],
status="draft",
)</td> <td>
import { BulkPublish } from 'bulkpublish';
const bp = new BulkPublish({ apiKey: 'bp_your_key_here' });
const post = await bp.posts.create({
content: 'Check out our latest update!',
channels: [
{ channelId: 1, platform: 'facebook' },
{ channelId: 2, platform: 'x' },
{ channelId: 3, platform: 'linkedin' },
],
status: 'draft',
});</td> </tr> </table>
post = bp.posts.create(
content="This will go out tomorrow morning.",
channels=[{"channelId": 1, "platform": "instagram"}],
status="scheduled",
scheduled_at="2026-04-10T09:00:00Z",
timezone="America/New_York",
)media = bp.media.upload("./product-photo.jpg")
post = bp.posts.create(
content="Our newest product is here.",
channels=[{"channelId": 1, "platform": "instagram"}],
media_files=[media["file"]["id"]],
status="scheduled",
scheduled_at="2026-04-10T12:00:00Z",
)import csv
from bulkpublish import BulkPublish
bp = BulkPublish("bp_your_key_here")
channels = bp.channels.list()["channels"]
with open("content-calendar.csv") as f:
for row in csv.DictReader(f):
bp.posts.create(
content=row["content"],
channels=[{"channelId": ch["id"], "platform": ch["platform"]} for ch in channels],
status="scheduled",
scheduled_at=row["scheduled_at"],
timezone="America/New_York",
)More examples in examples/ — including Python automation scripts, Node.js examples, curl reference, and AI agent integrations.
postTypeOverridesFull interactive API documentation: [app.bulkpublish.com/docs](https://app.bulkpublish.com/docs)
https://app.bulkpublish.comAuthorization: Bearer bp_your_key_here| 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/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) |
GET | /api/channels/:id/mentions | Search users for @mention (X, Bluesky) |
POST | /api/media | Upload a media file (multipart) |
GET | /api/media | List uploaded media |
GET | /api/analytics/summary | Analytics summary for a date range |
GET | /api/analytics/engagement | Engagement data grouped by day/week/month |
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 |
pip install bulkpublishSupports sync and async. Rich docstrings on every method for IDE and LLM consumption.
npm install bulkpublishFull TypeScript types, zero dependencies, native fetch (Node 18+).
brew tap azeemkafridi/bulkpublish && brew install bulkpublishInstalls the Node SDK via Homebrew.
No SDK needed — any HTTP client works:
curl https://app.bulkpublish.com/api/channels \
-H "Authorization: Bearer bp_your_key_here"| 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 |
| [email protected] |
MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.