Get the FREE Ultimate OpenClaw Setup Guide →
l

Mixpost

@lao9s

npx machina-cli add skill @lao9s/mixpost --openclaw
Files (1)
SKILL.md
10.0 KB

Mixpost Skill

Mixpost is a self-hosted social media management software that helps you schedule and manage your social media content across multiple platforms including Facebook, Twitter/X, Instagram, LinkedIn, Pinterest, TikTok, YouTube, Mastodon, Google Business Profile, Threads, Bluesky, and more.

Setup

  1. Navigate to your Mixpost dashboard
  2. Click on Access Tokens from the user menu
  3. Click Create to generate a new token
  4. Get your workspace UUID: Go to Social Accounts page, click the 3 dots menu on any account, and copy the workspace UUID
  5. Set environment variables:
    export MIXPOST_URL="https://your-mixpost-instance.com/mixpost"
    export MIXPOST_ACCESS_TOKEN="your-access-token"
    export MIXPOST_WORKSPACE_UUID="your-workspace-uuid"
    

Test Connection

curl -X GET "$MIXPOST_URL/api/ping" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Accounts

Get all accounts

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/accounts" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Get a specific account

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/accounts/:accountUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Media

Get all media

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/media?limit=50" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Get a specific media file

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/media/:mediaUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Upload media (form-data)

curl -X POST "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/media" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json" \
  -F "file=@/path/to/your/file.png"

Update media

curl -X PUT "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/media/:mediaUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "alt_text": "Alternative text for accessibility"
  }'

Delete media

curl -X DELETE "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/media" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "items": ["media-id-1", "media-id-2"]
  }'

Tags

Get all tags

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/tags" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Get a specific tag

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/tags/:tagUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Create a tag

curl -X POST "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/tags" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Marketing",
    "hex_color": "#FF5733"
  }'

Update a tag

curl -X PUT "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/tags/:tagUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Updated Tag Name",
    "hex_color": "#00FF00"
  }'

Delete a tag

curl -X DELETE "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/tags/:tagUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Posts

Get all posts

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts?limit=50&status=scheduled&page=1" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Query Parameters:

  • limit (number, default: 50): Results per page
  • status: draft, scheduled, published, failed, needs_approval, trash
  • keyword (string): Search posts by content
  • accounts (array): Filter by account IDs
  • tags (array): Filter by tag names
  • page (number): Page number for pagination

Get a specific post

curl -X GET "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts/:postUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Create a post

curl -X POST "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "schedule": true,
    "date": "2024-12-25",
    "time": "10:00",
    "timezone": "America/New_York",
    "accounts": [1, 2],
    "tags": [1],
    "versions": [
      {
        "account_id": 0,
        "is_original": true,
        "content": [
          {
            "body": "Hello from Mixpost API!",
            "media": [1, 2],
            "url": "https://example.com"
          }
        ],
        "options": {}
      }
    ]
  }'

Post Options:

  • schedule: Set to true to schedule for specific date/time
  • schedule_now: Set to true to publish immediately
  • queue: Set to true to add to publishing queue
  • If none are set, post is saved as draft

Platform-specific options:

{
  "options": {
    "facebook_page": {
      "type": "post" // post, reel, story
    },
    "instagram": {
      "type": "post" // post, reel, story
    },
    "linkedin": {
      "visibility": "PUBLIC" // PUBLIC, CONNECTIONS
    },
    "mastodon": {
      "sensitive": false // boolean
    },
    "pinterest": {
      "link": null, // null | string
      "title": "", // string
      "boards": {
        "account-1": "971672010430333260" // The key `account-*` is the ID of your Pinterest account
      }
    },
    "youtube": {
      "title": null, // null | string
      "status": "public" // public, private, unlisted
    },
    "gbp": { // Google Business Profile
      "type": "post", // post, offer, event
      "button": "NONE", // NONE, BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, CALL
      "button_link": "", // Leave empty if button is NONE or CALL
      "offer_has_details": false, // Only applies if type is offer
      "coupon_code": "", // Only applies if type is offer and offer_has_details is true
      "offer_link": "", // Only applies if type is offer and offer_has_details is true
      "terms": "", // Only applies if type is offer and offer_has_details is true
      "event_title": "", // Only applies if type is event or offer
      "start_date": null, // null | string - Only applies if type is event or offer
      "end_date": null, // null | string - Only applies if type is event or offer
      "event_has_time": false, // Only applies if type is event
      "start_time": "09:00", // Only applies if type is event and event_has_time is true
      "end_time": "17:00" // Only applies if type is event and event_has_time is true
    },
    "tiktok": {
      "privacy_level": {
        "account-2": "PUBLIC_TO_EVERYONE" // PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, SELF_ONLY - The key `account-*` is the ID of your TikTok account
      },
      "allow_comments": {
        "account-2": true // boolean
      },
      "allow_duet": {
        "account-2": false // boolean
      },
      "allow_stitch": {
        "account-2": false // boolean
      },
      "content_disclosure": {
        "account-2": false // boolean
      },
      "brand_organic_toggle": {
        "account-2": false // boolean
      },
      "brand_content_toggle": {
        "account-2": false // boolean
      }
    }
  }
}

Update a post

curl -X PUT "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts/:postUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "content": "Updated post content",
    "schedule_at": "2024-12-25T10:00:00Z",
    "media": ["url1", "url2"],
    "tags": ["tag1", "tag2"],
    "account_ids": ["id1", "id2"]
  }'

Delete a post

curl -X DELETE "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts/:postUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "trash": false,
    "delete_mode": "app_only"
  }'

Delete modes:

  • app_only: Delete only from the app (default)
  • app_and_social: Delete from both app and social media
  • social_only: Delete only from social media platforms

Delete multiple posts

curl -X DELETE "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "posts": ["post-uuid-1", "post-uuid-2"],
    "trash": false,
    "delete_mode": "app_only"
  }'

Schedule a post

curl -X POST "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts/schedule/:postUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "postNow": false
  }'

Add post to queue

curl -X POST "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts/add-to-queue/:postUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Approve a post

curl -X POST "$MIXPOST_URL/api/$MIXPOST_WORKSPACE_UUID/posts/approve/:postUuid" \
  -H "Authorization: Bearer $MIXPOST_ACCESS_TOKEN" \
  -H "Accept: application/json"

Source

git clone https://clawhub.ai/lao9s/mixpostView on GitHub

Overview

Mixpost is a self-hosted tool to schedule and manage social content across many platforms (Facebook, X, Instagram, LinkedIn, Pinterest, TikTok, YouTube, Mastodon, Google Business Profile, Threads, Bluesky, and more). Hosting it yourself gives you control over data and workflows while enabling centralized publishing across networks.

How This Skill Works

Mixpost runs on your infrastructure and uses a Bearer token for authentication. You configure a Mixpost URL, an access token, and a workspace UUID to scope actions; the API provides endpoints to fetch accounts, media, and tags, as well as to upload media, update metadata, and manage tags. Typical interactions include pinging the service to verify connectivity and using endpoints like /api/{workspaceUuid}/accounts, /api/{workspaceUuid}/media, and /api/{workspaceUuid}/tags to perform operations.

When to Use It

  • You need to publish and manage content across multiple platforms from a single, self-hosted instance.
  • Data privacy or regulatory requirements make a self-hosted solution preferable to cloud-only tools.
  • You want programmatic control over accounts, media, and tags via REST APIs.
  • You need to upload or update media assets and adjust metadata such as alt_text.
  • You want a quick connectivity test and stable endpoint access before building automation.

Quick Start

  1. Step 1: Set up your Mixpost environment by defining MIXPOST_URL, MIXPOST_ACCESS_TOKEN, and MIXPOST_WORKSPACE_UUID.
  2. Step 2: Test connectivity to the Mixpost API ping endpoint to confirm the instance is reachable and the token is valid.
  3. Step 3: Start interacting with core endpoints (accounts, media, tags) to manage your content and assets.

Best Practices

  • Store and rotate MIXPOST_ACCESS_TOKEN securely; limit token scope to the needed workspace.
  • Always configure MIXPOST_URL, MIXPOST_ACCESS_TOKEN, and MIXPOST_WORKSPACE_UUID from trusted sources.
  • When listing media, use pagination and limit parameters to manage large libraries efficiently.
  • Validate API responses and handle common errors (e.g., 401/403) to maintain robust automation.
  • Use precise payloads for tags (name and hex_color) and media updates (e.g., alt_text) to ensure accessibility and consistency.

Example Use Cases

  • Publish a batch of posts to Facebook, X, Instagram, and LinkedIn from a single scheduler.
  • Retrieve all accounts in a workspace to audit connected profiles.
  • Upload a new image to Mixpost media and reference it in a future post.
  • Update a media item's alt_text to improve accessibility.
  • Create a marketing tag with a specific hex color for campaign organization.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers