Skip to content

This guide walks you through posting to one or more social platforms from your terminal and from code.

1. Get an API key

  1. Sign up at socifyr.com
  2. Open Settings → API Keys and click Create key
  3. 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

bash
# Install
bun add -g socifyr

# Configure once
socifyr configure --key sk_... --workspace <workspaceId>

# Post
socifyr post "Hello, world!" --to linkedin-myhandle,x-myhandle
typescript
import { 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!',
})
bash
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:

bash
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_video

Or reuse an asset from your media library:

bash
socifyr media list
# 🖼  banner.png   ID: 6a04f715d3d7d93575e65d13

socifyr post "Same banner, two days later" \
  --media-id 6a04f715d3d7d93575e65d13 \
  --to linkedin-myhandle

5. Schedule for later

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

bash
socifyr post "Cross-post test" --to instagram-mybrand,x-myhandle --wait
# ⟳ publishing
#
#   ✓  instagram  → https://instagram.com/p/...
#   ✗  x: rate limit exceeded
typescript
const 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