gitroomhq/postiz-agent1 file

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, Nostr, VK, Medium, Dev.to, Hashnode, WordPress, ListMonk

Specification
Skill ID
gitroomhq/postiz-agent/postiz
Publisher
gitroomhq
Repository
postiz-agent
Installs
0
Files
1
Synced
Sep 23, 2026
How to use it

Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.

gitroomhq/postiz-agent/postizInstalls these files
  • SKILL.md

What this skill tells the agent

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 ---

PropertyValue
namepostiz
descriptionSocial 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-toolsBash(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.

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
  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

# 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-name> -d '{"param":"value"}'

Creating Posts

# Simple post (date is REQUIRED)
postiz posts:create -c "Content" -s "2024-12-31T12:00:00Z" -i "integration-id"

# Draft post
postiz posts:create -c "Content" -s "2024-12-31T12:00:00Z" -t draft -i "integration-id"

# Post with media (upload each file FIRST — see Rule 2)
IMG1=$(postiz upload img1.jpg | jq -r '.path')
IMG2=$(postiz upload img2.jpg | jq -r '.path')
postiz posts:create -c "Content" -m "$IMG1,$IMG2" -s "2024-12-31T12:00:00Z" -i "integration-id"

# Post with comments (each with own media — every file uploaded first)
MAIN=$(postiz upload main.jpg | jq -r '.path')
C1=$(postiz upload comment1.jpg | jq -r '.path')
C2A=$(postiz upload comment2.jpg | jq -r '.path')
C2B=$(postiz upload comment3.jpg | jq -r '.path')
postiz posts:create \
  -c "Main post" -m "$MAIN" \
  -c "First comment" -m "$C1" \
  -c "Second comment" -m "$C2A,$C2B" \
  -s "2024-12-31T12:00:00Z" \
  -i "integration-id"

# Multi-platform post
postiz posts:create -c "Content" -s "2024-12-31T12:00:00Z" -i "twitter-id,linkedin-id,facebook-id"

# Platform-specific settings
postiz posts:create \
  -c "Content" \
  -s "2024-12-31T12:00:00Z" \
  --settings '{"subreddit":[{"value":{"subreddit":"programming","title":"My Post","type":"text"}}]}' \
  -i "reddit-id"

# Complex post from JSON file
postiz posts:create --json post.json

Managing Posts

# List posts (defaults to last 30 days to next 30 days)
# Each returned post includes its current `settings` (as a JSON string — JSON.parse it).
# Workflow: run posts:list to read a post's current settings, then posts:settings to patch them.
postiz posts:list

# List posts in date range
postiz posts:list --startDate "2024-01-01T00:00:00Z" --endDate "2024-12-31T23:59:59Z"

# Delete post
postiz posts:delete <post-id>

# Change post status (draft ↔ schedule)
postiz posts:status <post-id> --status draft     # Move back to draft, terminates any running publish workflow
postiz posts:status <post-id> --status schedule  # Promote a draft into the publishing queue (uses the post's stored date)

# Update a post's provider-specific settings (merged — only the keys you pass change)
# Only DRAFT/QUEUE (unpublished) posts can be updated. Pass the MAIN post id, not a comment id.
# Do NOT include __type — the backend adds it automatically from the integration.
postiz posts:settings <post-id> --settings '{"content_posting_method":"DIRECT_POST"}'   # Switch a TikTok draft to direct publishing
postiz posts:settings <post-id> --settings '{"subreddit":[{"value":{"subreddit":"/r/selfhosted","title":"My title","type":"self","is_flair_required":true}}]}'  # Set a Reddit post's subreddit

Analytics

Use this skill in a project

Open any RiverX project, search the Skills panel for gitroomhq/postiz-agent/postiz, and install it in one click.

Use this skill