🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

agent-Postmoore

by @rkotchamp

Autonomously post, schedule, upload media, save drafts, and manage content across Instagram, TikTok, YouTube Shorts, LinkedIn, Facebook, Threads, and Bluesky...

TERMINAL
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 request
  • platform β€” the platform name
  • displayName β€” the account display name
  • platformUsername β€” username on the platform
  • status β€” always active
  • Always fetch account IDs before posting β€” never guess them.

    2. Upload Media

    POST /media
    Content-Type: multipart/form-data

    file:

    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 publishing
  • Returns post object with:

  • id β€” post ID
  • status β€” pending Β· scheduled Β· published Β· failed Β· draft
  • accounts β€” array of { id, platform }
  • results β€” per-platform result with success, postId, url, error
  • 4. 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": "", "deleted": true } }.

    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

  • Post to multiple platforms in one request by including multiple account IDs
  • Use "type": "draft" when the user wants to review content before it goes live
  • Stagger scheduled posts throughout the day for better reach
  • Keep hashtags to 4–5 per post
  • Always confirm account IDs from GET /accounts before every session
  • Check the results array after posting for per-platform success or failure details
  • If a post fails on one platform but succeeds on others, the overall status will be failed β€” 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

  • Post to multiple platforms in one request by including multiple account IDs
  • Use "type": "draft" when the user wants to review content before it goes live
  • Stagger scheduled posts throughout the day for better reach
  • Keep hashtags to 4–5 per post
  • Always confirm account IDs from GET /accounts before every session
  • Check the results array after posting for per-platform success or failure details
  • If a post fails on one platform but succeeds on others, the overall status will be failed β€” check individual results