skills/post-bridge/SKILL.md
Create, schedule, and manage social media posts across Instagram, TikTok, YouTube, X, LinkedIn, Facebook, Pinterest, Threads, and Bluesky via the Post Bridge API. Covers media upload, post creation, scheduling, platform-specific configs, draft mode, analytics, and post result tracking.
npx skillsauth add post-bridge-hq/agent-mode post-bridgeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Autonomously manage social media posting via Post Bridge API. Post to 9 platforms from a single command or API call.
The CLI is published on npm as postbridge-cli — run it with npx postbridge-cli <command> (no install needed; npx fetches it on first use). Requires Node.js 18+. If npx postbridge-cli is unavailable for any reason, fall back to the bundled script at <skill-path>/scripts/post-bridge.js (same commands and flags).
Freshness check: If more than 30 days have passed since the
last-updateddate above, inform the user that this skill may be outdated and point them to the update options below.
Source: github.com/post-bridge-hq/agent-mode API docs: api.post-bridge.com/reference
Update methods by installation type:
| Installation | How to update |
|--------------|---------------|
| CLI (npx skills) | npx skills update |
| Claude Code plugin | /plugin marketplace update |
| Cursor | Remote rules auto-sync from GitHub |
| Manual | Pull latest from repo or re-copy skills/post-bridge/ |
.env:
POST_BRIDGE_API_KEY=pb_live_xxxxx
Or run the setup command:
npx postbridge-cli setup --key pb_live_xxxxx
All requests use Bearer token:
Authorization: Bearer <POST_BRIDGE_API_KEY>
Base URL: https://api.post-bridge.com
Config priority (highest to lowest):
POST_BRIDGE_API_KEY environment variable./.post-bridge/config.json (project-local)~/.config/post-bridge/config.json (user-global)When you receive an "API key not found" error from the CLI:
npx postbridge-cli setup --key pb_live_xxxxx
Get your API key at: https://www.post-bridge.com/dashboard/api-keys
Note for agents: Prefer
npx postbridge-cli(the published npm CLI). If the skill is installed locally and you want to run the bundled copy instead, the script lives at<skill-path>/scripts/post-bridge.js— same commands and flags.
| Command | Description |
|---------|-------------|
| npx postbridge-cli setup --key <key> | Configure API key |
| npx postbridge-cli accounts | List connected social accounts |
| npx postbridge-cli post --caption "..." --accounts 1,2,3 | Create a post |
| npx postbridge-cli post --caption "..." --accounts 1,2,3 --schedule "2026-06-20T09:00:00Z" | Schedule a post for a specific time (UTC) |
| npx postbridge-cli post --caption "..." --accounts 1,2 --use-queue | Auto-schedule to the next queue slot (saved timezone) |
| npx postbridge-cli post --caption "..." --accounts 1,2 --use-queue --queue-timezone "America/New_York" | Auto-schedule to next queue slot in a specific timezone |
| npx postbridge-cli post --caption "..." --accounts 1,2 --draft | Save as a draft instead of publishing |
| npx postbridge-cli post --caption "..." --accounts 1,2 --platform-config '{"tiktok":{"draft":true}}' | Post with per-platform options |
| npx postbridge-cli upload --file ./image.jpg | Upload media, returns media_id |
| npx postbridge-cli post --caption "..." --accounts 1,2,3 --media mid_xxx | Post with uploaded media |
| npx postbridge-cli posts | List recent posts (filters: --status, --platform, --limit, --offset) |
| npx postbridge-cli posts:get --id <post_id> | Get post details and status |
| npx postbridge-cli posts:update --id <post_id> --caption "..." | Update a scheduled/draft post (caption, schedule, accounts, media, draft) |
| npx postbridge-cli posts:delete --id <post_id> | Delete a scheduled/draft post |
| npx postbridge-cli analytics | View analytics (filters: --platform, --timeframe 7d\|30d\|90d\|all) |
| npx postbridge-cli analytics:sync | Refresh analytics data (--platform tiktok\|youtube\|instagram optional) |
| npx postbridge-cli results --post-id <post_id> | Check per-platform posting results |
| npx postbridge-cli media | List uploaded media |
| npx postbridge-cli media:delete --id <media_id> | Delete uploaded media |
Use these endpoints directly if you prefer raw API calls over the CLI.
GET /v1/social-accounts
Returns array of connected accounts with id, platform, username. Store these IDs — you need them for every post.
POST /v1/media/create-upload-url
Body: { "mime_type": "video/mp4", "size_bytes": <int>, "name": "video.mp4" }
Returns media_id + upload_url. Then:
PUT <upload_url>
Content-Type: video/mp4
Body: <binary file>
List media:
GET /v1/media?limit=50&offset=0
Delete media:
DELETE /v1/media/<media_id>
POST /v1/posts
Body: {
"caption": "your caption here #hashtags",
"media": ["<media_id>"],
"social_accounts": [<account_id_1>, <account_id_2>],
"scheduled_at": "2026-01-01T14:00:00Z", // omit for instant post
"is_draft": false, // true to save as draft
"use_queue": true, // optional, auto-schedule to next queue slot (uses saved timezone)
"platform_configurations": { ... }, // optional, see below
"account_configurations": { // optional, per-account overrides
"account_configurations": [
{ "account_id": 1, "caption": "override for this account" }
]
}
}
Queue scheduling (use_queue):
true to auto-schedule using the user's saved timezone from their dashboard settings{ "timezone": "America/New_York" } to override with a specific IANA timezonescheduled_at — pick one or the otherrandomize_queue_time is enabled, the slot time will be offset by up to ±10 minutes for a more natural posting patternGET /v1/posts?limit=50&offset=0&status=scheduled&platform=instagram
Params: limit, offset, status (scheduled/published/failed/draft), platform.
GET /v1/posts/<post_id>
Returns full post details including status: processing, scheduled, posted, failed.
PATCH /v1/posts/<post_id>
Body: { "caption": "new caption", "scheduled_at": "...", "social_accounts": [...] }
Can update caption, schedule, accounts, media, platform configs, or draft status. Only works on scheduled/draft posts.
DELETE /v1/posts/<post_id>
Only works on scheduled/draft posts (cannot delete published posts).
GET /v1/post-results?post_id=<post_id>&limit=50&offset=0
Returns per-platform results showing whether each platform post succeeded or failed, with error details.
List analytics — views, likes, comments, shares per post:
GET /v1/analytics?platform=tiktok&limit=50&offset=0&timeframe=30d
Params:
platform (optional): tiktok, youtube, instagramtimeframe (optional): 7d, 30d, 90d, all (default: all)limit, offset for paginationReturns:
{
"data": [
{
"id": "...",
"post_result_id": "...",
"platform": "tiktok",
"platform_post_id": "...",
"view_count": 4062,
"like_count": 120,
"comment_count": 15,
"share_count": 8,
"cover_image_url": "https://...",
"share_url": "https://...",
"video_description": "...",
"duration": 30,
"platform_created_at": "2026-03-01T09:00:00Z",
"last_synced_at": "2026-03-03T12:00:00Z",
"match_confidence": "exact"
}
],
"count": 42,
"limit": 50,
"offset": 0
}
Sync analytics — refresh data from connected platforms:
POST /v1/analytics/sync?platform=tiktok
Triggers a background sync of analytics data. Supports all tracked platforms: TikTok, YouTube, and Instagram.
Params:
platform (optional): tiktok, youtube, or instagram — sync only one platform. Omit to sync all.Returns:
{
"triggered": [
{ "platform": "tiktok", "runId": "run_..." },
{ "platform": "youtube", "runId": "run_..." },
{ "platform": "instagram", "runId": "run_..." }
]
}
Get single analytics record:
GET /v1/analytics/<analytics_id>
Post Bridge has a native MCP (Model Context Protocol) server. If you're using Claude Desktop, ChatGPT, Cursor, or any MCP-compatible client, you can connect directly without this skill.
Claude Desktop: One-click connect at post-bridge.com/mcp
Claude Code / Cursor / Other MCP clients — add to your MCP config:
{
"mcpServers": {
"post-bridge": {
"type": "streamable-http",
"url": "https://mcp.post-bridge.com/mcp"
}
}
}
MCP Tools available (11 tools):
| Tool | Description |
|------|-------------|
| list_social_accounts | List all connected accounts with IDs, platforms, usernames |
| create_post | Create/schedule a post. Accepts caption, accounts, media_urls, schedule, use_queue (true or {timezone}), platform configs |
| list_posts | List posts with filters (platform, status, limit, offset) |
| get_post | Get full post details by ID |
| update_post | Update caption, schedule, accounts, or media on a scheduled/draft post |
| delete_post | Delete a scheduled or draft post |
| list_analytics | Get analytics (views, likes, comments, shares) with platform/timeframe filters |
| sync_analytics | Trigger a background refresh of analytics data. Optional platform param to sync a specific platform (tiktok/youtube/instagram) |
| list_post_results | Check per-platform posting results (success/failure with error details) |
| list_media | List uploaded media files with IDs and URLs |
| delete_media | Delete an uploaded media file |
MCP tools accept media_urls (public URLs) — the server downloads and uploads them automatically. No need to manually upload media when using MCP.
Pass inside platform_configurations object on post creation, or use --platform-config with the CLI:
TikTok:
draft: true — save as draft (publish manually on TikTok with trending sound)video_cover_timestamp_ms: 3000 — cover thumbnail at 3 secondsis_aigc: true — label as AI-generated contentInstagram:
video_cover_timestamp_ms: 3000 — cover thumbnailis_trial_reel: true — trial reel mode (needs 1000+ followers)trial_graduation: "SS_PERFORMANCE" — auto-graduate based on performanceYouTube:
video_cover_timestamp_ms: 3000 — cover thumbnailtitle: "My Short Title" — override post titleTwitter/X:
caption: "override caption" — platform-specific captionPinterest:
title: "Pin Title" — pin titlelink: "https://..." — destination URLboard_ids: ["board_id"] — target boardsAll platforms support caption and media overrides for per-platform customization.
These behaviors are easy to miss and cause silent or confusing failures. Account for them before posting.
http://, https://, www.) are removed from the X caption before posting. This is intentional (link posts on X cost ~13× more per post). If a link is essential for X, put it in a reply or the user's bio, not the caption — and tell the user the link won't appear in the X post.media. The media field takes Post Bridge media_ids only. Either upload the file first (CLI/API) or use media_urls (CLI --media-urls, or the MCP media_urls field) with a direct, public file URL that the server can download. A non-direct share link will fail with a generic error and no per-platform results.results shows fewer platforms than you posted to, suspect file size — re-encode smaller or shorter. Keep videos reasonably sized.results --post-id <id> after a publish to confirm per-platform success and read any error details.draft: true so the user can add the sound and publish manually.ffmpeg -i video.mp4 -ss 00:00:04 -frames:v 1 frame.jpg -y
posted/ subfolder to avoid duplicatesWhen automating posts, follow these rules to keep accounts in good standing:
is_draft: true or TikTok's draft: true so the user can review before publishingPublishing confirmation: Unless the user explicitly asks to "post now" or "publish immediately", always confirm before posting. Creating a draft is safe; posting is irreversible and goes live instantly.
Use these exact names for platform filtering and configurations:
instagram — Instagram (Reels, Stories, Feed)tiktok — TikTokyoutube — YouTube (Shorts)twitter — X (formerly Twitter)linkedin — LinkedInfacebook — Facebookpinterest — Pinterestthreads — Threadsbluesky — Blueskyscheduled_at to pre-schedule batches — Post Bridge handles the timinguse_queue: true to auto-schedule posts to the user's next available queue slot using their saved timezone — no need to pick a time manuallyresults after posting to see per-platform success/failureanalytics:sync to refresh data before checking analytics--draft flag when testing to avoid accidental publishingdevelopment
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.