walid@portfolio:~/lab/omnisocials-api$
cd../lab
01ideaSep 2026

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.

REST APISocial automationSchedulingInboxSDKsSign upSDK docs
i
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 connectedAn API key you can call from your own codeReal 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 connectedAn API keyA 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.

Step 5

Check how a post performed — one post

analytics-one.sh1 lines
curl https://api.omnisocials.com/v1/analytics/posts/59546574   -H "Authorization: Bearer $OMNISOCIALS_API_KEY"
Step 5

A batch at once (up to 100 ids)

analytics-batch.sh1 lines
curl "https://api.omnisocials.com/v1/analytics/posts?ids=59546574,59546590"   -H "Authorization: Bearer $OMNISOCIALS_API_KEY"
Step 5

And the account-level numbers, not tied to one post

analytics-accounts.sh1 lines
curl https://api.omnisocials.com/v1/analytics/accounts   -H "Authorization: Bearer $OMNISOCIALS_API_KEY"
Step 6

Manage your social inbox — list conversations

Every DM, comment, and mention across every connected platform, in one thread instead of eleven tabs.

inbox-list.sh1 lines
curl https://api.omnisocials.com/v1/inbox/conversations   -H "Authorization: Bearer $OMNISOCIALS_API_KEY"
Step 6

Read one thread, and reply to it

inbox-reply.sh3 lines
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.

SDKs

Eight languages

Full overview: docs.omnisocials.com/sdks

LanguageInstallPublished onDocs
Node.js / TypeScriptnpm install @omnisocials/sdknpmdocs.omnisocials.com/sdks/node
Pythonpip install omnisocialsPyPIdocs.omnisocials.com/sdks/python
Gogo get github.com/OmniSocials/omnisocials-goGitHubdocs.omnisocials.com/sdks/go
Rubygem install omnisocialsRubyGemsdocs.omnisocials.com/sdks/ruby
JavaMaven / GradleMaven Central publish pendingdocs.omnisocials.com/sdks/java
PHPcomposer require omnisocials/omnisocials-phpPackagistdocs.omnisocials.com/sdks/php
.NETdotnet add package OmniSocialsNuGetdocs.omnisocials.com/sdks/dotnet
Rustcargo add omnisocialscrates.iodocs.omnisocials.com/sdks/rust
What’s also in there, if you need it

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 themWebhooks — get pushed a signed event instead of polling analyticsRecent 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.

next →
A shorts studio that runs in the terminal
← all experiments