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
| Flag | Description |
|---|---|
-c, --content | Post content. Use multiple times for threads/comments. |
-s, --date | Schedule date in ISO 8601 format (required) |
-t, --type | schedule (default) or draft |
-m, --media | Comma-separated media URLs (use after uploading) |
-i, --integrations | Comma-separated integration IDs (required) |
-d, --delay | Delay between comments in milliseconds (default: 5000) |
--settings | Platform-specific settings as JSON |
-j, --json | Path 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"
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"
}
]
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>