OmniSocialsOmniSocials
DocumentationAPI reference
Help centerSupport
  • Documentation
  • API reference
Developers
  • Quickstart
  • API reference
  • SDKs
  • MCP server
  • CLI
For AI agents
  • Docs for AI agents
  • llms.txt
  • OpenAPI spec
  • Postman collection
Product
  • OmniSocials
  • Pricing
  • Changelog
  • Help center
Company
  • Support
  • Privacy policy
  • Terms of service

© 2026 OmniSocials

OmniSocials on GitHubOmniSocials on XOmniSocials on LinkedIn
Overview
Get started
SDKs
CLI
MCPDocs for AI agentsWebhooks
Guides
Platforms
Integrations
Migrate
    From AyrshareFrom ZernioFrom Upload-PostFrom Postiz
Plans and billing
GlossaryChangelogAPI reference
Migrate

Migrate from Ayrshare to the OmniSocials API

This guide is for developers who post through the Ayrshare API and want to move to the OmniSocials API. The request shape is close. Ayrshare's post, platforms, mediaUrls, and scheduleDate become content, accounts, media_urls, and schedule_at. The main change is the account model. Ayrshare picks a user profile with a Profile-Key header and links accounts through a link session URL. OmniSocials gives each workspace its own API key, and accounts are connected in the dashboard. Ayrshare facts on this page come from ayrshare.com/docs and were checked on October 21, 2026.

Concepts

AyrshareOmniSocialsNotes
API key (Authorization: Bearer)API key (Authorization: Bearer omsk_live_...)An OmniSocials key belongs to one workspace.
User profile and its Profile-KeyWorkspace and its own API keyThere is no Profile-Key header. Use the workspace's key instead.
POST /profilesAdd a workspace in the dashboardThere is no API to create workspaces.
Link session or generateJWT URLDashboard connectionAccounts are connected only in the dashboard, never through the API.
One connection per network per profileOne account per channel per workspaceThe same model. LinkedIn is the exception, see below.
platforms values (twitter, gmb, linkedin)Channel IDs (x, google_business, linkedin, linkedin_page)A workspace can hold a LinkedIn profile and a LinkedIn page at once.
Ayrshare post idPost id
postIds[] with postUrl per networkpublished_urls on GET /posts/{id}A map from channel ID to the live URL.
Auto ScheduleNoneGET /analytics/best-times recommends slots. You pick the time.
requiresApprovalApproval workflowsPass approval_workflow_id with schedule_at. See Creating posts.
Webhook actionsWebhook eventsSee Webhooks.

Authentication

Text
Ayrshare: Authorization: Bearer API_KEY Profile-Key: PROFILE_KEY OmniSocials: Authorization: Bearer omsk_live_...

With Ayrshare, one API key serves every user profile, and the Profile-Key header picks the profile. An OmniSocials key is bound to one workspace, which you choose when you create the key under Settings → API. Store one OmniSocials key where you stored each profile key. GET /accounts returns workspace_id and workspace_name, so you can check which workspace a key belongs to.

Ayrshare requires X-Twitter-OAuth1-Api-Key and X-Twitter-OAuth1-Api-Secret headers on X requests since March 31, 2026. OmniSocials needs no X developer app and no extra headers. Drop them.

Keys have scopes, such as posts:write and media:write. A key's scopes cannot be edited later. See Authentication.

Endpoint mapping

OmniSocials paths are relative to https://api.omnisocials.com/v1. Ayrshare paths are relative to https://api.ayrshare.com/api.

AyrshareOmniSocialsNotes
POST /postPOST /posts/createPOST /posts/create-and-publish publishes at once.
GET /post/:idGET /posts/{id}
GET /historyGET /postsFilter with status. Page with limit (max 100) and offset. There are no date or platform filters.
PATCH /postPATCH /posts/{id}Drafts and scheduled posts only. Any create field can change, including text and media.
DELETE /postDELETE /posts/{id}One post per call. Cancels a scheduled publish. A published post stays live on the platforms, see What is different.
PUT /post/retryPOST /posts/{id}/retryRetries only the failed channels, up to 3 times per channel.
POST /media/uploadPOST /media/uploadMultipart, up to 100 MB. POST /media/upload-from-base64 takes base64.
GET /media/uploadUrlPOST /media/create-upload-urlReturns a single-use upload_url for 10 minutes. POST a multipart file to it, not a PUT.
POST /profiles, GET, PATCH, DELETE /profilesNoneManage workspaces in the dashboard.
POST /profiles/link-sessions, POST /profiles/generateJWTNoneConnect accounts in the dashboard.
DELETE /profiles/socialNoneDisconnect accounts in the dashboard.
GET /userGET /accountsReturns the workspace and its connected accounts, with status and needs_reconnect.
POST /analytics/postGET /analytics/posts/{id}GET /analytics/posts?ids= takes up to 100 post IDs.
POST /analytics/socialGET /analytics/accountsGET /analytics/overview gives workspace totals.
GET /comments/:idGET /inbox/conversations?type=commentThen GET /inbox/conversations/{conversationId}/messages. Needs the opt-in inbox:read scope.
POST /comments/reply/:commentIdPOST /inbox/conversations/{conversationId}/replyPass message_id to answer one comment. Needs inbox:write.
DELETE /comments/:idDELETE /inbox/messages/{id}Instagram, Facebook, and TikTok comments.
POST /commentsNonefirst_comment posts one comment when the post publishes.
POST /hook/webhookPOST /webhooksOne webhook can subscribe to several events.
GET /hook/webhookGET /webhooks
DELETE /hook/webhookDELETE /webhooks/{id}
POST /hook/webhook/secretPOST /webhooks/{id}/rotate-secretThe old secret stops working at once.
GET /hook/historyGET /webhooks/{id}Returns failure_count and last_failure. There is no full delivery log.
POST /auto-schedule/setNone
POST /validate/postPOST /media/checkChecks media against your connected channels. There is no full post validation call.

Create a post

The same post in both APIs: one image to Facebook, Instagram, and LinkedIn, with a first comment, scheduled for 08:00 UTC on November 2, 2026.

Ayrshare:

TerminalTerminal
curl -X POST https://api.ayrshare.com/api/post \ -H "Authorization: Bearer $AYRSHARE_API_KEY" \ -H "Profile-Key: $AYRSHARE_PROFILE_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": "Our autumn collection is live.", "platforms": ["facebook", "instagram", "linkedin"], "mediaUrls": ["https://example.com/autumn.jpg"], "scheduleDate": "2026-11-02T08:00:00Z", "firstComment": { "comment": "Shop it at example.com/autumn" } }'

OmniSocials:

TerminalTerminal
curl -X POST https://api.omnisocials.com/v1/posts/create \ -H "Authorization: Bearer $OMNISOCIALS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "content": "Our autumn collection is live.", "accounts": ["facebook", "instagram", "linkedin"], "media_urls": ["https://example.com/autumn.jpg"], "schedule_at": "2026-11-02T08:00:00Z", "facebook": { "first_comment": "Shop it at example.com/autumn" }, "instagram": { "first_comment": "Shop it at example.com/autumn" }, "linkedin": { "first_comment": "Shop it at example.com/autumn" } }'

If the Ayrshare LinkedIn connection is a company page, use linkedin_page instead of linkedin in both accounts and the first-comment key. The response is a 201 with the post under data and "status": "scheduled".

Field mapping

Ayrshare fieldOmniSocials fieldNotes
postcontentA string, or an object with default and channel keys for per-channel text.
platformsaccountsRename twitter to x and gmb to google_business. Alias: channels.
mediaUrlsmedia_urlsUp to 10 URLs, 100 MB per file. Or upload first and pass media_ids.
isVideoNoneThe type is read from the file. Set type: "reel" for TikTok videos, Instagram reels, and YouTube Shorts.
scheduleDateschedule_atISO 8601 in UTC. Alias: scheduled_at.
firstComment.commentfirst_comment under each channel keyText only, set per channel. Instagram, Facebook, LinkedIn, YouTube, TikTok, and Telegram.
firstComment.mediaUrlsNoneFirst comments carry text only.
disableCommentstiktok.disable_commentTikTok only.
requiresApprovalapproval_workflow_idRequires schedule_at.
twitterOptionsx
instagramOptionsinstagramLocation, collaborators, and user tags are top-level fields (location_id, collaborators, user_tags).
faceBookOptionsfacebook
linkedInOptionslinkedin or linkedin_page
youTubeOptionsyoutubeFor example youtube.title and youtube.privacy_status.
tikTokOptionstiktok
pinterestOptionspinterestpinterest.board_id is required.
threadsOptions, blueskyOptions, telegramOptionsthreads, bluesky, telegram
gmbOptionsgoogle_business
redditOptions, snapChatOptionsNoneReddit and Snapchat are not live yet.
autoSchedule, autoRepost, autoHashtagNonehashtag_set applies a saved hashtag set.
shortenLinks, unsplash, randomPost, randomMediaUrlNone
idempotencyKeyNoneStore the returned post id and check it before you retry a create.
validateScheduled, notesNone

See Platforms for every channel's options.

Media and scheduling

Media. mediaUrls maps straight to media_urls: OmniSocials downloads each URL and attaches it. Each file can be up to 100 MB. For larger files, call POST /media/upload-from-url, which fetches up to 1 GB. Files above about 100 MB come back with status: "processing". Poll GET /media/{id} until it is ready, then pass the ID in media_ids.

Ayrshare's presigned flow takes files up to 5 GB. The largest file OmniSocials takes is 1 GB. A PDF is turned into one image per page. On LinkedIn it publishes as a document. Any media entry can carry alt text as { "url": "...", "alt": "..." }. See Media.

Scheduling. scheduleDate and schedule_at both take an ISO 8601 time in UTC, so the value carries over as is. OmniSocials publishes within one minute of that time. Two behaviors differ:

  • A time in the past returns 400 validation_error. Ayrshare publishes a past scheduleDate at once. To publish now, send publish_now: true.
  • A post with neither schedule_at nor publish_now is saved as a draft. Ayrshare publishes a post without scheduleDate right away.

Webhooks

Register a webhook with POST /webhooks and a list of events. The response returns a secret once. Store it.

TerminalTerminal
curl -X POST https://api.omnisocials.com/v1/webhooks \ -H "Authorization: Bearer $OMNISOCIALS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-app.com/webhooks/omnisocials", "events": ["post.published", "post.failed"] }'
Ayrshare actionOmniSocials eventNotes
scheduledpost.published, post.failedOmniSocials sends these for every post, scheduled or not. A partial publish is post.published with data.status set to warning. Check each entry in data.targets.
Nonepost.scheduledSent when a post is scheduled through the API.
socialNonePoll GET /accounts and check needs_reconnect.
comments, messages, mentionsNonePoll GET /inbox/conversations or GET /inbox/next.
feed, batch, automations, suspended, ads, demoNone
Nonepost.approved, post.rejectedApproval workflow outcomes.

Signatures. Ayrshare sends an HMAC-SHA256 of the body in X-Authorization-Content-SHA256, with X-Authorization-Timestamp. OmniSocials sends X-OmniSocials-Signature: t=<timestamp>,v1=<hex>. The HMAC-SHA256 covers the timestamp, a dot, and the raw body, keyed with your webhook secret. Deduplicate on X-OmniSocials-Delivery. See Webhooks for verification code.

Delivery. Answer with a 2xx within 10 seconds. Failed deliveries are retried twice, after 2 seconds and then 5 more. After that the event is dropped, so reconcile with GET /posts?status= if your endpoint was down. Webhook URLs must use HTTPS.

Platform coverage

As of October 21, 2026, from ayrshare.com/docs and the OmniSocials platforms page.

PlatformAyrshareOmniSocials
FacebookYes (facebook)Yes (facebook), Pages
InstagramYes (instagram)Yes (instagram), Business and Creator accounts
ThreadsYes (threads)Yes (threads)
LinkedInYes (linkedin), a profile or a page per connectionYes, profile (linkedin) and company page (linkedin_page)
YouTubeYes (youtube)Shorts only (youtube)
TikTokYes (tiktok)Yes (tiktok)
PinterestYes (pinterest)Yes (pinterest)
BlueskyYes (bluesky)Yes (bluesky)
XYes (twitter), with your own X developer app keysYes (x)
Google Business ProfileYes (gmb)Yes (google_business)
TelegramYes (telegram)Yes (telegram), a channel or group
MastodonNot listedYes (mastodon)
RedditYes (reddit)Coming soon
SnapchatYes (snapchat)Coming soon
WhatsAppMessaging onlyNo

What is different

  • Account connection. OmniSocials has no link session or generateJWT endpoint. Accounts are connected in the dashboard. If your product lets end users connect their own accounts through your app, OmniSocials does not support that today.
  • No profiles API. Workspaces are created in the dashboard, and each API key reaches one workspace.
  • Deleting published posts. DELETE /posts/{id} removes the post from OmniSocials only. Ayrshare's DELETE /post also removes it from most networks. On OmniSocials, use "Delete from [platform]" on the post in the dashboard, or delete it in the platform's app.
  • X. OmniSocials needs no X developer app. Posts with a link use prepaid credits. Posts without a link do not. See X.
  • Rate limit. OmniSocials allows 100 requests per minute per key. Ayrshare documents 300 requests per 5 minutes per user profile. See Rate limits and errors.
  • Fewer post options. There is no auto schedule, auto repost, auto hashtag, link shortening, idempotency key, or post validation call. First comments are text only.
  • Times and drafts. Past times are refused, and a post without a time is a draft.
  • Fewer webhook events. There are no account, comment, or message events. Failed deliveries are retried twice within seconds, not over hours.
  • File size. The largest file OmniSocials takes is 1 GB.
  • Error shape. Ayrshare errors carry status: "error" and an errors array. OmniSocials errors nest under error, with code, message, and optional details. Branch on error.code.
  • Fewer channels. Reddit and Snapchat are not live yet, and YouTube is Shorts only.
  • No test mode. Neither API documents one. On OmniSocials, use drafts or a workspace with test accounts.
  • What OmniSocials adds. Mastodon, a LinkedIn profile and page in one workspace, a Social inbox with a next-unanswered queue and comment hiding, approval workflow webhooks, alt text per image, PDF to carousel, hashtag sets, Instagram comment-to-DM automations, and a hosted MCP server with OAuth sign-in.

Migration steps

  1. Create an OmniSocials account. Add one workspace for each Ayrshare user profile.
  2. Connect each social account in the dashboard, under Settings → Organisation → Workspaces. Connect the LinkedIn profile, the LinkedIn page, or both.
  3. Create one API key per workspace under Settings → API. Start with posts:write, posts:read, media:write, accounts:read, and webhooks:manage.
  4. Replace each profile key in your database with that workspace's OmniSocials key. Remove the Profile-Key and X OAuth headers.
  5. Change the base URL. Rename the post fields with the field mapping table, and rename twitter to x and gmb to google_business.
  6. Add publish_now: true wherever you posted without scheduleDate. Without it, the post is saved as a draft.
  7. Register your webhooks with POST /webhooks. Swap the signature check and map the actions to events.
  8. Recreate the posts that are still scheduled in Ayrshare with schedule_at. Then cancel them in Ayrshare with DELETE /post, so nothing publishes twice.
  9. If you use the social-media-api npm package or the social-post-api Python package, switch to @omnisocials/sdk or omnisocials. See SDKs.
  10. Test with drafts first, since there is no test mode. Then publish one post with publish_now: true and check published_urls on GET /posts/{id}.

Ayrshare publishes a post without scheduleDate right away. OmniSocials saves it as a draft. Step 6 is the change most likely to be missed.

Last modified on October 21, 2026
MigrateFrom Zernio
On this page
  • Concepts
  • Authentication
  • Endpoint mapping
  • Create a post
  • Field mapping
  • Media and scheduling
  • Webhooks
  • Platform coverage
  • What is different
  • Migration steps