agent-Postmoore
by @rkotchamp
Autonomously post, schedule, upload media, save drafts, and manage content across Instagram, TikTok, YouTube Shorts, LinkedIn, Facebook, Threads, and Bluesky...
clawhub install agent-postmooreπ About This Skill
name: postmoore description: Post to Instagram, TikTok, YouTube Shorts, LinkedIn, Facebook, Threads, and Bluesky via the Postmoore API. Schedule posts, upload media, save drafts, and manage content autonomously. version: 1.1.0 emoji: π homepage: https://postmoo.re metadata: {"openclaw": {"requires": {"env": ["POSTMOORE_API_KEY"]}, "primaryEnv": "POSTMOORE_API_KEY", "requires": {"bins": ["ffmpeg"], "env": ["POSTMOORE_API_KEY"]}}}
Postmoore β Social Media Assistant
Autonomously manage social media posting via the Postmoore API.
Setup
1. Create a Postmoore account at postmoo.re
2. Connect your social accounts (Instagram, TikTok, YouTube Shorts, LinkedIn, Facebook, Threads, Bluesky)
3. Go to Profile β API Keys and generate an API key (Creator or Premium plan required)
4. Store your key in your workspace .env:
POSTMOORE_API_KEY=pm_live_xxxxx
Auth
All requests use a Bearer token:
Authorization: Bearer
Base URL: https://postmoo.re/api/v1
Core Workflow
1. Get Social Accounts
GET /accounts
Optional filter by platform:
GET /accounts?platform=tiktok
Supported platform values: instagram Β· tiktok Β· ytshorts Β· linkedin Β· facebook Β· threads Β· bluesky
Returns an array of connected accounts. Each account has:
id β use this in every post requestplatform β the platform namedisplayName β the account display nameplatformUsername β username on the platformstatus β always activeAlways fetch account IDs before posting β never guess them.
2. Upload Media
POST /media
Content-Type: multipart/form-datafile:
Supported formats: image/jpeg Β· image/png Β· image/gif Β· image/webp Β· video/mp4 Β· video/quicktime Β· video/webm
Max file size: 100 MB. Storage quota: 5 GB (Creator plan) Β· 20 GB (Premium plan).
Returns:
{
"data": {
"id": "uploads/user123/filename.mp4",
"type": "video",
"url": "https://storage.postmoo.re/...",
"mimeType": "video/mp4",
"size": 10485760,
"filename": "video.mp4"
}
}
Save both id and url β you need both when creating a media post.
3. Create a Post
POST /posts
Content-Type: application/json
Text post (post now):
{
"contentType": "text",
"text": "Your caption here #hashtags",
"accounts": ["", ""],
"schedule": { "type": "now" }
}
Text post (scheduled):
{
"contentType": "text",
"text": "Scheduled caption #hashtags",
"accounts": [""],
"schedule": { "type": "scheduled", "at": "2026-06-01T14:00:00Z" }
}
Media post (image or video):
{
"contentType": "media",
"text": "Caption for the post #hashtags",
"media": [{ "id": "", "url": "" }],
"accounts": ["", ""],
"schedule": { "type": "now" }
}
Draft (save without publishing):
{
"contentType": "text",
"text": "Draft caption to review",
"accounts": [""],
"schedule": { "type": "draft" }
}
schedule options:
{ "type": "now" } β publish immediately{ "type": "scheduled", "at": "" } β schedule for future{ "type": "draft" } β save as draft, no publishingReturns post object with:
id β post IDstatus β pending Β· scheduled Β· published Β· failed Β· draftaccounts β array of { id, platform }results β per-platform result with success, postId, url, error4. List Posts
GET /posts
GET /posts?status=scheduled
GET /posts?status=draft&page=1&limit=20
Status filters: pending Β· scheduled Β· published Β· failed Β· draft
Pagination params: page (default 1) Β· limit (default 20, max 100)
Returns paginated array with data and pagination object containing page, limit, total, totalPages, hasMore.
5. Get a Single Post
GET /posts/
Returns full post object including per-platform results.
6. Delete a Post
DELETE /posts/
Only works on posts with status pending or draft. Scheduled and published posts cannot be deleted.
Returns { "data": { "id": ".
Recommended Workflow for Video Content
1. Ask the user for the video file path 2. Extract a frame to understand the content:
ffmpeg -i video.mp4 -ss 00:00:03 -frames:v 1 frame.jpg -y
3. Read the frame and write a caption with 4β5 relevant hashtags
4. Upload the video: POST /media
5. Get account IDs: GET /accounts
6. Create the post with the media id and url from the upload
7. Confirm status: GET /posts/Tips
"type": "draft" when the user wants to review content before it goes liveGET /accounts before every sessionresults array after posting for per-platform success or failure detailsfailed β check individual resultsβοΈ Configuration
1. Create a Postmoore account at postmoo.re
2. Connect your social accounts (Instagram, TikTok, YouTube Shorts, LinkedIn, Facebook, Threads, Bluesky)
3. Go to Profile β API Keys and generate an API key (Creator or Premium plan required)
4. Store your key in your workspace .env:
POSTMOORE_API_KEY=pm_live_xxxxx
π Tips & Best Practices
"type": "draft" when the user wants to review content before it goes liveGET /accounts before every sessionresults array after posting for per-platform success or failure detailsfailed β check individual results