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
    OverviewKnown issuesFacebookInstagramThreadsLinkedInYouTubeTikTokPinterestBlueskyMastodonX (Twitter)Google BusinessTelegram
Integrations
Migrate
Plans and billing
GlossaryChangelogAPI reference
Platforms

Known issues and platform limits

The platform behavior that surprises developers most often, per channel. Every item gives the symptom as you see it, the cause, and what to do, with a link to the full section.

A failed channel's message is in errors.<channel> on GET /posts/:id and in data.targets[].error on a webhook. The quotes below are the start of those messages. After you fix the cause, publish the failed channels again with POST /posts/:id/retry (see Retries and duplicate posts).

Every channel

Posts fail with "connection expired"

  • You see: the account has needs_reconnect: true in GET /accounts, and posts to it fail with a message about an expired connection.
  • Cause: the platform token was revoked or expired, for example after a password change or a removed app permission.
  • What to do: reconnect the account in the dashboard under Settings → Organisation → Workspaces, then retry the post. The API cannot reconnect accounts. See Connecting accounts.

A video uploads fine but fails to publish

  • You see: POST /media/upload succeeds, and the post fails or is refused later.
  • Cause: platform size and duration limits are checked when a post is scheduled or published, not at upload.
  • What to do: run POST /media/check first; it returns per-platform warnings for your connected channels. See Check compatibility before posting.

The platform refuses a duplicate

  • You see: "Facebook rejected this as a duplicate", "LinkedIn rejected this post as a duplicate: identical content already exists on your profile", or "This is a duplicate of a tweet you already posted."
  • Cause: Facebook, LinkedIn and X block identical content that is already on the account, also when it was posted outside OmniSocials.
  • What to do: change the text before you try again; a retry with the same text fails the same way. See Retries and duplicate posts.

Instagram

Reels with music fail after a Facebook reconnect

  • You see: "Instagram music needs the Facebook Page that is linked to this Instagram account, and the Facebook login connected to this workspace no longer gives OmniSocials access to that Instagram account."
  • Cause: a Reel with licensed music is published through the workspace's Facebook login. Facebook's permission window replaces the whole grant of a login, so when the same Facebook login is reconnected in another workspace and this Instagram account is not selected there, this workspace loses access to it.
  • What to do: reconnect Facebook in this workspace and select this Page and this Instagram account in Facebook's window. If the same login is connected in other workspaces, select their Pages and Instagram accounts too. Then retry the Reel. See Instagram reel music.

Reels with music fail without a Facebook connection

  • You see: "Instagram music needs a connected Facebook account." GET /audio/search returns needsFacebook: true.
  • Cause: music needs a Facebook account in the workspace whose Page is linked to the same Instagram account.
  • What to do: connect that Facebook Page to the workspace, or publish the Reel without instagram.audio_id. See Instagram reel music.

"Licensed music isn't available for this workspace yet"

  • You see: "Licensed music isn't available for this workspace yet: the Facebook account connected to it hasn't been granted Instagram publishing permission by Meta."
  • Cause: Meta has not given the connected Facebook account the Instagram publishing permission that music needs. Reconnecting does not change it.
  • What to do: publish the Reel without licensed music. See Instagram reel music.

The account is restricted from posting

  • You see: "Instagram has temporarily restricted this account from posting (anti-abuse protection). Reconnecting won't help. This usually clears within 24 to 48 hours."
  • Cause: Instagram's own anti-abuse protection on the account.
  • What to do: post less often and retry later. Do not reconnect.

Daily posting limit reached

  • You see: "You've reached Instagram's daily posting limit for this account."
  • Cause: Instagram allows 100 API publishes per account per 24 hours, and every slide of a multi-slide story counts as one.
  • What to do: wait a few hours, then retry. See Multi-slide stories.

Trial Reel refused

  • You see: "Trial Reels need a minimum follower count Instagram doesn't think this account has. Turn off Trial Reel and try again."
  • Cause: Instagram enables Trial Reels per account, roughly from 1,000 followers.
  • What to do: publish without instagram.is_trial_reel. See Instagram Trial Reels.

Too many hashtags

  • You see: 400 hashtag_limit_exceeded when you apply a hashtag set, or Instagram's "Too many hashtags".
  • Cause: Instagram rejects a caption or comment with more than 5 hashtags.
  • What to do: keep each caption and first comment at 5 hashtags or fewer. See Hashtag sets.

A tall feed image comes back cropped

  • You see: an image_fit entry in the response warnings with "action": "cropped".
  • Cause: Instagram shows feed images between 4:5 and 1.91:1, so OmniSocials crops a taller image to 4:5 around the subject by default. Feed images outside 9:16 to 1.91:1 are refused with 400 validation_error.
  • What to do: to send the original, pass media_fit: { "instagram": "keep" }. See Image fit per channel.

A DM reply is refused after 24 hours

  • You see: 422 outside_messaging_window on POST /inbox/conversations/:id/reply, and reply_window.open: false on GET /inbox/next.
  • Cause: Meta allows replies to Instagram and Facebook DMs only within 24 hours of the person's last message.
  • What to do: answer from the Instagram or Facebook app (the reply is mirrored into the inbox), or mark the conversation read. Do not retry. See Reply rules.

Hiding a comment returns 502 hide_not_applied

  • You see: 502 hide_not_applied on POST /inbox/messages/:id/hide.
  • Cause: the comment shows under "Comments from Facebook" on a Reel that is also shared to Facebook. It lives on Facebook, and Instagram's hide does not reach it.
  • What to do: hide it in the Instagram or Facebook app. Do not retry. See Hiding a comment.

Comment-to-DM skips some comments

  • You see: automation events with outcome: "skipped" and reason: "window_passed" or "rate_limited".
  • Cause: Instagram allows one private reply per comment, within 7 days of the comment, and OmniSocials sends at most 180 DMs an hour per account.
  • What to do: expect these skips on old comments and busy posts. Every skip is listed in the activity log (GET /automations/:id/events) with its reason. See Instagram rules.

Facebook

A reconnect in one workspace breaks Facebook in another

  • You see: in the other workspace, the Facebook account has needs_reconnect: true and posts fail. Its reauth_reason reads "The Facebook login for this workspace reconnected in another workspace and did not keep the Page ... selected in the Facebook window, so Facebook removed posting access."
  • Cause: Facebook's permission window replaces the whole grant of a login. A Page that is not selected during a reconnect loses access in every workspace that uses the same login.
  • What to do: reconnect Facebook in the affected workspace and select all your Pages in the Facebook window. The same rule can drop an Instagram account; see Reels with music fail after a Facebook reconnect.

Facebook posts have no reach

  • You see: no reach key in Facebook post analytics.
  • Cause: Meta retired Facebook post reach in June 2026, and its replacement metric returns no data.
  • What to do: use views and the click metrics instead, and sum reach only over entries that carry it. See Analytics.

Mixed images and video are refused

  • You see: 400 validation_error when you schedule or publish.
  • Cause: a Facebook post takes photos or one video, not both.
  • What to do: send images only or a single video. See Facebook media requirements.

Messenger replies from the app don't show in the inbox

  • You see: replies sent from Messenger or Business Suite are missing from the inbox thread.
  • Cause: Pages connected before September 6, 2026 lack a webhook field for these replies.
  • What to do: reconnect the Page once under Settings → Organisation → Workspaces. See Replies sent from the native apps.

Scheduled posts go out a few minutes late

  • Cause: Facebook's API does not guarantee delivery timing for scheduled posts.
  • What to do: expect publish times within a few minutes of schedule_at. See Facebook limitations.

LinkedIn

Daily limit for unverified profiles

  • You see: "This LinkedIn profile reached LinkedIn's daily posting limit for profiles that are not verified, so LinkedIn refused this post. The earlier posts of the day went out." It can appear on linkedin and linkedin_page.
  • Cause: LinkedIn gives a member it has not verified a small number of posts per UTC day. It is not the connection and not an OmniSocials quota, so reconnecting does not help.
  • What to do: retry after midnight UTC, verify your identity on your LinkedIn profile, or schedule fewer LinkedIn posts per day. See LinkedIn.

Media upload refused on a company page

  • You see: "LinkedIn refused the media upload for this Page: the connected LinkedIn member is not a Super admin or Content admin of the Page (any more)."
  • Cause: media uploads to a page need a Super admin or Content admin role.
  • What to do: ask a page super admin to check the role, then reconnect the page. See LinkedIn limitations.

The connection expires after 60 days

  • Cause: LinkedIn access tokens last 60 days. OmniSocials renews them when LinkedIn issued a refresh token, up to LinkedIn's one-year refresh limit; otherwise the workspace gets an email 7 days before the expiry.
  • What to do: reconnect the channel when that email arrives. Reconnecting either LinkedIn channel refreshes both. See LinkedIn.

@mentions publish as plain text

  • Cause: the API, the MCP server and the CLI have no mentions field.
  • What to do: add mentions in the OmniSocials web composer. See Mentions.

A poll drops the media

  • Cause: on LinkedIn a poll excludes media and a link share. When a request carries both, the poll takes priority at publish time without an error.
  • What to do: send either a poll or media for each LinkedIn channel. See Polls.

TikTok

The video is published as private

  • You see: a post you sent with PUBLIC_TO_EVERYONE is only visible to the creator.
  • Cause: TikTok decides per creator which privacy levels an account may use. A level the account can't use publishes as SELF_ONLY.
  • What to do: check the account's allowed levels in the TikTok app. See TikTok options.

The first comment fails

  • You see: first_comment_result.status is failed on the TikTok options of the post.
  • Cause: TikTok comments need a second authorization, Enable comments on the TikTok channel card. The video must also be public and allow comments.
  • What to do: press Enable comments under Settings → Organisation → Workspaces. While TikTok has not returned the final video id yet, first_comment_result.pending is true and the comment follows automatically. See Automatic first comment.

Inbox replies return 401 reauth_required

  • Cause: the TikTok comments authorization expired.
  • What to do: press Enable comments on the channel card again. See TikTok comments.

Replies don't show on TikTok right away

  • Cause: TikTok holds fresh comments and replies in spam review for roughly 15 to 20 minutes.
  • What to do: nothing; an accepted reply appears under the video after the review. See Spam review delay.

Watch-depth analytics are missing

  • You see: no average_time_watched, reach or audience keys in TikTok metrics.
  • Cause: these need the comments authorization. Channels that enabled comments before 22 August 2026 also need the insights scopes.
  • What to do: click Unlock analytics permissions on the TikTok channel card. See Watch-depth analytics.

Published videos can't be deleted

  • Cause: TikTok's API has no delete, and DELETE /posts/:id only removes the post from OmniSocials.
  • What to do: remove the video in the TikTok app. See TikTok limitations.

YouTube

"OmniSocials briefly reached its YouTube posting limit for the day"

  • You see: "This didn't go out because OmniSocials briefly reached its YouTube posting limit for the day. This is on our side, not your channel or your video."
  • Cause: YouTube's daily API quota is shared by all OmniSocials customers. It resets at midnight Pacific time.
  • What to do: retry the post with POST /posts/:id/retry later. See YouTube limitations.

"YouTube's upload limit was reached"

  • You see: "YouTube's upload limit was reached. Wait and try again, or space your scheduled YouTube posts further apart."
  • Cause: the channel's own upload limit, set by YouTube.
  • What to do: wait, then retry, and spread your YouTube posts out.

A Short over 3 minutes is refused

  • You see: 400 when you schedule or publish.
  • Cause: OmniSocials publishes Shorts only and caps them at 3 minutes. The file is not converted, so a video that is not 9:16 plays with bars.
  • What to do: trim the video, or send a separate cut for YouTube in per-platform media_urls. See YouTube media requirements.

The upload landed on another channel

  • You see: "We detected that this upload was about to land on a different YouTube channel than the one you connected, and removed it."
  • Cause: the Google account manages several channels, and the upload did not reach the connected one.
  • What to do: disconnect YouTube, reconnect, and pick the right channel in Google's account picker.

YouTube permissions are missing

  • You see: "YouTube is missing required permissions. Reconnect your YouTube account and keep every permission box checked." A new connection is refused for the same reason.
  • Cause: a YouTube permission was unticked on Google's consent screen.
  • What to do: reconnect and leave every YouTube permission ticked. See YouTube.

The custom thumbnail doesn't show

  • Cause: YouTube shows a custom Shorts thumbnail only on channels where it has enabled the feature. Other channels show a frame from the video.
  • What to do: nothing on the API side. See Video covers.

New comments arrive late

  • Cause: YouTube has no comment webhooks, so OmniSocials checks each channel once a day.
  • What to do: expect up to a day before a comment reaches the inbox. See Social Inbox.

X (Twitter)

Link posts use credits

  • You see: a warnings entry with code x_url_post_credits on create, 402 x_credits_insufficient when you schedule or publish, or a failed X target when the balance runs short at publish time.
  • Cause: X bills posts whose text contains an http:// or https:// link at a premium, passed through as 20 credits per tweet with a link. Scheduled link posts reserve their cost until they publish.
  • What to do: top up at app.omnisocials.com/credits and retry. Only the X target fails; other channels publish normally. A bare domain is free. See Link posts use credits.

A post is refused as too long

  • You see: 400 at create, although the text looks short enough.
  • Cause: X weighs characters: every link counts as 23, emoji and CJK characters as 2. The limit is 280, or 25,000 on Basic, Premium and Premium+, and the tier is read when you connect.
  • What to do: shorten the text, or reconnect X after upgrading the account. See Character limits.

"We can't confirm the post went live"

  • You see: "X accepted the request but did not return a post id, so we can't confirm the post went live. Check your X profile before retrying, to avoid a duplicate."
  • What to do: look at the X profile first. Retry only when the post is not there. See Retries and duplicate posts.

The X inbox stopped receiving DMs

  • You see: 402 x_inbox_suspended on replies, and no new X DMs.
  • Cause: the credit balance hit zero, so the X inbox paused itself. DMs sent while paused are not recovered.
  • What to do: top up and switch X DMs on again in the Social Inbox. See X direct messages.

Threads

Threads, inbox or replies need a reconnect

  • You see: thread_parts refused with a 400 that names the reconnect, Threads conversations missing from the inbox, or 401 reauth_required on replies and hides.
  • Cause: accounts connected before the Threads reply permissions were added lack them.
  • What to do: reconnect Threads once under Settings → Organisation → Workspaces. See Posting threads.

Location tags are refused

  • You see: 400 on a post with threads.location_id.
  • Cause: Meta has not approved the location permission for OmniSocials yet.
  • What to do: leave the field out. See Threads limitations.

Too many links

  • You see: 400 before anything publishes.
  • Cause: Threads allows up to 5 unique links per post, and every part of a thread is its own post.
  • What to do: move links to another part. See Posting threads.

Pinterest

Video Pins refused now and then

  • You see: Pinterest refused this video Pin with the message "This site doesn't allow you to save Pins". The Pin has no link, so no website blocked it.
  • Cause: Pinterest sometimes gives this answer for a video Pin without saying why. OmniSocials tries again for about a minute before it reports the failure.
  • What to do: retry the post later. If it fails again, post a different video. See Video pins.

The board is not found

  • You see: "The Pinterest board you selected isn't in your connected Pinterest account for this workspace."
  • Cause: pinterest.board_id is required and must belong to the connected account.
  • What to do: take a board id from the boards array of GET /accounts/:id. See Pinterest options.

Carousel slides at different ratios

  • You see: 400 validation_error with a mismatched_slides array when you schedule or publish.
  • Cause: Pinterest carousel pins need every image at the same aspect ratio. Drafts are not checked.
  • What to do: re-crop the listed slides to match slide 1. See Carousel constraints.

Product tags missing after publishing

  • You see: pinterest.product_tags_result.skipped lists products with a reason such as PIN_NOT_FROM_VERIFIED_DOMAIN.
  • Cause: Pinterest tags only your own public product Pins that link to a website the account claimed. A refused product never fails the post.
  • What to do: check the reason table. See Product tag rules.

Bluesky

Video upload refused

  • You see: "Please verify your email address on Bluesky before uploading videos." or "You have reached your daily video upload limit on Bluesky. Please try again tomorrow."
  • Cause: Bluesky needs a verified email for video uploads and sets a daily video limit per account.
  • What to do: verify the email on bsky.app (Settings, Account), or retry the next day. See Bluesky media requirements.

Mastodon

A post passes validation but the server refuses it

  • Cause: OmniSocials validates media against the mastodon.social defaults, and some servers are stricter. The error then carries the server's own message.
  • What to do: adjust the post to the server's limits. See Mastodon media requirements.

The post doesn't show on other servers yet

  • Cause: federation delays between servers.
  • What to do: wait. A post can reach other servers later, even after a successful publish. See Mastodon limitations.

Google Business

Caption refused for a phone number or link

  • You see: 400 validation_error when you schedule.
  • Cause: Google rejects local posts whose caption holds a phone number, a URL, a bare domain or an email address.
  • What to do: put the phone number on a CALL button and the link on a CTA button. See Caption rules.

No per-post analytics

  • You see: metrics_unavailable: true and a note on Google Business post analytics.
  • Cause: Google discontinued per-post insights.
  • What to do: read location metrics with GET /analytics/accounts. See Google Business limitations.

Old posts disappear from the profile

  • Cause: Google ages local posts out after roughly 6 months. The post record stays in OmniSocials.

Telegram

Posts fail after the bot was removed

  • You see: a failed post whose message says OmniSocials was removed from the Telegram chat, or lost the right to post there. The account shows needs_reconnect: true.
  • Cause: someone removed the bot from the chat or took away its right to post.
  • What to do: add the bot back as an administrator with Post messages, then reconnect the chat in OmniSocials. See When the connection breaks.

The post was not pinned

  • You see: telegram.result.pinned: false with pin_error: "no_right".
  • Cause: the bot lacks the Edit messages right in a channel, or Pin messages in a group. The post itself is still sent.
  • What to do: give the bot that right. See Pinning.

A post can't be removed from Telegram

  • Cause: Telegram lets a bot remove a message only in the first 48 hours.
  • What to do: after 48 hours, remove it in Telegram yourself. See Removing a post.
Last modified on October 21, 2026
OverviewFacebook
On this page
  • Every channel
    • Posts fail with "connection expired"
    • A video uploads fine but fails to publish
    • The platform refuses a duplicate
  • Instagram
    • Reels with music fail after a Facebook reconnect
    • Reels with music fail without a Facebook connection
    • "Licensed music isn't available for this workspace yet"
    • The account is restricted from posting
    • Daily posting limit reached
    • Trial Reel refused
    • Too many hashtags
    • A tall feed image comes back cropped
    • A DM reply is refused after 24 hours
    • Hiding a comment returns 502 hide_not_applied
    • Comment-to-DM skips some comments
  • Facebook
    • A reconnect in one workspace breaks Facebook in another
    • Facebook posts have no reach
    • Mixed images and video are refused
    • Messenger replies from the app don't show in the inbox
    • Scheduled posts go out a few minutes late
  • LinkedIn
    • Daily limit for unverified profiles
    • Media upload refused on a company page
    • The connection expires after 60 days
    • @mentions publish as plain text
    • A poll drops the media
  • TikTok
    • The video is published as private
    • The first comment fails
    • Inbox replies return 401 reauth_required
    • Replies don't show on TikTok right away
    • Watch-depth analytics are missing
    • Published videos can't be deleted
  • YouTube
    • "OmniSocials briefly reached its YouTube posting limit for the day"
    • "YouTube's upload limit was reached"
    • A Short over 3 minutes is refused
    • The upload landed on another channel
    • YouTube permissions are missing
    • The custom thumbnail doesn't show
    • New comments arrive late
  • X (Twitter)
    • Link posts use credits
    • A post is refused as too long
    • "We can't confirm the post went live"
    • The X inbox stopped receiving DMs
  • Threads
    • Threads, inbox or replies need a reconnect
    • Location tags are refused
    • Too many links
  • Pinterest
    • Video Pins refused now and then
    • The board is not found
    • Carousel slides at different ratios
    • Product tags missing after publishing
  • Bluesky
    • Video upload refused
  • Mastodon
    • A post passes validation but the server refuses it
    • The post doesn't show on other servers yet
  • Google Business
    • Caption refused for a phone number or link
    • No per-post analytics
    • Old posts disappear from the profile
  • Telegram
    • Posts fail after the bot was removed
    • The post was not pinned
    • A post can't be removed from Telegram