This guide walks you through posting to one or more social platforms from your terminal and from code.
1. Get an API key
- Sign up at socifyr.com
- Open Settings → API Keys and click Create key
- Copy the key — it starts with
sk_and is only shown once
You'll also need your workspace ID (visible in the URL once you're inside a workspace, e.g. socifyr.com/dashboard/<workspaceId>/...).
2. Connect a social account
In Settings → Integrations, click Connect next to a platform. Each connection is identified by a slug like instagram-mybrand or linkedin-myhandle. You'll use these slugs everywhere — never raw platform names.
See Connections for the full list of supported platforms.
3. Pick your surface
# Install
bun add -g socifyr
# Configure once
socifyr configure --key sk_... --workspace <workspaceId>
# Post
socifyr post "Hello, world!" --to linkedin-myhandle,x-myhandleimport { Socifyr } from '@socifyr/sdk'
const socifyr = new Socifyr({
apiKey: process.env.SOCIFYR_API_KEY!,
workspaceId: process.env.SOCIFYR_WORKSPACE_ID!,
})
await socifyr.uploads.text({
connections: ['linkedin-myhandle', 'x-myhandle'],
text: 'Hello, world!',
})curl -X POST https://api.socifyr.com/api/content/text \
-H "Authorization: Bearer sk_..." \
-H "X-Workspace-Id: <workspaceId>" \
-H "Content-Type: application/json" \
-d '{
"connections": ["linkedin-myhandle", "x-myhandle"],
"text": "Hello, world!"
}'That's it — the post is queued, dispatched per platform, and you can poll socifyr status <id> (or GET /content/:id) for the result.
4. Try with media
Upload a local image and a video:
socifyr post "New product reveal" --media banner.jpg --to instagram-mybrand
socifyr post "Watch this" --media demo.mp4 --to tiktok-me,instagram-mybrand --format short_videoOr reuse an asset from your media library:
socifyr media list
# 🖼 banner.png ID: 6a04f715d3d7d93575e65d13
socifyr post "Same banner, two days later" \
--media-id 6a04f715d3d7d93575e65d13 \
--to linkedin-myhandle5. Schedule for later
socifyr post "Deploy complete 🚀" \
--to linkedin-myhandle \
--at "2026-06-01T09:00:00Z"6. Wait for results
Use --wait (CLI) or waitForCompletion (SDK) to block until every platform reports back:
socifyr post "Cross-post test" --to instagram-mybrand,x-myhandle --wait
# ⟳ publishing
#
# ✓ instagram → https://instagram.com/p/...
# ✗ x: rate limit exceededconst upload = await socifyr.uploads.text({
connections: ['instagram-mybrand', 'x-myhandle'],
text: 'Cross-post test',
})
const result = await socifyr.uploads.waitForCompletion(upload.id)
console.log(result.channels)Next steps
- Concepts — connection slugs, content formats, lifecycle
- SDK reference — every method documented
- CLI reference — every flag explained
- MCP server — let Claude post on your behalf