Choose your surface
Use the dashboard for setup and review, the CLI for scripts and terminals, an SDK when you write application code, the REST API from any other language, and MCP when an AI agent should do the work. All five call the same API, so you can mix them: connect accounts in the dashboard, schedule from a script, and let an agent read analytics.
Which surface should I use?
| If you want to... | Use | Why |
|---|---|---|
| Connect accounts, review and approve posts, manage your team | Dashboard | Only the dashboard connects new accounts and has an approval screen. |
| Post from a terminal, a cron job or CI | CLI | One command per task, --json output, no code. |
| Build posting into a Node or TypeScript app | TypeScript SDK | Typed methods, file uploads, typed errors, webhook verification. |
| Build posting into a Python service | Python SDK | Small client for publishing, scheduling, analytics and AI. Uses media IDs or URLs. |
| Use any other language, or a no-code tool | REST API | Plain HTTP with JSON and an API key. n8n and Make nodes wrap it. |
| Let Claude, Cursor, ChatGPT or Codex post for you | MCP | 20 tools and plain-language prompts. |
What does the same post look like on each surface?
Publish "Shipped v2.0 today" to two accounts:
New Post > pick accounts > write the caption > Publish.socifyr post "Shipped v2.0 today" --to x-myhandle,linkedin-myhandleawait socifyr.uploads.text({
connections: ['x-myhandle', 'linkedin-myhandle'],
text: 'Shipped v2.0 today',
})client.uploads.text(connections=["x-myhandle", "linkedin-myhandle"], text="Shipped v2.0 today")curl -X POST https://api.socifyr.com/api/content/text \
-H "Authorization: Bearer $SOCIFYR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"connections":["x-myhandle","linkedin-myhandle"],"text":"Shipped v2.0 today"}'{ "tool": "post_text", "arguments": { "caption": "Shipped v2.0 today", "connections": ["x-myhandle", "linkedin-myhandle"] } }How do I pick between the SDK and the REST API?
Use an SDK if one exists for your language. The TypeScript SDK adds file upload handling, retries for safe reads, polling with waitForCompletion and typed errors. The Python SDK is thinner and always sends requests asynchronously. For Go, Ruby, PHP or shell, call REST directly. The REST reference documents every field.
How do I pick between the CLI and MCP?
The CLI is deterministic: the same command does the same thing, which suits cron and CI. MCP is for tasks where an agent decides what to do, such as "reschedule everything that failed last night". Give agents a key with guardrails. See Approvals and guardrails.
What can each surface not do?
- Only the dashboard connects a new social account.
- Only the dashboard and REST handle approve and reject.
- The Python SDK has no media upload, update or delete.
- The CLI and MCP cannot manage webhooks, API keys or members.
- MCP cannot create drafts or upload files from your computer.
The full table is in the feature matrix.
Do I need an API key for each?
The dashboard uses your login. The CLI, SDKs, REST API and MCP use an API key (sk_...) tied to one workspace. Create it in the dashboard under API Keys. See API keys.
FAQ
Can I start with the dashboard and move to code later?
Yes. Everything you set up in the dashboard, such as accounts and keys, is available to the other surfaces.
Which surface is best for agencies?
Dashboard for onboarding clients, one workspace per client, and the SDK or CLI for automation. See Multi-workspace setup.