Skip to main content

Managing Posts

Create, list, and delete social media posts from the command line

Creating Posts

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

Simple Post

sipstory 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

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

sipstory posts:create \
-c "Check out this photo!" \
-m "https://uploads.sipstory.tech/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:

sipstory 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):

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

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

sipstory 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"
tip

Use sipstory 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:

sipstory 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

sipstory posts:list

Filter by Date Range

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

Filter by Customer

sipstory 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

sipstory 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"
}
]
note

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:

sipstory posts:connect <post-id> --release-id "7321456789012345678"

After connecting, the post will support full analytics via sipstory analytics:post.

Full Workflow

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

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

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

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

Deleting Posts

sipstory posts:delete <post-id>