/postiz
Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack, Kick, Twitch, Mastodon, Bluesky, Lemmy, Farcaster, Telegram,
Claude Code
$ npx -y skills add gitroomhq/postiz-agent --skill postiz --agent claude-code
Codex
$ npx skills add gitroomhq/postiz-agent --skill postiz -a codex -y
Cursor
$ npx skills add gitroomhq/postiz-agent --skill postiz -a cursor -y
Gemini CLI
$ npx skills add gitroomhq/postiz-agent --skill postiz -a gemini-cli -y
GitHub Copilot
$ npx skills add gitroomhq/postiz-agent --skill postiz -a github-copilot -y
OpenCode
$ npx skills add gitroomhq/postiz-agent --skill postiz -a opencode -y
Windsurf
$ npx skills add gitroomhq/postiz-agent --skill postiz -a windsurf -y
SKILL.md
postiz.SKILL.mdname: postiz
description: Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack, Kick, Twitch, Mastodon, Bluesky, Lemmy, Farcaster, Telegram, Nostr, VK, Medium, Dev.to, Hashnode, WordPress, ListMonk
homepage: https://docs.postiz.com/public-api/introduction
metadata: {"openclaw":{"emoji":"🌎","requires":{"bins":[],"env":["POSTIZ_API_URL"]}}}Install Postiz if it doesn't exist
npm install -g postiz
# or
pnpm install -g postiz
npm release: https://www.npmjs.com/package/postiz postiz github: https://github.com/gitroomhq/postiz-app postiz cli github: https://github.com/gitroomhq/postiz-app official website: https://postiz.com ---
| Property | Value | |----------|-------| | **name** | postiz | | **description** | Social media automation CLI and MCP server for scheduling posts across 28+ platforms including X, LinkedIn, LinkedIn Pages, Instagram, Facebook, Threads, YouTube, TikTok, Reddit, Pinterest, Bluesky, Mastodon, Google My Business, Discord, Slack, Telegram, Twitch, Kick, Lemmy, Farcaster, Nostr, VK, MeWe, Tumblr, Skool, Whop, Moltbook, Dribbble, Medium, Dev.to, Hashnode, WordPress, and ListMonk | | **allowed-tools** | Bash(postiz:*) |
---
⚠️ Four Hard Rules (Read First)
**Rule 1 — Authenticate before anything.** All commands fail without valid credentials.
**Rule 2 — Every file passed to `-m` (or to `image`/media fields in JSON mode) MUST first go through `postiz upload`.** Raw filesystem paths (`image.jpg`, `video.mp4`) and external URLs (`https://example.com/...`) are **NOT** accepted by the publishing pipeline. TikTok, Instagram, YouTube, and most other providers reject anything that isn't a Postiz-verified URL. Always:
RESULT=$(postiz upload <file>)
URL=$(echo "$RESULT" | jq -r '.path')
postiz posts:create ... -m "$URL" ...
If you see `-m "something.jpg"` anywhere below, treat it as shorthand for "the `.path` you got back from `postiz upload something.jpg`" — never a raw local file.
A file that was already uploaded does not need uploading again: find it with `postiz media:list -s <name>` and reuse its `.path`.
**Rule 3 — When posting to TikTok, `content_posting_method` MUST be `"DIRECT_POST"`** unless the user has explicitly asked to finish the post inside the TikTok app. `"UPLOAD"` does not publish — it drops the media into the account's TikTok inbox to be completed manually within 24 hours, while the Postiz API still reports success. A user saying "upload this video to TikTok" means `"DIRECT_POST"`.
**Rule 4 — Fetch `postiz integrations:settings <id>` before scheduling and honor the returned `rules` and per-field `description`s.** They state which settings apply and when. A setting that doesn't apply (wrong posting method, wrong media type, etc.) is **silently discarded**, not rejected — the post still reports success, so this is your only chance to catch it.
---
⚠️ Authentication Required
**You MUST authenticate before running any Postiz CLI command.** All commands will fail without valid credentials.
Before doing anything else, check auth status:
postiz auth:status
If not authenticated, either: 1. **OAuth2:** `postiz auth:login` 2. **API Key:** `export POSTIZ_API_KEY=your_api_key`
**Do NOT proceed with any other commands until authentication is confirmed.**
---
Core Workflow
The fundamental pattern for using Postiz CLI:
1. **Authenticate** - Verify or set up authentication (see above) 2. **Discover** - List integrations and get their settings 3. **Fetch** - Use integration tools to retrieve dynamic data (flairs, playlists, companies) 4. **Prepare** - Upload media files if needed (or reuse an existing `.path` from `media:list`) 5. **Post** - Create posts with content, media, and platform-specific settings 6. **Analyze** - Track performance with platform and post-level analytics 7. **Resolve** - If analytics returns `{"missing": true}`, run `posts:missing` to list provider content, then `posts:connect` to link it
# 1. Authenticate
postiz auth:status
# If not authenticated: postiz auth:login --client-id <id> --client-secret <secret>
# 2. Discover
postiz integrations:list
postiz integrations:settings <integration-id>
# 3. Fetch (if needed)
postiz integrations:trigger <integration-id> <method> -d '{"key":"value"}'
# 4. Prepare
postiz upload image.jpg
postiz media:list -s image # or reuse an already-uploaded file
# 5. Post
postiz posts:create -c "Content" -m "image.jpg" -i "<integration-id>"
# 6. Analyze
postiz analytics:platform <integration-id> -d 30
postiz analytics:post <post-id> -d 7
# 7. Resolve (if analytics returns {"missing": true})
postiz posts:missing <post-id>
postiz posts:connect <post-id> --release-id "<content-id>"---
Essential Commands
Authentication
**Option 1: OAuth2 (Recommended)**
# Login via device flow (opens browser, no client ID/secret needed)
postiz auth:login
# Check auth status (verifies credentials are still valid)
postiz auth:status
# Logout (remove stored credentials)
postiz auth:logout
Credentials are stored in `~/.postiz/credentials.json`. OAuth2 credentials take priority over API key.
**Option 2: API Key**
export POSTIZ_API_KEY=your_api_key_here
**Optional custom API URL:**
export POSTIZ_API_URL=https://custom-api-url.com
Integration Discovery
# List all connected integrations
postiz integrations:list
# List integrations belonging to a specific group (customer)
postiz integrations:list --group <group-id>
# List all groups (customers) as {id, name}
postiz integrations:groups
# Get settings schema for specific integration
postiz integrations:settings <integration-id>
# Trigger integration tool to fetch dynamic data
postiz integrations:trigger <integration-id> <method-name>
postiz integrations:trigger <integration-id> <method-nRead more
name: postiz
description: Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack, Kick, Twitch, Mastodon, Bluesky, Lemmy, Farcaster, Telegram, Nostr, VK, Medium, Dev.to, Hashnode, WordPress, ListMonk
homepage: https://docs.postiz.com/public-api/introduction
metadata: {"openclaw":{"emoji":"🌎","requires":{"bins":[],"env":["POSTIZ_API_URL"]}}}Install Postiz if it doesn't exist
npm install -g postiz # or pnpm install -g postiz
npm release: https://www.npmjs.com/package/postiz postiz github: https://github.com/gitroomhq/postiz-app postiz cli github: https://github.com/gitroomhq/postiz-app official website: https://postiz.com ---
| Property | Value | |----------|-------| | **name** | postiz | | **description** | Social media automation CLI and MCP server for scheduling posts across 28+ platforms including X, LinkedIn, LinkedIn Pages, Instagram, Facebook, Threads, YouTube, TikTok, Reddit, Pinterest, Bluesky, Mastodon, Google My Business, Discord, Slack, Telegram, Twitch, Kick, Lemmy, Farcaster, Nostr, VK, MeWe, Tumblr, Skool, Whop, Moltbook, Dribbble, Medium, Dev.to, Hashnode, WordPress, and ListMonk | | **allowed-tools** | Bash(postiz:*) |
---
⚠️ Four Hard Rules (Read First)
**Rule 1 — Authenticate before anything.** All commands fail without valid credentials.
**Rule 2 — Every file passed to `-m` (or to `image`/media fields in JSON mode) MUST first go through `postiz upload`.** Raw filesystem paths (`image.jpg`, `video.mp4`) and external URLs (`https://example.com/...`) are **NOT** accepted by the publishing pipeline. TikTok, Instagram, YouTube, and most other providers reject anything that isn't a Postiz-verified URL. Always:
RESULT=$(postiz upload <file>) URL=$(echo "$RESULT" | jq -r '.path') postiz posts:create ... -m "$URL" ...
If you see `-m "something.jpg"` anywhere below, treat it as shorthand for "the `.path` you got back from `postiz upload something.jpg`" — never a raw local file.
A file that was already uploaded does not need uploading again: find it with `postiz media:list -s <name>` and reuse its `.path`.
**Rule 3 — When posting to TikTok, `content_posting_method` MUST be `"DIRECT_POST"`** unless the user has explicitly asked to finish the post inside the TikTok app. `"UPLOAD"` does not publish — it drops the media into the account's TikTok inbox to be completed manually within 24 hours, while the Postiz API still reports success. A user saying "upload this video to TikTok" means `"DIRECT_POST"`.
**Rule 4 — Fetch `postiz integrations:settings <id>` before scheduling and honor the returned `rules` and per-field `description`s.** They state which settings apply and when. A setting that doesn't apply (wrong posting method, wrong media type, etc.) is **silently discarded**, not rejected — the post still reports success, so this is your only chance to catch it.
---
⚠️ Authentication Required
**You MUST authenticate before running any Postiz CLI command.** All commands will fail without valid credentials.
Before doing anything else, check auth status:
postiz auth:status
If not authenticated, either: 1. **OAuth2:** `postiz auth:login` 2. **API Key:** `export POSTIZ_API_KEY=your_api_key`
**Do NOT proceed with any other commands until authentication is confirmed.**
---
Core Workflow
The fundamental pattern for using Postiz CLI:
1. **Authenticate** - Verify or set up authentication (see above) 2. **Discover** - List integrations and get their settings 3. **Fetch** - Use integration tools to retrieve dynamic data (flairs, playlists, companies) 4. **Prepare** - Upload media files if needed (or reuse an existing `.path` from `media:list`) 5. **Post** - Create posts with content, media, and platform-specific settings 6. **Analyze** - Track performance with platform and post-level analytics 7. **Resolve** - If analytics returns `{"missing": true}`, run `posts:missing` to list provider content, then `posts:connect` to link it
# 1. Authenticate
postiz auth:status
# If not authenticated: postiz auth:login --client-id <id> --client-secret <secret>
# 2. Discover
postiz integrations:list
postiz integrations:settings <integration-id>
# 3. Fetch (if needed)
postiz integrations:trigger <integration-id> <method> -d '{"key":"value"}'
# 4. Prepare
postiz upload image.jpg
postiz media:list -s image # or reuse an already-uploaded file
# 5. Post
postiz posts:create -c "Content" -m "image.jpg" -i "<integration-id>"
# 6. Analyze
postiz analytics:platform <integration-id> -d 30
postiz analytics:post <post-id> -d 7
# 7. Resolve (if analytics returns {"missing": true})
postiz posts:missing <post-id>
postiz posts:connect <post-id> --release-id "<content-id>"---
Essential Commands
Authentication
**Option 1: OAuth2 (Recommended)**
# Login via device flow (opens browser, no client ID/secret needed) postiz auth:login # Check auth status (verifies credentials are still valid) postiz auth:status # Logout (remove stored credentials) postiz auth:logout
Credentials are stored in `~/.postiz/credentials.json`. OAuth2 credentials take priority over API key.
**Option 2: API Key**
export POSTIZ_API_KEY=your_api_key_here
**Optional custom API URL:**
export POSTIZ_API_URL=https://custom-api-url.com
Integration Discovery
# List all connected integrations
postiz integrations:list
# List integrations belonging to a specific group (customer)
postiz integrations:list --group <group-id>
# List all groups (customers) as {id, name}
postiz integrations:groups
# Get settings schema for specific integration
postiz integrations:settings <integration-id>
# Trigger integration tool to fetch dynamic data
postiz integrations:trigger <integration-id> <method-name>
postiz integrations:trigger <integration-id> <method-nSocial media automation CLI for AI agents - Schedule posts across 28+ platforms programmatically.
More skills from other plugins.
browser-use
Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…
agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…
Questions about postiz.
- Which coding agents can use postiz?
- postiz installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

