How I automated my entire social workflow with the OmniSocials API
One API key, four calls, your whole social presence
Hey, you commented API on my post, so here’s what I promised. About 10 minutes to wire up. After that you’re calling the API directly, no dashboard required. Written the way I’d explain it to a friend who codes.
Hey, you commented API on my post, so here’s what I promised.
About 10 minutes to wire up. After that you’re calling the API directly, no dashboard required. Written the way I’d explain it to a friend who codes.
The point
What you’ll have by the end of this page
✓A working OmniSocials account with your platforms connected✓An API key you can call from your own code✓Real examples for the things you actually need: schedule a post, check stats, manage your inbox
What you actually need
Three pieces
I’ll walk you through each one.
✓An OmniSocials account with your platforms connected✓An API key✓A few curl calls (or your language of choice, it’s just REST, and we ship SDKs too, more on that at the end)
Step 1
Create your account
👉 Sign up here (14 days free, no card). It’s $10/month after the trial. No per-seat pricing, no “contact sales” tier for the API.
Step 2
Connect your accounts
Settings → click Connect on each platform. Two clicks per platform: sign in, approve, next one.
Step 2
The platforms
11 platforms, pick whichever you actually post on. You can always add more later.
CategoryPlatforms
CoreInstagram, Facebook (+ Reels), X, TikTok
ProfessionalLinkedIn Profile, LinkedIn Company Page, YouTube, Google Business
DecentralizedBluesky, Threads, Mastodon
VisualPinterest
Step 3
Get your API key
Settings → Organisation → API → Create key.
!
Copy it immediately, you only see it once
It looks like omsk_live_… for your real accounts, or omsk_test_… if you want to try things without touching anything live. The inbox endpoints (Step 6) need two extra scopes, inbox:read and inbox:write, that aren’t on by default. Tick them when you create the key, or you’ll get a permissions error the first time you try to read a DM.
Step 3
Keep it out of your code, an env var is fine
env.sh1 lines
export OMNISOCIALS_API_KEY="omsk_live_..."
Step 3
Every call below uses this header
header.txt1 lines
Authorization: Bearer $OMNISOCIALS_API_KEY
Step 4
Schedule a post
create-post.sh6 lines
curl -X POST https://api.omnisocials.com/v1/posts/create -H "Authorization: Bearer $OMNISOCIALS_API_KEY" -H "Content-Type: application/json" -d '{
"content": "Shipped a new feature today. Here'"'"'s what changed.",
"accounts": ["linkedin", "x", "threads"],
"media_urls": ["https://yoursite.com/screenshot.png"],
"schedule_at": "2026-09-01T09:00:00Z"
}'
Step 4
The fields that matter
accounts takes the platform names from GET /v1/accounts (or a <workspace_id>_<platform> id if you’re running multiple workspaces). media_urls is optional, up to 10 files, 100MB each. Drop schedule_at and add "publish_now": true instead if you want it to go out immediately rather than queue.
If you’re uploading a local file rather than linking one, send it to POST /v1/media/upload first (multipart, field name file) and use the returned media id in media instead of media_urls.
curl https://api.omnisocials.com/v1/inbox/conversations/CONVERSATION_ID/messages -H "Authorization: Bearer $OMNISOCIALS_API_KEY"
curl -X POST https://api.omnisocials.com/v1/inbox/conversations/CONVERSATION_ID/reply -H "Authorization: Bearer $OMNISOCIALS_API_KEY" -H "Content-Type: application/json" -d '{"text": "Thanks for reaching out! Here'"'"'s the guide."}'
Step 6
Where you probably came from
This is the same mechanic behind the “comment a word, get a DM” post you probably found this guide through. If you’ve ever wanted to build that yourself, this is the endpoint that does it.
SDKs
Prefer an SDK over raw curl?
We ship official clients in 8 languages, same shape everywhere: client.posts.create(...), typed requests/responses, automatic retries, and a webhook signature helper built in.
Keeping this page to the things most people actually build first
✓Hashtag sets — save a group of tags once, apply them at post-create time instead of retyping them✓Webhooks — get pushed a signed event instead of polling analytics✓Recent platform posts — pull a brand-new workspace’s existing posts from the platform itself, useful for onboarding
What this doesn’t fix
Being straight with you, because I’d rather you know now
✗It doesn’t write your captions. Bring your own content, or generate it however you already do.✗It doesn’t guess your posting strategy. You still decide what goes out and when.✗Rate limit is 100 requests/minute per key. Fine for scheduling and reading inbox, not built for polling analytics in a tight loop.
If you get stuck
Most common issues, in order
✗401 on every call. Check the key didn’t get truncated when you copied it, and that you’re sending Bearer <key>, not just the key.✗403 on inbox calls specifically. Your key is missing the inbox:read/inbox:write scopes, see Step 3.✗Post accepted but never appears. Check the platform is actually connected under Settings, and that you passed its exact name in accounts.
That’s it 🙌
One API key, four calls, your whole social presence
i
If you build something with it, send me a link, I’d genuinely love to see it.