| Tool | Type | What it does |
|---|---|---|
list-workspaces | Read | List accessible workspaces — call this first |
get-workspace | Read | Details and counts for one workspace |
list-accounts | Read | List connected social accounts |
get-account | Read | Full details for one account |
list-posts | Read | List and filter posts |
get-post | Read | Full details for one post |
create-post | Write | Create, and optionally schedule or publish, a post |
update-post | Write | Change a post's content, accounts or tags |
update-post-version | Write | Update a single content version of a post |
attach-tags-to-post | Write | Add tags, keeping existing ones |
detach-tags-from-post | Write | Remove tags from a post |
duplicate-post | Write | Copy a post as a new draft |
schedule-post | Write | Schedule for a time, or publish now |
add-post-to-queue | Write | Queue at the next available slot |
delete-post | Destructive | Trash or permanently delete a post |
restore-post | Write | Restore a post from the trash |
list-tags | Read | List workspace tags |
get-tag | Read | Details for one tag |
create-tag | Write | Create a tag |
update-tag | Write | Update a tag's name or colour |
list-media | Read | List media library files |
get-media | Read | Full metadata for one file |
upload-media-by-url | Write | Add a file to the library from a URL |
get-media-upload-status | Read | Check a background upload's progress |
| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | UUID of the workspace to operate on. Obtain it from list-workspaces. Required by every tool except list-workspaces. |
timezone | string | optional | IANA timezone (e.g. America/New_York) used to interpret input dates and format dates in the response. Defaults to your account timezone, then to UTC. |
list-workspacesuuid.workspaces array of { uuid, name, role }.get-workspace| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
timezone | string | optional | Timezone for returned datetimes. |
{ uuid, name, created_at, role, can_approve, accounts_count, posts_count, users_count }.list-accountsid (used with create-post), name, username, provider and authorization status.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
provider | string | optional | Filter by provider identifier, e.g. twitter, facebook_page, linkedin. |
authorized_only | boolean | optional | When true, return only accounts whose authorization is still valid. |
accounts array of { id, name, username, provider, authorized }.get-accountid, including profile image, external profile URL and provider-specific data (e.g. follower metrics).| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
account_id | integer | required | Numeric id of the account. Obtain it from list-accounts. |
timezone | string | optional | Timezone for returned datetimes. |
{ id, uuid, name, suffix, username, provider, provider_name, authorized, image, external_url, data, created_at }.list-postsuuid, status, schedule/publish/created times, accounts, tags, plain-text content and media count.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
status | string | optional | One of draft, scheduled, published, failed, needs_approval, trash. |
account_ids | array<integer> | optional | Only posts assigned to any of these account ids. |
tag_ids | array<integer> | optional | Only posts tagged with any of these tag ids. |
keyword | string | optional | Only posts whose content contains this text. |
scheduled_from | string | optional | Only posts scheduled at or after this UTC date/time. Format Y-m-d or Y-m-d H:i. |
scheduled_to | string | optional | Only posts scheduled at or before this UTC date/time. A date-only value includes the whole day. |
created_from | string | optional | Only posts created at or after this UTC date/time. |
created_to | string | optional | Only posts created at or before this UTC date/time. |
limit | integer | optional | Maximum number of posts to return (1–100). Defaults to 25. |
timezone | string | optional | Timezone for returned datetimes. |
posts array of post summaries (see Post summary shape).get-postuuid: status, schedule/publish times, author, tags, the accounts it targets (with live post URLs and any publish errors) and every content version with media.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
timezone | string | optional | Timezone for returned datetimes. |
external_url, errors) and the full versions array.create-postcontent for a single-version post, or versions for per-account content.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
account_ids | array<integer> | required | Numeric IDs of the connected accounts to post to (at least one). Obtain them from list-accounts. |
content | string | optional | The text body, used as the default for every account. Required unless versions is given. |
schedule | string | optional | draft (default), now (publish immediately), scheduled (publish at scheduled_at), or queue (next slot). |
scheduled_at | string | optional | When to publish, format Y-m-d H:i (e.g. 2026-05-22 14:30). Required when schedule is scheduled. |
tags | array<integer> | optional | Numeric tag IDs to attach. Obtain them from list-tags. |
versions | array | optional | Per-account content versions (see Versions). |
timezone | string | optional | Timezone for scheduled_at and returned datetimes. |
update-postcontent or versions), target accounts and/or tags. Only the fields you provide change, and the schedule is left untouched — use schedule-post for timing. The post must not already be published, failed or publishing.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
content | string | optional | New text body. Replaces the body of the post's original content. |
account_ids | array<integer> | optional | Replace the targeted accounts with these account ids (at least one). |
tags | array<integer> | optional | Replace the post's tags. Pass an empty array to remove all tags. |
versions | array | optional | Per-account content versions (see Versions). |
timezone | string | optional | Timezone for returned datetimes. |
update-post-versionaccount_id 0, or an account id to update (or create) that account's version. To replace every version at once, use update-post.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
account_id | integer | required | 0 for the original/default version, or a connected account id for that account's version. |
content | array | required | Ordered content items for this version (at least one); more than one publishes a thread. |
options | object | optional | Per-provider post options, keyed by provider identifier (e.g. { "mastodon": { … } }). |
timezone | string | optional | Timezone for returned datetimes. |
content has body (string), media (array of media ids) and url (string), all optional.attach-tags-to-postupdate-post.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
tag_ids | array<integer> | required | Tag ids to attach (at least one), kept in addition to existing tags. |
timezone | string | optional | Timezone for returned datetimes. |
detach-tags-from-post| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
tag_ids | array<integer> | required | Tag ids to remove (at least one). |
timezone | string | optional | Timezone for returned datetimes. |
duplicate-post| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post to duplicate. |
timezone | string | optional | Timezone for returned datetimes. |
schedule-postpost_now. The post must have at least one account, a future scheduled time, and must not already be published, failed or publishing.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
scheduled_at | string | optional | When to publish, format Y-m-d H:i. Required unless post_now is true or the post already has a scheduled time. |
post_now | boolean | optional | When true, publish immediately instead of scheduling. |
timezone | string | optional | Timezone for scheduled_at and returned datetimes. |
needs_approval; otherwise it is queued for publishing.add-post-to-queue| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
timezone | string | optional | Timezone for returned datetimes. |
delete-postpermanent to true to delete it irreversibly. Use delete_mode to also remove the published post from the connected social platforms.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the post. Obtain it from list-posts. |
delete_mode | string | optional | app_only (default), social_only, or app_and_social. |
permanent | boolean | optional | When true, permanently delete instead of moving to trash. Only applies when removing from Mixpost. Defaults to false. |
uuid.restore-postlist-posts using status: "trash".| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the trashed post. |
timezone | string | optional | Timezone for returned datetimes. |
list-tags| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
tags array of { id, name, hex_color }.get-tag| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
tag_id | integer | required | Numeric id of the tag. From list-tags. |
{ id, name, hex_color }.create-tag| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
name | string | required | The tag name (max 255 characters). |
hex_color | string | required | The tag colour as a hex code, e.g. #1d9bf0. |
update-tag| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
tag_id | integer | required | Numeric id of the tag. From list-tags. |
name | string | optional | New tag name (max 255 characters). |
hex_color | string | optional | New tag colour as a hex code, e.g. #1d9bf0. |
list-mediaid (which can be attached to a post version), name, type and URL.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
type | string | optional | Filter by image, gif, or video. |
limit | integer | optional | Maximum number of files to return (1–100). Defaults to 50. |
timezone | string | optional | Timezone for returned datetimes. |
media array of summaries — { id, uuid, name, type, mime_type, url, alt_text, created_at }.get-mediauuid.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
uuid | string | required | UUID of the media file. From list-media. |
timezone | string | optional | Timezone for returned datetimes. |
{ id, uuid, name, type, mime_type, url, thumb_url, alt_text, source, … }.upload-media-by-urllist-media once complete.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
url | string | required | Publicly accessible URL of the media file to download. |
alt_text | string | optional | Alternative text describing the media (max 255 characters). |
timezone | string | optional | Timezone for returned datetimes. |
status: "pending" and a download_id — poll it with get-media-upload-status.get-media-upload-statusupload-media-by-url.| Key | Format | Required | Description |
|---|---|---|---|
workspace | string | required | Workspace UUID. |
download_id | string | required | The download_id returned by upload-media-by-url for a large file. |
timezone | string | optional | Timezone for returned datetimes. |
status (pending, downloading, processing) and a progress percentage; on completion, status: "completed" and the uploaded media; on failure, an error message.provider value on an account — and the provider filter on list-accounts — uses these identifiers:| Identifier | Platform |
|---|---|
twitter | X (Twitter) |
facebook_page | Facebook Page |
instagram | Instagram (via a Facebook Page) |
instagram_standalone | Instagram (standalone) |
threads | Threads |
linkedin | LinkedIn (profile) |
linkedin_page | LinkedIn Page |
tiktok | TikTok |
pinterest | |
youtube | YouTube |
gbp | Google Business Profile |
mastodon | Mastodon |
bluesky | Bluesky |
pixelfed | Pixelfed |
create-post, update-post and update-post-version tools support per-account content versions, so a single post can have different text or media for each network. The structure mirrors the REST API's post versions:{
"versions": [
{
"account_id": 0,
"content": [
{
"body": "This is the default content used for every account.",
"media": [1],
"url": null
}
],
"options": {
"mastodon": { "sensitive": false }
}
},
{
"account_id": 12,
"content": [
{ "body": "A custom version just for this account." }
]
}
]
}| Key | Format | Required | Description |
|---|---|---|---|
versions.*.account_id | integer | required | The account this version targets. Use 0 for the original/default version. Exactly one version must use 0. |
versions.*.content | array | required | Ordered content items. Provide more than one to publish a thread. |
versions.*.content.*.body | string | optional | The text body of this content item. |
versions.*.content.*.media | array<integer> | optional | Media IDs to attach. Obtain them from list-media or upload-media-by-url. |
versions.*.content.*.url | string | optional | A URL associated with the content (supported by Facebook and LinkedIn). |
versions.*.options | object | optional | Provider-specific post options (see below). |
{
"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": {
"type": "post", // post, offer, event
"button": "NONE", // NONE, BOOK, ORDER, SHOP, LEARN_MORE, SIGN_UP, CALL
"button_link": "", // string | Leave empty if button is `NONE` or `CALL`
"offer_has_details": false, // boolean | Only applies if type is `offer`
"coupon_code": "", // string | Only applies if type is `offer` and `offer_has_details` is true
"offer_link": "", // string | Only applies if type is `offer` and `offer_has_details` is true
"terms": "", // string | Only applies if type is `offer` and `offer_has_details` is true
"event_title": "", // string | 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, // boolean | Only applies if type is `event`
"start_time": "09:00", // string | Only applies if type is `event` and `event_has_time` is true
"end_time": "17:00" // string | 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
}
}
}{
"uuid": "6059e1b3-e102-4be5-951b-82698abd9ee3",
"status": "scheduled",
"scheduled_at": "2026-07-01 09:00:00",
"published_at": null,
"created_at": "2026-06-25 14:12:03",
"accounts": [
{ "id": 12, "name": "Acme", "username": "acme", "provider": "x", "authorized": true }
],
"tags": [
{ "id": 3, "name": "Launch" }
],
"content": "We just shipped a big update 🚀",
"media_count": 1
}status is one of draft, scheduled, published, failed, needs_approval, publishing or trash. content is the plain text of the post's original version, with multiple content items joined by blank lines.