Skip to main content

Creating Posts

Use posts:create to schedule or draft posts to one or more platforms.

Simple Post

postiz posts:create \
  -c "Hello world!" \
  -s "2025-01-15T10:00:00Z" \
  -i "your-integration-id"

Options

FlagDescription
-c, --contentPost content. Use multiple times for threads/comments.
-s, --dateSchedule date in ISO 8601 format (required)
-t, --typeschedule (default) or draft
-m, --mediaComma-separated media URLs (use after uploading)
-i, --integrationsComma-separated integration IDs (required)
-d, --delayDelay between comments in milliseconds (default: 5000)
--settingsPlatform-specific settings as JSON
-j, --jsonPath to a JSON file for complex posts

Draft Post

postiz posts:create \
  -c "Review this before publishing" \
  -s "2025-01-15T10:00:00Z" \
  -t draft \
  -i "your-integration-id"

Post with Media

Upload your media first with the upload command, then reference the returned URL:
postiz posts:create \
  -c "Check out this photo!" \
  -m "https://uploads.postiz.com/your-image.jpg" \
  -s "2025-01-15T10:00:00Z" \
  -i "your-integration-id"

Threads and Comments

Pass -c multiple times to create a thread. Each comment can have its own media with a corresponding -m flag:
postiz posts:create \
  -c "Thread 1/3" -m "image1.jpg" \
  -c "Thread 2/3" -m "image2.jpg" \
  -c "Thread 3/3" \
  -s "2025-01-15T10:00:00Z" \
  -i "twitter-integration-id"
Use -d to control the delay between comments (in milliseconds):
postiz posts:create \
  -c "First tweet" \
  -c "Second tweet" \
  -c "Third tweet" \
  -s "2025-01-15T10:00:00Z" \
  -d 2000 \
  -i "twitter-integration-id"

Multi-Platform Post

Send the same content to multiple platforms by passing comma-separated integration IDs:
postiz posts:create \
  -c "Posting everywhere!" \
  -s "2025-01-15T10:00:00Z" \
  -i "twitter-id,linkedin-id,facebook-id"

Platform-Specific Settings

Some platforms require additional settings. Pass them as JSON with --settings:
postiz posts:create \
  -c "Check out this discussion" \
  -s "2025-01-15T10:00:00Z" \
  --settings '{"subreddit":[{"value":{"subreddit":"programming","title":"My Post","type":"text"}}]}' \
  -i "reddit-integration-id"
Use postiz integrations:settings <id> to discover what settings are available for each platform. See Integrations for details.

Complex Posts with JSON

For posts with detailed platform-specific content, use a JSON file:
postiz posts:create --json post.json
Example post.json:
{
  "integrations": ["twitter-123", "linkedin-456"],
  "posts": [
    {
      "provider": "twitter",
      "post": [{ "content": "Short tweet version", "image": [] }]
    },
    {
      "provider": "linkedin",
      "post": [{ "content": "Longer LinkedIn version with more detail", "image": [] }],
      "settings": { "__type": "linkedin" }
    }
  ]
}

Listing Posts

postiz posts:list

Filter by Date Range

postiz posts:list \
  --startDate "2025-01-01T00:00:00Z" \
  --endDate "2025-01-31T23:59:59Z"

Filter by Customer

postiz posts:list --customer "customer-id"

Connecting Missing Posts

Some platforms don’t return a post ID immediately after publishing (the releaseId is set to "missing"). When this happens, you can fetch recent content from the provider and connect the correct one to your post. This enables analytics tracking.

List Available Content

postiz posts:missing <post-id>
Returns an array of recent content items from the provider with their ID and thumbnail URL:
[
  {
    "id": "7321456789012345678",
    "url": "https://p16-sign.tiktokcdn-us.com/obj/cover-image.jpeg"
  },
  {
    "id": "7321456789012345679",
    "url": "https://p16-sign.tiktokcdn-us.com/obj/cover-image2.jpeg"
  }
]
This only works for posts where the releaseId is "missing". Returns an empty array if the provider doesn’t support this feature.

Connect a Post

Once you’ve identified the correct content, update the release ID:
postiz posts:connect <post-id> --release-id "7321456789012345678"
After connecting, the post will support full analytics via postiz analytics:post.

Full Workflow

# 1. Find posts with missing release IDs
postiz posts:list | jq '.posts[] | select(.releaseId == "missing") | {id, content}'

# 2. Get available content from the provider
postiz posts:missing <post-id>

# 3. Connect the correct content
postiz posts:connect <post-id> --release-id "7321456789012345678"

# 4. Verify analytics now work
postiz analytics:post <post-id>

Deleting Posts

postiz posts:delete <post-id>