Skip to navigation

Social publishing

Prepare drafts, add media, schedule posts, and manage your publishing calendar.
View as Markdown

Use the social commands with accounts already connected in Simplified. Start by listing them, then choose the IDs for the channels you want to use:

simplified accounts:list
simplified accounts:list --network instagram

Supported network filters are facebook, instagram, linkedin, tiktok, tiktokBusiness, youtube, pinterest, threads, google, bluesky, mastodon, reddit, and telegram. Use google for Google Business accounts.

Create a draft

simplified posts:create \
--content "Our autumn collection is here." \
--accounts "ACCOUNT_ID" \
--action draft

Choose the action deliberately:

ActionUse it when
draftThe content needs editing or review.
add_to_queueThe content should enter the account’s publishing queue. Check that account’s queue settings in Simplified.
scheduleThe post should be scheduled for a specific date and time.

Queueing is not an explicit “publish now” command. The CLI’s create command supports the three actions above.

Add images and video

Use publicly reachable media URLs, including a fresh stored URL from assets:get. A local path such as ./photo.jpg must be uploaded first.

simplified posts:create \
--content "Explore the collection." \
--accounts "ACCOUNT_ID" --action draft \
--media "https://cdn.example.com/front.jpg,https://cdn.example.com/detail.jpg"

For a video with a poster frame, supply objects through --media-json:

simplified posts:create \
--content "See the collection in motion." \
--accounts "ACCOUNT_ID" --action draft \
--media-json '[{"url":"https://cdn.example.com/launch.mp4","thumbUrl":"https://cdn.example.com/poster.jpg"}]'

--media-json takes precedence over --media. The CLI accepts up to ten media URLs through --media; each platform can impose additional format and count requirements.

Choose platform-specific settings

Pass per-platform options as a JSON object in --additional. For example, an Instagram Reel uses a video and the Reel/direct publishing settings:

simplified posts:create \
--content "Behind the scenes." --accounts "INSTAGRAM_ACCOUNT_ID" \
--action draft --media "https://cdn.example.com/behind-the-scenes.mp4" \
--additional '{"instagram":{"postType":{"value":"reel"},"channel":{"value":"direct"}}}'

Use the Social Media API reference for the current additional schema. Options are platform-specific; a caption and media combination suitable for one channel may need changes for another.

For a LinkedIn document carousel, provide a reachable PDF URL in additional.linkedin.document.url and an empty media array. Use a JSON file as shown below so the full payload is explicit. An asset UUID is not a PDF URL.

Work across multiple accounts

Supply comma-separated IDs. Add --group to create a grouped post for two or more accounts:

simplified posts:create \
--content "A new chapter starts today." \
--accounts "LINKEDIN_ACCOUNT_ID,BLUESKY_ACCOUNT_ID" \
--action draft --group

Review the content for each destination. Use separate drafts when the copy or media needs to differ substantially.

Schedule a post

Use a future date in YYYY-MM-DD HH:MM format:

simplified posts:create \
--content "Our collection is now available." \
--accounts "ACCOUNT_ID" --action schedule \
--date "2027-01-15 17:00"

Replace the sample date with your intended publishing time and check the result in the calendar. In version 1.8.0, posts:create forwards the date without a separate timezone flag. To set an explicit timezone on an existing scheduled post, use posts:update:

simplified posts:update --post-id "POST_ID" \
--date "2027-01-15" --time "09:00" --timezone "America/Los_Angeles"

Notice that updates take separate --date and --time values. Listing posts uses --tz to choose the display timezone; this does not reschedule them.

Use a JSON file for a reusable payload

Create post.json and replace the placeholder account and media values:

{
"message": "Our latest field guide.",
"account_ids": [12345],
"action": "draft",
"media": [],
"additional": {
"linkedin": {
"document": {
"url": "https://cdn.example.com/field-guide.pdf",
"title": "The field guide"
}
}
}
}
simplified posts:create --json post.json

--json reads the complete API request body from the file; the usual content, accounts, action, and media flags do not build that body for you in this mode. Use valid JSON, not comments or shell variables inside the file.

Add follow-up comments

simplified posts:create \
--content "Read our latest guide." --accounts "ACCOUNT_ID" --action draft \
--comment "Full guide: https://example.com/guide"

For several comments, use --comments with an array of objects containing message and a delay in seconds. --comments takes precedence over --comment. Comments are intended for after publication; platform support still applies.

Find, edit, and remove content

simplified posts:list --accounts "ACCOUNT_ID" --category scheduled --page 1 --per-page 20
simplified posts:list-drafts --accounts "ACCOUNT_ID"
simplified posts:update --post-id "POST_ID" --content "Updated caption."
simplified posts:update-draft --draft-id "DRAFT_ID" --content "Revised draft."

Copy identifiers from the matching list response. Scheduled-post IDs, draft IDs, and group IDs are different inputs. To remove an attachment, an update command accepts --media "".

To delete content, choose the narrowest identifier that matches your intention:

simplified posts:delete --post-schedule-id "POST_SCHEDULE_ID"
simplified posts:delete-draft --draft-ids "DRAFT_ID"

Both delete commands also accept --group-id to act on a group. Re-list content after changes to verify the result. For a review process before scheduling, continue to reviews and approvals.