Package Exports
- postiz
- postiz/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (postiz) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Postiz CLI
Social media automation CLI for AI agents - Schedule posts across 28+ platforms programmatically.
The Postiz CLI provides a command-line interface to the Postiz API, enabling developers and AI agents to automate social media posting, manage content, and handle media uploads across platforms like Twitter/X, LinkedIn, Reddit, YouTube, TikTok, Instagram, Facebook, and more.
Installation
From npm (Recommended)
npm install -g postiz
# or
pnpm install -g postizFrom Source
git clone https://github.com/gitroomhq/postiz-app.git
cd postiz-app/apps/cli
pnpm install
pnpm run build
pnpm link --globalFor Development
cd apps/cli
pnpm install
pnpm run build
pnpm link --global
# Or run directly without linking
pnpm run start -- posts:listSetup
Required: Set your Postiz API key
export POSTIZ_API_KEY=your_api_key_hereOptional: Custom API endpoint
export POSTIZ_API_URL=https://your-custom-api.comCommands
Discovery & Settings
List all connected integrations
postiz integrations:listReturns integration IDs, provider names, and metadata.
Get integration settings schema
postiz integrations:settings <integration-id>Returns character limits, required settings, and available tools for fetching dynamic data.
Trigger integration tools
postiz integrations:trigger <integration-id> <method-name>
postiz integrations:trigger <integration-id> <method-name> -d '{"key":"value"}'Fetch dynamic data like Reddit flairs, YouTube playlists, LinkedIn companies, etc.
Examples:
# Get Reddit flairs
postiz integrations:trigger reddit-123 getFlairs -d '{"subreddit":"programming"}'
# Get YouTube playlists
postiz integrations:trigger youtube-456 getPlaylists
# Get LinkedIn companies
postiz integrations:trigger linkedin-789 getCompaniesCreating Posts
Simple scheduled post
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
postiz posts:create -c "Content" -m "img1.jpg,img2.jpg" -s "2024-12-31T12:00:00Z" -i "integration-id"Post with comments (each comment can have its own media)
postiz posts:create \
-c "Main post" -m "main.jpg" \
-c "First comment" -m "comment1.jpg" \
-c "Second comment" -m "comment2.jpg,comment3.jpg" \
-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":"Post Title","type":"text"}}]}' \
-i "reddit-id"Complex post from JSON file
postiz posts:create --json post.jsonOptions:
-c, --content- Post/comment content (use multiple times for posts with comments)-s, --date- Schedule date in ISO 8601 format (REQUIRED)-t, --type- Post type: "schedule" or "draft" (default: "schedule")-m, --media- Comma-separated media URLs for corresponding-c-i, --integrations- Comma-separated integration IDs (required)-d, --delay- Delay between comments in milliseconds (default: 5000)--settings- Platform-specific settings as JSON string-j, --json- Path to JSON file with full post structure--shortLink- Use short links (default: true)
Managing Posts
List posts
postiz posts:list
postiz posts:list --startDate "2024-01-01T00:00:00Z" --endDate "2024-12-31T23:59:59Z"
postiz posts:list --customer "customer-id"Defaults to last 30 days to next 30 days if dates not specified.
Delete post
postiz posts:delete <post-id>Media Upload
Upload file and get URL
postiz upload <file-path>Supported formats:
- Images: PNG, JPG, JPEG, GIF, WEBP, SVG, BMP, ICO
- Videos: MP4, MOV, AVI, MKV, WEBM, FLV, WMV, M4V, MPEG, MPG, 3GP
- Audio: MP3, WAV, OGG, AAC, FLAC, M4A
- Documents: PDF, DOC, DOCX
Example:
RESULT=$(postiz upload video.mp4)
PATH=$(echo "$RESULT" | jq -r '.path')
postiz posts:create -c "Check out my video!" -m "$PATH" -i "tiktok-id"Platform-Specific Features
# Get available flairs
postiz integrations:trigger reddit-id getFlairs -d '{"subreddit":"programming"}'
# Post with subreddit and flair
postiz posts:create \
-c "Content" \
-s "2024-12-31T12:00:00Z" \
--settings '{"subreddit":[{"value":{"subreddit":"programming","title":"My Post","type":"text","is_flair_required":true,"flair":{"id":"flair-123","name":"Discussion"}}}]}' \
-i "reddit-id"YouTube
# Get playlists
postiz integrations:trigger youtube-id getPlaylists
# Upload video with metadata
postiz posts:create \
-c "Video description" \
-s "2024-12-31T12:00:00Z" \
--settings '{"title":"Video Title","type":"public","tags":[{"value":"tech","label":"Tech"}],"playlistId":"playlist-id"}' \
-m "video.mp4" \
-i "youtube-id"TikTok
postiz posts:create \
-c "Video caption #fyp" \
-s "2024-12-31T12:00:00Z" \
--settings '{"privacy":"PUBLIC_TO_EVERYONE","duet":true,"stitch":true}' \
-m "video.mp4" \
-i "tiktok-id"# Get companies you can post to
postiz integrations:trigger linkedin-id getCompanies
# Post as company
postiz posts:create \
-c "Company announcement" \
-s "2024-12-31T12:00:00Z" \
--settings '{"companyId":"company-123"}' \
-i "linkedin-id"X (Twitter)
# Create thread
postiz posts:create \
-c "Thread 1/3 ๐งต" \
-c "Thread 2/3" \
-c "Thread 3/3" \
-s "2024-12-31T12:00:00Z" \
-d 2000 \
-i "twitter-id"
# With reply settings
postiz posts:create \
-c "Tweet content" \
-s "2024-12-31T12:00:00Z" \
--settings '{"who_can_reply_post":"everyone"}' \
-i "twitter-id"# Regular post
postiz posts:create \
-c "Caption #hashtag" \
-s "2024-12-31T12:00:00Z" \
--settings '{"post_type":"post"}' \
-m "image.jpg" \
-i "instagram-id"
# Story
postiz posts:create \
-c "" \
-s "2024-12-31T12:00:00Z" \
--settings '{"post_type":"story"}' \
-m "story.jpg" \
-i "instagram-id"See PROVIDER_SETTINGS.md for all 28+ platforms.
Features for AI Agents
Discovery Workflow
The CLI enables dynamic discovery of integration capabilities:
- List integrations - Get available social media accounts
- Get settings - Retrieve character limits, required fields, and available tools
- Trigger tools - Fetch dynamic data (flairs, playlists, boards, etc.)
- Create posts - Use discovered data in posts
This allows AI agents to adapt to different platforms without hardcoded knowledge.
JSON Mode
For complex posts with multiple platforms and settings:
postiz posts:create --json complex-post.jsonJSON structure:
{
"integrations": ["twitter-123", "linkedin-456"],
"posts": [
{
"provider": "twitter",
"post": [
{
"content": "Tweet version",
"image": ["twitter-image.jpg"]
}
]
},
{
"provider": "linkedin",
"post": [
{
"content": "LinkedIn version with more context...",
"image": ["linkedin-image.jpg"]
}
],
"settings": {
"__type": "linkedin",
"companyId": "company-123"
}
}
]
}All Output is JSON
Every command outputs JSON for easy parsing:
INTEGRATIONS=$(postiz integrations:list | jq -r '.')
REDDIT_ID=$(echo "$INTEGRATIONS" | jq -r '.[] | select(.identifier=="reddit") | .id')Threading Support
Comments are automatically converted to threads/replies based on platform:
- Twitter/X: Thread of tweets
- Reddit: Comment replies
- LinkedIn: Comment on post
- Instagram: First comment
postiz posts:create \
-c "Main post" \
-c "Comment 1" \
-c "Comment 2" \
-i "integration-id"Common Workflows
Reddit Post with Flair
#!/bin/bash
REDDIT_ID=$(postiz integrations:list | jq -r '.[] | select(.identifier=="reddit") | .id')
FLAIRS=$(postiz integrations:trigger "$REDDIT_ID" getFlairs -d '{"subreddit":"programming"}')
FLAIR_ID=$(echo "$FLAIRS" | jq -r '.output[0].id')
postiz posts:create \
-c "My post content" \
-s "2024-12-31T12:00:00Z" \
--settings "{\"subreddit\":[{\"value\":{\"subreddit\":\"programming\",\"title\":\"Post Title\",\"type\":\"text\",\"is_flair_required\":true,\"flair\":{\"id\":\"$FLAIR_ID\",\"name\":\"Discussion\"}}}]}" \
-i "$REDDIT_ID"YouTube Video Upload
#!/bin/bash
VIDEO=$(postiz upload video.mp4)
VIDEO_PATH=$(echo "$VIDEO" | jq -r '.path')
postiz posts:create \
-c "Video description..." \
-s "2024-12-31T12:00:00Z" \
--settings '{"title":"My Video","type":"public","tags":[{"value":"tech","label":"Tech"}]}' \
-m "$VIDEO_PATH" \
-i "youtube-id"Multi-Platform Campaign
#!/bin/bash
postiz posts:create \
-c "Same content everywhere" \
-s "2024-12-31T12:00:00Z" \
-m "image.jpg" \
-i "twitter-id,linkedin-id,facebook-id"Batch Scheduling
#!/bin/bash
DATES=("2024-02-14T09:00:00Z" "2024-02-15T09:00:00Z" "2024-02-16T09:00:00Z")
CONTENT=("Monday motivation ๐ช" "Tuesday tips ๐ก" "Wednesday wisdom ๐ง ")
for i in "${!DATES[@]}"; do
postiz posts:create \
-c "${CONTENT[$i]}" \
-s "${DATES[$i]}" \
-i "twitter-id"
doneDocumentation
For AI Agents:
- SKILL.md - Complete skill reference with patterns and examples
Deep-Dive Guides:
- HOW_TO_RUN.md - Installation and setup methods
- COMMAND_LINE_GUIDE.md - Complete command syntax reference
- PROVIDER_SETTINGS.md - All platform settings schemas
- INTEGRATION_TOOLS_WORKFLOW.md - Tools workflow guide
- INTEGRATION_SETTINGS_DISCOVERY.md - Settings discovery
- SUPPORTED_FILE_TYPES.md - Media format reference
- PROJECT_STRUCTURE.md - Code architecture
- PUBLISHING.md - npm publishing guide
Examples:
- examples/EXAMPLES.md - Comprehensive examples
- examples/ - Ready-to-use scripts and JSON files
API Endpoints
The CLI interacts with these Postiz API endpoints:
| Endpoint | Method | Purpose |
|---|---|---|
/public/v1/posts |
POST | Create a post |
/public/v1/posts |
GET | List posts |
/public/v1/posts/:id |
DELETE | Delete a post |
/public/v1/integrations |
GET | List integrations |
/public/v1/integration-settings/:id |
GET | Get integration settings |
/public/v1/integration-trigger/:id |
POST | Trigger integration tool |
/public/v1/upload |
POST | Upload media |
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
POSTIZ_API_KEY |
โ Yes | - | Your Postiz API key |
POSTIZ_API_URL |
No | https://api.postiz.com |
Custom API endpoint |
Error Handling
The CLI provides clear error messages with exit codes:
- Exit code 0: Success
- Exit code 1: Error occurred
Common errors:
| Error | Solution |
|---|---|
POSTIZ_API_KEY is not set |
Set environment variable: export POSTIZ_API_KEY=key |
Integration not found |
Run integrations:list to get valid IDs |
startDate/endDate required |
Use ISO 8601 format: "2024-12-31T12:00:00Z" |
Invalid settings |
Check integrations:settings for required fields |
Tool not found |
Check available tools in integrations:settings output |
Upload failed |
Verify file exists and format is supported |
Development
Project Structure
apps/cli/
โโโ src/
โ โโโ index.ts # CLI entry point with yargs
โ โโโ api.ts # PostizAPI client class
โ โโโ config.ts # Environment configuration
โ โโโ commands/
โ โโโ posts.ts # Post management commands
โ โโโ integrations.ts # Integration commands
โ โโโ upload.ts # Media upload command
โโโ examples/ # Example scripts and JSON files
โโโ package.json
โโโ tsconfig.json
โโโ tsup.config.ts # Build configuration
โโโ README.md # This file
โโโ SKILL.md # AI agent referenceScripts
pnpm run dev # Watch mode for development
pnpm run build # Build the CLI
pnpm run start # Run the built CLIBuilding
The CLI uses tsup for bundling:
pnpm run buildOutput in dist/:
index.js- Bundled executable with shebangindex.js.map- Source map
Quick Reference
# Environment setup
export POSTIZ_API_KEY=your_key
# Discovery
postiz integrations:list # List integrations
postiz integrations:settings <id> # Get settings
postiz integrations:trigger <id> <method> -d '{}' # Fetch data
# Posting (date is required)
postiz posts:create -c "text" -s "2024-12-31T12:00:00Z" -i "id" # Simple
postiz posts:create -c "text" -s "2024-12-31T12:00:00Z" -t draft -i "id" # Draft
postiz posts:create -c "text" -m "img.jpg" -s "2024-12-31T12:00:00Z" -i "id" # With media
postiz posts:create -c "main" -c "comment" -s "2024-12-31T12:00:00Z" -i "id" # With comment
postiz posts:create -c "text" -s "2024-12-31T12:00:00Z" --settings '{}' -i "id" # Platform-specific
postiz posts:create --json file.json # Complex
# Management
postiz posts:list # List posts
postiz posts:delete <id> # Delete post
postiz upload <file> # Upload media
# Help
postiz --help # Show help
postiz posts:create --help # Command helpContributing
This CLI is part of the Postiz monorepo.
To contribute:
- Fork the repository
- Create a feature branch
- Make your changes in
apps/cli/ - Run tests:
pnpm run build - Submit a pull request
License
AGPL-3.0
Links
- Website: postiz.com
- API Docs: postiz.com/api-docs
- GitHub: gitroomhq/postiz-app
- Issues: Report bugs
Supported Platforms
28+ platforms including:
| Platform | Integration Tools | Settings |
|---|---|---|
| Twitter/X | getLists, getCommunities | who_can_reply_post |
| getCompanies | companyId, carousel | |
| getFlairs, searchSubreddits | subreddit, title, flair | |
| YouTube | getPlaylists, getCategories | title, type, tags, playlistId |
| TikTok | - | privacy, duet, stitch |
| - | post_type (post/story) | |
| getPages | - | |
| getBoards, getBoardSections | - | |
| Discord | getChannels | - |
| Slack | getChannels | - |
| And 18+ more... |
See PROVIDER_SETTINGS.md for complete documentation.