postsyncer-social-media-assistant
Manages social media through PostSyncer using REST and/or MCP. Use when scheduling, posting, or managing content across Instagram, TikTok, YouTube, X (Twitter), LinkedIn, Facebook, Threads, Bluesky, Pinterest, Telegram, Mastodon. Covers posts, media library (list, import URLs, delete, multipart file upload), media folders (CRUD), comments with optional `media` attachments, labels, campaigns, and analytics. Accounts must be pre-connected in the PostSyncer app.
Best use case
postsyncer-social-media-assistant is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Manages social media through PostSyncer using REST and/or MCP. Use when scheduling, posting, or managing content across Instagram, TikTok, YouTube, X (Twitter), LinkedIn, Facebook, Threads, Bluesky, Pinterest, Telegram, Mastodon. Covers posts, media library (list, import URLs, delete, multipart file upload), media folders (CRUD), comments with optional `media` attachments, labels, campaigns, and analytics. Accounts must be pre-connected in the PostSyncer app.
Teams using postsyncer-social-media-assistant should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/postsyncer/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How postsyncer-social-media-assistant Compares
| Feature / Agent | postsyncer-social-media-assistant | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Manages social media through PostSyncer using REST and/or MCP. Use when scheduling, posting, or managing content across Instagram, TikTok, YouTube, X (Twitter), LinkedIn, Facebook, Threads, Bluesky, Pinterest, Telegram, Mastodon. Covers posts, media library (list, import URLs, delete, multipart file upload), media folders (CRUD), comments with optional `media` attachments, labels, campaigns, and analytics. Accounts must be pre-connected in the PostSyncer app.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
Related Guides
AI Agents for Marketing
Discover AI agents for marketing workflows, from SEO and content production to campaign research, outreach, and analytics.
Best AI Agents for Marketing
A curated list of the best AI agents and skills for marketing teams focused on SEO, content systems, outreach, and campaign execution.
Best AI Skills for ChatGPT
Find the best AI skills to adapt into ChatGPT workflows for research, writing, summarization, planning, and repeatable assistant tasks.
SKILL.md Source
# PostSyncer Social Media Assistant
Autonomously manage social media through [PostSyncer](https://postsyncer.com) using the REST API.
## Setup
1. Create a PostSyncer account at [app.postsyncer.com](https://app.postsyncer.com)
2. [Connect social profiles](https://app.postsyncer.com/dashboard?action=accounts) (Instagram, TikTok, YouTube, X, LinkedIn, etc.)
3. Go to [**Settings → API Integrations**](https://app.postsyncer.com/dashboard?action=settings§ion=api-integrations) and create a personal access token with abilities: `workspaces`, `accounts`, `posts`, and (if you use them) `labels`, `campaigns`
4. Add to `.env`: `POSTSYNCER_API_TOKEN=your_token`
## PostSyncer MCP (optional)
[PostSyncer MCP](https://postsyncer.com/openclaw) uses the **same Bearer token** as REST. Typical tools: `list-workspaces`, `list-accounts`, post CRUD, **`list-media`**, **`get-media`**, **`upload-media-from-url`**, **`delete-media`**, **`list-folders`**, **`create-folder`**, **`get-folder`**, **`update-folder`**, **`delete-folder`**, comments, labels, campaigns, analytics.
**Multipart file upload** is only via REST: `POST /api/v1/media/upload/file` (not exposed as an MCP tool). Use **`upload-media-from-url`** or REST URL import when the client cannot send multipart.
## How to Make API Calls
All requests go to `https://postsyncer.com/api/v1` with the header:
```
Authorization: Bearer $POSTSYNCER_API_TOKEN
Content-Type: application/json
```
Use `web_fetch`, `curl`, or any HTTP tool available. Always read `$POSTSYNCER_API_TOKEN` from the environment.
---
## API Reference
### Discovery (Call First)
**List Workspaces** — `GET /api/v1/workspaces`
```bash
curl "https://postsyncer.com/api/v1/workspaces" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Returns workspaces with `id`, `name`, `slug`, `timezone`.
**List Accounts** — `GET /api/v1/accounts`
```bash
curl "https://postsyncer.com/api/v1/accounts" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Returns accounts with `id`, `platform`, `username`, `workspace_id`.
---
### Media library
Requires the `posts` ability. Responses include `id`, `workspace_id`, `folder_id`, and asset metadata.
**List Media** — `GET /api/v1/media`
```bash
curl -G "https://postsyncer.com/api/v1/media" \
--data-urlencode "workspace_id=12" \
--data-urlencode "page=1" \
--data-urlencode "per_page=50" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Query params: `workspace_id`, `folder_id`, `root_only` (true/false), `page`, `per_page` (max 100).
**Get Media** — `GET /api/v1/media/{media_id}`
```bash
curl "https://postsyncer.com/api/v1/media/999" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Import from URLs** — `POST /api/v1/media/upload/url`
```bash
curl -X POST "https://postsyncer.com/api/v1/media/upload/url" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"workspace_id": 12, "urls": ["https://example.com/photo.jpg"], "folder_id": null}'
```
**Upload file (multipart)** — `POST /api/v1/media/upload/file`
Use `multipart/form-data` with fields such as `workspace_id`, `file` (and optional chunk/chunk metadata if your client uses chunked upload). Not JSON.
**Delete Media** — `DELETE /api/v1/media/{media_id}` *(confirm first)*
```bash
curl -X DELETE "https://postsyncer.com/api/v1/media/999" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
---
### Media folders
Requires the `posts` ability.
**List Folders** — `GET /api/v1/folders`
```bash
curl -G "https://postsyncer.com/api/v1/folders" \
--data-urlencode "workspace_id=12" \
--data-urlencode "root=1" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Query params: `workspace_id`, `parent_id`, `root` (top-level only).
**Create Folder** — `POST /api/v1/folders`
```bash
curl -X POST "https://postsyncer.com/api/v1/folders" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"workspace_id": 12, "name": "Campaign assets", "color": "#3b82f6", "parent_id": null}'
```
**Get Folder** — `GET /api/v1/folders/{id}`
**Update Folder** — `PUT /api/v1/folders/{id}`
```bash
curl -X PUT "https://postsyncer.com/api/v1/folders/5" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Renamed folder"}'
```
**Delete Folder** — `DELETE /api/v1/folders/{id}` *(confirm first)*
---
### Posts
**List Posts** — `GET /api/v1/posts`
```bash
curl "https://postsyncer.com/api/v1/posts?page=1&per_page=20&include_comments=false" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Query params: `page`, `per_page` (max 100), `include_comments` (true/false).
**Get Post** — `GET /api/v1/posts/{id}`
```bash
curl "https://postsyncer.com/api/v1/posts/123" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Create Post** — `POST /api/v1/posts`
```bash
curl -X POST "https://postsyncer.com/api/v1/posts" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": 12,
"schedule_type": "schedule",
"content": [{"text": "Caption #hashtags", "media": [42, "https://example.com/image.jpg"]}],
"accounts": [{"id": 136}, {"id": 95, "settings": {"board_id": 123}}],
"schedule_for": {"date": "2026-03-26", "time": "14:30", "timezone": "America/New_York"},
"labels": [5],
"repeatable": false
}'
```
- `schedule_type`: `publish_now` | `schedule` | `draft`
- `schedule_for`: Optional scheduling object used when `schedule_type` is `schedule`. Provide `{"date": "YYYY-MM-DD", "time": "HH:MM", "timezone": "..."}` to schedule for a specific date/time, or omit/leave empty to auto-schedule to the next available time slot
- `content`: Array of thread items. Each needs `text` and/or `media`: an array of **library media IDs** (integers) and/or **HTTPS URL strings** (import or list media first when you want stable IDs)
- `accounts`: Array of `{id, settings?}`. Platform-specific options go in `settings`
**Update Post** — `PUT /api/v1/posts/{id}`
```bash
curl -X PUT "https://postsyncer.com/api/v1/posts/123" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": [{"text": "Updated caption"}], "schedule_for": {"date": "2026-03-27", "time": "10:00"}}'
```
Only posts that have not been published yet can be updated.
**Delete Post** — `DELETE /api/v1/posts/{id}` *(confirm with user first)*
```bash
curl -X DELETE "https://postsyncer.com/api/v1/posts/123" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
---
### Comments
**List Comments** — `GET /api/v1/comments`
```bash
curl -G "https://postsyncer.com/api/v1/comments" \
--data-urlencode "post_id=123" \
--data-urlencode "per_page=20" \
--data-urlencode "include_replies=true" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Query params: `post_id` (required), `per_page`, `page`, `include_replies`, `platform`.
**Get Comment** — `GET /api/v1/comments/{id}`
```bash
curl "https://postsyncer.com/api/v1/comments/456" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Create Comment / Reply** — `POST /api/v1/comments`
```bash
curl -X POST "https://postsyncer.com/api/v1/comments" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"post_id": 123, "content": "Reply text", "parent_comment_id": null, "media": [42]}'
```
Optional `media`: array of **integer library IDs** and/or **HTTPS URLs** (same shape as post `content[].media`; do not use a deprecated `media_urls` field).
**Update Comment** — `PUT /api/v1/comments/{id}`
```bash
curl -X PUT "https://postsyncer.com/api/v1/comments/456" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Updated reply text"}'
```
**Hide Comment** — `POST /api/v1/comments/{id}/hide`
```bash
curl -X POST "https://postsyncer.com/api/v1/comments/456/hide" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Delete Comment** — `DELETE /api/v1/comments/{id}` *(confirm first)*
```bash
curl -X DELETE "https://postsyncer.com/api/v1/comments/456" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Sync Comments from Platforms** — `POST /api/v1/comments/sync`
```bash
curl -X POST "https://postsyncer.com/api/v1/comments/sync" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"post_id": 123}'
```
---
### Labels
**List Labels** — `GET /api/v1/labels`
```bash
curl "https://postsyncer.com/api/v1/labels" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Get Label** — `GET /api/v1/labels/{id}`
**Create Label** — `POST /api/v1/labels`
```bash
curl -X POST "https://postsyncer.com/api/v1/labels" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Campaign 2026", "color": "#3b82f6", "workspace_id": 12}'
```
**Update Label** — `PUT /api/v1/labels/{id}`
**Delete Label** — `DELETE /api/v1/labels/{id}` *(confirm first)*
---
### Analytics
All analytics endpoints require the `posts` API ability.
**All Workspaces** — `GET /api/v1/analytics`
```bash
curl "https://postsyncer.com/api/v1/analytics" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**By Workspace** — `GET /api/v1/analytics/workspaces/{workspace_id}`
```bash
curl "https://postsyncer.com/api/v1/analytics/workspaces/12" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**By Post** — `GET /api/v1/analytics/posts/{post_id}`
```bash
curl "https://postsyncer.com/api/v1/analytics/posts/123" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**By Account** — `GET /api/v1/analytics/accounts/{account_id}`
```bash
curl "https://postsyncer.com/api/v1/analytics/accounts/136" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
**Sync Post Analytics** — `POST /api/v1/analytics/posts/{post_id}/sync`
```bash
curl -X POST "https://postsyncer.com/api/v1/analytics/posts/123/sync" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
Queues background jobs to refresh metrics. Does not return metrics directly — call GET after sync.
---
### Account Management
**Delete Account** — `DELETE /api/v1/accounts/{id}` *(destructive, confirm first)*
```bash
curl -X DELETE "https://postsyncer.com/api/v1/accounts/136" \
-H "Authorization: Bearer $POSTSYNCER_API_TOKEN"
```
---
## Platform-Specific Settings
Pass per-platform options in `accounts[].settings` when creating/updating posts:
**Pinterest:** `{"board_id": 123456}`
**X/Twitter:**
```json
{"reply_settings": "everyone", "for_super_followers_only": false, "quote_tweet_id": null, "reply": {"in_reply_to_tweet_id": null}, "community_id": null, "share_with_followers": true}
```
**TikTok:**
```json
{"privacy_level": "PUBLIC_TO_EVERYONE", "disable_comment": false, "disable_duet": false, "disable_stitch": false, "post_mode": "DIRECT_POST"}
```
**Instagram:** `{"post_type": "POST"}` — options: `REELS`, `STORIES`, `POST`
**YouTube:**
```json
{"video_type": "video", "title": "My Video", "privacyStatus": "public", "notifySubscribers": true}
```
**LinkedIn:** `{"visibility": "PUBLIC"}` — options: `PUBLIC`, `CONNECTIONS`, `LOGGED_IN`
**Bluesky:** `{"website_card": {"uri": "https://...", "title": "...", "description": "..."}}`
**Telegram:** `{"disable_notification": false, "protect_content": false}`
---
## Common Workflows
### Schedule a Post to Multiple Platforms
1. `GET /api/v1/workspaces` → get `workspace_id`
2. `GET /api/v1/accounts` → get `id`s for target platforms
3. Optionally `POST /api/v1/media/upload/url` (or MCP `upload-media-from-url`) → use returned `id`s in `content[].media`
4. `POST /api/v1/posts` with `schedule_type: "schedule"` and `schedule_for`
### Reply to Comments
1. `GET /api/v1/posts` → find post `id`
2. `POST /api/v1/comments/sync` with `post_id`
3. `GET /api/v1/comments?post_id=123&include_replies=true`
4. `POST /api/v1/comments` with `post_id` and optional `parent_comment_id`
### Check Performance
1. `GET /api/v1/analytics/posts/{id}` for a specific post
2. If stale: `POST /api/v1/analytics/posts/{id}/sync`, then re-fetch
---
## Best Practices
- **Always start with** `GET /workspaces` and `GET /accounts` to discover IDs; use `GET /folders` and `GET /media` when organizing or attaching library assets
- **New automations:** Use `schedule_type: "draft"` or confirm before `publish_now`
- **Destructive actions:** State what will happen, confirm before delete operations
- **Multi-network:** One post can target multiple accounts; check per-platform `status` in the response
- **Rate limits:** 60 requests/minute — don't call sync endpoints repeatedly
- **Hashtags:** Keep relevant and limited (3–5 per post)
---
## Error Handling
| Status | Meaning |
|--------|---------|
| `401` | Token missing or invalid |
| `403` | Token lacks required ability (e.g. `posts`) |
| `404` | Resource not found or no access |
| `422` | Validation error — check required fields and formats |
| `429` | Rate limited — wait before retrying |
---
## Links
- [API Documentation](https://docs.postsyncer.com/api-reference/introduction)
- [PostSyncer Dashboard](https://app.postsyncer.com)
- [API Authentication](https://docs.postsyncer.com/essentials/authentication)Related Skills
openclaw-media-gen
Generate images & videos with AIsa. Gemini 3 Pro Image (image) + Qwen Wan 2.6 (video) via one API key.
Contract Review Assistant
Analyze business contracts for risks, unfavorable terms, and missing clauses. Get a plain-English summary of what you're signing.
AI Coding Toolkit — Master Every AI Coding Assistant
> The complete methodology for 10X productivity with AI-assisted development. Covers Cursor, Windsurf, Cline, Aider, Claude Code, GitHub Copilot, and more — tool-agnostic principles that work everywhere.
seo-assistant
A client-facing SEO assistant grounded in Google's official SEO Starter Guide. Use this skill whenever a user mentions SEO, search rankings, Google visibility, meta descriptions, title tags, page titles, alt text, sitemaps, duplicate content, URL structure, or asks how to improve their website's presence in search results. Also trigger when a user shares a URL or webpage content and wants feedback, or asks for help writing any web content that needs to perform well in search. This skill covers auditing, content writing, and answering SEO questions — use it proactively even if the user only hints at wanting more website traffic or better Google rankings.
media-compress
Compress and convert images and videos using ffmpeg. Use when the user wants to reduce file size, change format, resize, or optimize media files. Handles common formats like JPG, PNG, WebP, MP4, MOV, WebM. Triggers on phrases like "compress image", "compress video", "reduce file size", "convert to webp/mp4", "resize image", "make image smaller", "batch compress", "optimize media".
anime-assistant
二次元创作全能助手 - 专注于动漫、插画、角色设计、漫画创作、动画制作等二次元内容创作
Arena Social Skill
**Name:** arena-social
doppel-social-outreach
Promote Doppel world builds across social platforms. Use when the agent wants to share builds on Twitter/X, Farcaster, Telegram, or Moltbook to drive observers, grow reputation, and recruit collaborators.
accounting-assistant
Buchhaltungs-Automatisierung mit EÜR-Erstellung, DATEV-Export, PDF-Beleganalyse und Steuer-Vorbereitung. Ideal für Freelancer und KMU.
social-search
Find trending topics, create editorial-style social media graphics, and post to X/Twitter and Instagram. Includes image generation with photographic backgrounds, dark gradient overlays, and bold typography. No paid social APIs needed.
rag-knowledge-assistant
基于向量数据库的 RAG(检索增强生成) 知识库助手。支持语义检索、多格式文档 (PDF/Word/Excel/Markdown) 处理、智能问答。使用 Chroma 向量库 + BGE-M3 Embedding 模型。适用于从 knowledge 目录快速检索信息、回答基于文档的问题。触发词:"从知识库查"、"检索文档"、"RAG 查询"、"向量搜索"、"语义检索"等。
icd10-cpt-coding-assistant
Automatically recommend ICD-10 diagnosis codes and CPT procedure codes from clinical notes. Trigger when: user provides clinical notes, patient encounter summaries, discharge summaries, or asks for medical coding assistance. Use for healthcare providers, medical coders, and billing professionals who need accurate code recommendations.