socifyr post [text] [options]The single workhorse command. Text comes from a positional argument, --file, or stdin; media from --media (local files) or --media-id (library IDs / URLs).
Options
| Flag | Description |
|---|---|
-t, --to <slugs> | Required. Comma-separated connection slugs |
-f, --file <path> | Read caption from a text file |
-m, --media <paths> | Comma-separated local file paths |
--media-id <refs> | Comma-separated media library IDs or public URLs |
--format <format> | Override content format (see below) |
-a, --at <iso> | Schedule for a future ISO-8601 datetime |
--ai | Use AI to generate platform-specific captions |
-w, --wait | Block until terminal state; print per-platform results |
--draft | Save as draft instead of publishing |
--json | Output as JSON |
Valid --format values: text_post, photo_single, photo_carousel, short_video, feed_video, story, document_post.
Text-only
socifyr post "Just shipped v2.0 🚀" --to linkedin-myhandle,x-myhandleFrom a file:
socifyr post --file CHANGELOG.md --to linkedin-myhandleFrom stdin:
echo "Pipeline broke 😅" | socifyr post --to x-myhandle
cat release-notes.md | socifyr post --to linkedin-myhandlePhoto
socifyr post "New product reveal" --media banner.jpg --to instagram-mybrandCarousel — pass multiple comma-separated paths:
socifyr post "Photo dump" \
--media a.jpg,b.jpg,c.jpg,d.jpg \
--to instagram-mybrandVideo
socifyr post "Demo of v2.0" \
--media demo.mp4 \
--to youtube-mychannel,instagram-mybrandAs a Reel / Short:
socifyr post "Quick demo" \
--media demo.mp4 \
--format short_video \
--to instagram-mybrand,tiktok-meReusing media
Skip the upload by referencing existing library IDs (24-char hex) or public URLs:
socifyr post "Same banner, new caption" \
--media-id 6a04f715d3d7d93575e65d13 \
--to linkedin-myhandle
socifyr post "From a CDN" \
--media-id https://cdn.example.com/banner.png \
--to instagram-mybrandYou can mix local files and IDs/URLs in the same call.
Scheduling
socifyr post "Deploy at 9am tomorrow" \
--to linkedin-myhandle \
--at "2026-06-01T09:00:00Z"Times must be ISO-8601. UTC by default; include an offset like -04:00 to use a different timezone.
Drafts
socifyr post "Polish this later" \
--media banner.jpg \
--to instagram-mybrand \
--draft
# ✓ Draft saved
# ID: 6a05032a84584482ace13d5f
# Publish it later
socifyr publish 6a05032a84584482ace13d5fAI captions
socifyr post "" --media banner.jpg --to instagram-mybrand,x-myhandle --aiThe CLI calls /ai/generate-content with platforms derived from your connections.
Waiting for results
socifyr post "Test cross-post" \
--to instagram-mybrand,x-myhandle \
--wait
# ⟳ publishing
#
# ✓ instagram → https://instagram.com/p/...
# ✗ x: rate limit exceededOutput
By default the CLI prints a short summary:
✓ Post submitted
ID: 6a05033584584482ace13d72
Check status: socifyr status 6a05033584584482ace13d72--json returns the raw API response — useful for scripting:
ID=$(socifyr post "Hello" --to x-myhandle --json | jq -r '.uploadId')
socifyr status "$ID" --wait