Social media posting API

Social media posting API: one REST call, 18 platforms

The Socifyr REST API publishes to 18 social platforms with one request. Send POST https://api.socifyr.com/api/content/text with an Authorization: Bearer sk_... header, an X-Workspace-Id header and a JSON body listing connection slugs and text. The API queues the post, fans it out to each account and returns a requestId you can poll. Every response uses the same { "success": true, "data": ... } envelope.
4
ways in: MCP, REST, CLI, SDK
18
platforms, one key
3
connected accounts on Free
30
free uploads per month

What you get

  • One request, many accounts

    List several slugs in connections and the post fans out in parallel. Each channel succeeds or fails on its own.
  • Predictable envelope

    Success is { success: true, data }. Errors are { success: false, error, statusCode, path, timestamp }, and validation errors list each problem.
  • Drafts, schedules, retries

    Send saveDraft, scheduledAt, or async. Retry failed channels without double-posting the ones that succeeded.
  • Reconnect without the dashboard

    POST /api/oauth/connections/:ref/reconnect-link returns a one-time re-authorization link for an expired account.

How do I authenticate with the Socifyr API?

Create an API key in the dashboard under Settings, API Keys. It starts with sk_ and is shown once. Send it as a Bearer token, together with your workspace ID.

http
Authorization: Bearer sk_your_key
X-Workspace-Id: <workspaceId>
Content-Type: application/json

The base URL is https://api.socifyr.com/api. Keys are scoped to one workspace. Rotate a key by creating a new one, deploying it, then deleting the old one; both work in parallel until you delete the old one.

How do I post to social media with cURL?

curl -X POST https://api.socifyr.com/api/content/text \
  -H "Authorization: Bearer sk_your_key" \
  -H "X-Workspace-Id: <workspaceId>" \
  -H "Content-Type: application/json" \
  -d '{
    "connections": ["linkedin-myhandle", "x-myhandle"],
    "text": "Just shipped"
  }'

Images go to POST /content/photos and video to POST /content/video. Both accept a JSON body with media library IDs or public URLs in medias, or multipart/form-data with raw files. A video post takes exactly one entry in medias.

How do I schedule a post through the API?

bash
curl -X POST https://api.socifyr.com/api/content/text \
  -H "Authorization: Bearer sk_your_key" \
  -H "X-Workspace-Id: <workspaceId>" \
  -H "Content-Type: application/json" \
  -d '{
    "connections": ["linkedin-myhandle"],
    "text": "Goes live Tuesday at 9",
    "scheduledAt": "2026-12-01T09:00:00-05:00",
    "timezone": "America/New_York"
  }'

scheduledAt is ISO 8601 and may carry a UTC offset. timezone is an IANA name used for display in the dashboard. Scheduling is available on Pro and Business; on the Free plan the API rejects a request with scheduledAt. For many posts at once, POST /content/bulk-schedule takes up to 500 rows or a CSV string. See how to schedule social media posts with an API.

How do I check whether a post was published?

bash
curl "https://api.socifyr.com/api/content/status?requestId=97005ec5-6361-4953-8a69-ce7292ad9f11" \
  -H "Authorization: Bearer sk_your_key" \
  -H "X-Workspace-Id: <workspaceId>"

The result carries an overall status and one entry per account under channels, each with result.status, result.postUrl and result.error. Statuses move through queued, pending, processing and publishing to completed, partial_failure or failed. A scheduled post waits in the queue until its time; there is no separate "scheduled" status. To retry only the failed channels, call POST /content/:id/retry.

What does the response envelope look like on errors?

json
{
  "success": false,
  "error": "Connection \"nonexistent-slug\" not found",
  "statusCode": 400,
  "path": "/api/content/text",
  "timestamp": "2026-11-13T10:00:00.000Z"
}

Validation failures return error as an array of strings, one per problem. Server errors (5xx) also include a requestId for log correlation.

What are the rate limits?

Publishing endpoints allow 60 requests per minute by default, and the list and fetch endpoints (GET /content, GET /content/:id) allow 240 per minute. A request over the limit gets a 429 with a Retry-After header in seconds. Separately, each platform has its own daily posting cap that Socifyr enforces for you, and your plan caps monthly uploads. See daily posting limits per platform and the plan limits.

How do I reconnect an expired account over REST?

bash
# Try a silent renewal first
curl -X POST https://api.socifyr.com/api/workspaces/<workspaceId>/connections/instagram-mybrand/refresh \
  -H "Authorization: Bearer sk_your_key" \
  -H "X-Workspace-Id: <workspaceId>"

# If it cannot refresh, get a one-time link for the owner
curl -X POST https://api.socifyr.com/api/oauth/connections/instagram-mybrand/reconnect-link \
  -H "Authorization: Bearer sk_your_key" \
  -H "X-Workspace-Id: <workspaceId>"

The second call returns { url, expiresIn, platform, slug }. Only the workspace owner can approve the link, and keys with guardrails cannot create one. Read OAuth token expiry and how to refresh or reconnect accounts.

Frequently asked questions

What is a social media posting API?

An HTTP API that publishes content to social platforms on your behalf. Instead of integrating each platform separately, you send one request and the provider handles each platform's auth, media rules and limits.

What is the Socifyr API base URL?

https://api.socifyr.com/api. Self-hosted installs use their own host with the same /api prefix.

Which platforms can I post to?

18: Instagram, Facebook, X, LinkedIn, TikTok, YouTube, Threads, Pinterest, Reddit, Bluesky, Telegram, Discord, Mastodon, Nostr, Slack, Dev.to, Hashnode and Tumblr. See /post-to/instagram and the other platform pages for each platform's limits.

How do I post to several accounts in one request?

Put every slug in the connections array. Slugs look like instagram-mybrand. Never use a raw platform name or an ObjectId in connections.

Is there an official client?

Yes. See the TypeScript and Python SDKs, the CLI, and the MCP server. All of them wrap this API.

Related

Put social media posting api to work

One key, 18 platforms, flat pricing from $9.99. The free plan needs no card.