Social media posting API
Social media posting API: one REST call, 18 platforms
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.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"
}'- 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 inconnectionsand 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
SendsaveDraft,scheduledAt, orasync. Retry failed channels without double-posting the ones that succeeded.Reconnect without the dashboard
POST /api/oauth/connections/:ref/reconnect-linkreturns 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.
Authorization: Bearer sk_your_key
X-Workspace-Id: <workspaceId>
Content-Type: application/jsonThe 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 schedule a post through the API?
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?
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?
{
"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?
# 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?
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?
How do I post to several accounts in one request?
connections array. Slugs look like instagram-mybrand. Never use a raw platform name or an ObjectId in connections.Is there an official client?
Related
Put social media posting api to work
One key, 18 platforms, flat pricing from $9.99. The free plan needs no card.