Use case
Manage social posting for multiple clients with workspaces
Agencies can keep each client in its own Socifyr workspace. A workspace has its own connected accounts, API keys, team members and content history, and every API call selects one with the X-Workspace-Id header. That keeps client A's posts and credentials away from client B, while your scripts stay the same across clients.
cURLTypeScript SDKCLI
How it works
- 1
One workspace per client
Create workspaces through the dashboard or workspaces.create in the SDK. Connect that client's accounts inside it. - 2
Issue a key per workspace or per automation
Keys belong to a workspace, so a leaked key exposes one client, not all of them. Add guardrails to automation keys. - 3
Invite the right people
Four roles (owner, admin, editor, contributor) control who can publish, approve or manage accounts. - 4
Loop over clients in code
Your script switches the workspace ID and API key and reuses the same posting code for every client.
Working code
# Same call, different client: only the key and workspace change
curl -X POST https://api.socifyr.com/api/content/text \
-H "Authorization: Bearer sk_client_a_key" \
-H "X-Workspace-Id: client_a_workspace" \
-H "Content-Type: application/json" \
-d '{ "connections": ["instagram-clienta"], "text": "Weekend hours: 10am to 4pm." }'import { Socifyr } from '@socifyr/sdk'
const clients = [
{ name: 'Client A', apiKey: process.env.KEY_A!, workspaceId: 'client_a_workspace', slug: 'instagram-clienta' },
{ name: 'Client B', apiKey: process.env.KEY_B!, workspaceId: 'client_b_workspace', slug: 'facebook-clientb' },
]
for (const c of clients) {
const socifyr = new Socifyr({ apiKey: c.apiKey, workspaceId: c.workspaceId })
await socifyr.uploads.text({ connections: [c.slug], text: 'Weekend hours: 10am to 4pm.' })
}SOCIFYR_API_KEY=sk_client_a_key SOCIFYR_WORKSPACE_ID=client_a_workspace \
socifyr post "Weekend hours: 10am to 4pm." --to instagram-clientaReplace sk_your_key and the workspace ID with your own from the dashboard, and use your own connection slugs.
Who this is for
Social and marketing agencies
Run many brands without one shared set of credentials.Freelancers with several retainers
Keep each client's accounts, keys and history separate.Platforms managing end customers' brands
Use per-workspace keys as the isolation boundary in your own tooling.
Frequently asked questions
How does Socifyr keep one client's data separate from another's?
Content, connections, API keys and members live inside a workspace, and each request names its workspace with X-Workspace-Id. A key only works for its own workspace.
Can my client log in and approve posts?
Yes. Invite them as a member with a suitable role. Combine that with require-approval on an automation key so drafts wait for their review.
How many connected accounts do I get?
Connected accounts are capped per plan: 3 on Free, 10 on Pro and 40 on Business.
Can a client connect their own accounts through my app?
Not as a white-label flow today. An account owner connects accounts through the Socifyr dashboard, and you work with the resulting slugs. Check the roadmap and docs if you need embedded end-user connect.
How do I rotate a client's key?
Create a new key in that workspace, update your automation, then delete the old key. Other workspaces are unaffected.