Mixpost
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, Inst…
lao9s
@lao9s
What This Skill Does
Self-hosted social media management tool that schedules and publishes content across Facebook, Twitter/X, Instagram, LinkedIn, Pinterest, TikTok, YouTube, Mastodon, Google Business Profile, Threads, Bluesky, and more via a REST API.
Replaces juggling multiple native social media platforms or relying on third-party SaaS schedulers by providing a single, self-hosted API to manage posts, media, and accounts.
When to Use It
- Schedule a batch of social media posts across multiple platforms for the upcoming week
- Upload and attach media files to scheduled posts from a content library
- Retrieve all connected social accounts and their status for audit or reporting
- Create and assign tags to posts for organizing campaigns by topic or region
- Publish a post immediately to a specific account without using the Mixpost web UI
Install
$ openclaw skills install @lao9s/mixpostMixpost 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
- Navigate to your Mixpost dashboard
- Click on Access Tokens from the user menu
- Click Create to generate a new token
- Get your workspace UUID: Go to Social Accounts page, click the 3 dots menu on any account, and copy the workspace UUID
- 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 pagestatus:draft,scheduled,published,failed,needs_approval,trashkeyword(string): Search posts by contentaccounts(array): Filter by account IDstags(array): Filter by tag namespage(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 totrueto schedule for specific date/timeschedule_now: Set totrueto publish immediatelyqueue: Set totrueto 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 mediasocial_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"
Top skills in this category
YouTube
@byungkyuYouTube Data API integration with managed OAuth. Search videos, manage playlists, access channel data, and interact with comments. Use this skill when users want to interact with YouTube. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Calls run through the `maton` CLI with OAuth login, or over raw HTTP with a Maton API key where the CLI cannot be installed. Every call is authenticated as the user's connection and reaches only what that connection's authorization allows, which the provider enforces on every request; the endpoints documented here are the ones this skill uses, and any other endpoint of this app needs the user to ask for it by name. Default to read and list calls, and confirm every write or new connection with the user. This file also documents the three constructs that turn a YouTube connection into automation, in the order they are used: the connection (the first step), a hosted function that runs a YouTube action through the Maton SDK, and a trigger that calls that function on a schedule or on an event. Those sections are the platform's own reference text, shared with the api-gateway skill, with YouTube examples; they add no YouTube capability - YouTube is not an event source, a trigger cannot read YouTube data, and the files under `references/<source>/triggers.md` are the platform's event catalogues for the sources Maton offers (time, Calendly, GitHub, Gmail, HubSpot, Linear, Notion, Slack, Stripe).
Edge TTS
@i3130002Text-to-speech conversion using node-edge-tts npm package for generating audio from text. Supports multiple voices, languages, speed adjustment, pitch control, and subtitle generation. Use when: (1) User requests audio/voice output with the "tts" trigger or keyword. (2) Content needs to be spoken rather than read (multitasking, accessibility, driving, cooking). (3) User wants a specific voice, speed, pitch, or format for TTS output.
Antigravity Image Generator
@ipedraxGenerate images using the internal Google Antigravity API (Gemini 3 Pro Image). High quality, native generation without browser automation.
Social Media Scheduler
@1kalinPlan, draft, and organize social media content across platforms. Create content calendars, write platform-optimized posts, and maintain consistent posting schedules.
elevenlabs-voices
@robbyczgw-claHigh-quality voice synthesis with 18 personas, 32 languages, sound effects, batch processing, and voice design using ElevenLabs API.