Postlia Reports

Social media publishing errors, decoded

When a scheduled post fails, the platform usually tells you why — in one cryptic line. This page is the decoder: the exact strings LinkedIn, Instagram, TikTok, Bluesky, Mastodon, Pinterest and YouTube return when publishing fails, what each one actually means, and what fixes it. No invented errors: every entry is either surfaced verbatim by Postlia's own publisher or a widely documented platform response, and each is labelled with which.

The companion to Delivery Receipts.

Every post published through Postlia gets a Delivery Receipt showing the platform's real response, verbatim — no “something went wrong”. This page is the same honesty applied as a reference: look up the string, get the fix. Part of the Postlia Reports family of open, source-honest pages.

The 11 failure codes, from Postlia's own taxonomy

Postlia classifies every raw platform error into one of these codes — rendered here directly from the production rule set, so this table cannot drift from what the app actually does. When no rule matches, the code is unknown and the platform's own words are shown untouched: an unrecognised error is never given an invented meaning.

CodeWhat it meansUsual outcome
token_expired

The connection to this account expired, so we couldn't post.

Fix: Reconnect the account in Settings, then retry the post.

terminal — needs a fix
permission_missing

This account hasn't granted Postlia the permission needed to post.

Fix: Reconnect the account and accept all requested permissions.

terminal — needs a fix
rate_limited

The platform rate-limited us.

Fix: none needed from you — see outcome.

transient — auto-retried
duplicate_content

The platform rejected this as a duplicate of something already posted.

Fix: Edit the text so it differs from your recent posts, then retry.

terminal — needs a fix
media_processing

The platform is still processing the media. We'll try again automatically.

Fix: none needed from you — see outcome.

transient — auto-retried
not_confirmed

The platform accepted this post but we could never confirm it went live.

Fix: Check the account on the platform before reposting — the post may already be live. If the account is disconnected, reconnect it in Settings.

terminal — needs a fix
not_connected

No connected account was available for this platform when we tried to post.

Fix: Connect the account in Settings, then retry the post.

terminal — needs a fix
media_rejected

The platform rejected the attached media.

Fix: Check the file's size, format and aspect ratio for this platform, then retry.

terminal — needs a fix
account_restricted

The platform has restricted this account, so it won't accept posts.

Fix: Check the account's status in the platform's own app.

terminal — needs a fix
validation

The platform rejected the post's content as invalid.

Fix: Check the text and any links against this platform's limits, then retry.

terminal — needs a fix
unknown

No rule matched, so the platform's raw message is shown verbatim.

Fix:read the platform's own words — and if they appear on this page, the entry has the answer.

depends on message

“Usual outcome” because transient-vs-terminal is really decided per message, not per code: any error whose raw text signals a server fault, network timeout, rate limit, or media-still-processing state is retried automatically (up to three more attempts with 5, 15, then 45-minute backoff). Everything else is terminal — an expired token or a missing permission will not heal by retrying.

The errors, platform by platform

Each entry shows the exact string, then the plain-English meaning and the fix. Surfaced by Postlia means our publisher code produces or passes through exactly this text; commonly reportedmeans it's a documented, widely observed platform response. An ellipsis (…) marks a variable part — a status code or the platform's own detail.

Any platform

Surfaced by Postlia
Account not connected

When the scheduled time arrived, no connected account existed for this platform — usually because it was disconnected (or its connection was removed) after the post was scheduled.

The fix: Connect the account in Settings, then retry the post.

Surfaced by Postlia
Selected account is no longer connected

The post targeted one specific account, and that exact account record is gone. Disconnecting and reconnecting creates a new account record, so older scheduled posts can still point at the old one.

The fix: Edit the post, select the current account for that platform, and reschedule.

LinkedIn

Surfaced by Postlia
LinkedIn session expired — reconnect your account.

The stored access token expired and no refresh token was available to renew it. LinkedIn tokens have a fixed lifetime and eventually require a fresh login.

The fix: Reconnect the LinkedIn account in Settings, then retry the post.

Surfaced by Postlia
LinkedIn token refresh failed (…): …

The refresh token itself was rejected — typically because it was revoked (password change, security review, manually removed app access) or has aged out entirely.

The fix: Reconnect the LinkedIn account. Nothing about the post needs to change.

Surfaced by Postlia
LinkedIn post failed (422)

LinkedIn rejected the post as unprocessable without giving a detailed reason. In practice this is usually a content problem — most often reposting text identical to a recent post.

The fix: Change the wording so it differs from your recent posts, then retry.

Commonly reported
…duplicate…

Commonly reported: LinkedIn's API refuses a post whose text is identical to something the account recently published, and the returned message mentions that the content is a duplicate.

The fix: Edit the text — even a small change is enough — and retry.

Surfaced by Postlia
LinkedIn image upload failed (…)

The image bytes were rejected during upload to LinkedIn's media endpoint, before the post itself was ever created. The status code in parentheses is LinkedIn's own response.

The fix: Check the image's size and format (JPEG/PNG are safest), then retry the post.

Instagram

Surfaced by Postliatransient — auto-retried
Instagram media still processing — please try publishing again in a moment

Instagram ingests media asynchronously: we create a container, Instagram processes it, then we publish. This means processing took longer than our polling window — not that anything is wrong with the file.

The fix: Nothing — this one is retried automatically. If it persists across retries, try a smaller file.

Surfaced by Postlia
Instagram could not process the media

Instagram's processing of the media container finished in an error state. The usual causes are an unsupported format, an aspect ratio outside Instagram's accepted range, or a file that is too large.

The fix: Re-export the image as JPEG within Instagram's aspect-ratio limits (roughly 4:5 portrait to 1.91:1 landscape), then retry.

Commonly reportedtransient — auto-retried
Media ID is not available

Commonly reported Graph API response when publish is called before the media container has finished processing. It reads like a missing-file error but simply means “not ready yet”.

The fix: Nothing — Postlia treats this as transient and retries automatically.

Surfaced by Postlia
No Facebook Pages granted — link an Instagram Business account to a Page and grant it during login

Instagram's publishing API only works through a Facebook Page linked to an Instagram Business or Creator account. During login, no Page was granted to Postlia, so there is no publishing path.

The fix: Switch the Instagram account to Business/Creator, link it to a Facebook Page, then reconnect and grant the Page when asked.

Surfaced by Postlia
No Instagram Business/Creator account linked to any granted Facebook Page

Pages were granted, but none of them has an Instagram Business or Creator account attached. Personal Instagram accounts cannot be published to via the API — that's Instagram's rule, not a connection bug.

The fix: In Instagram, convert the account to Business or Creator and link it to the Facebook Page you granted, then reconnect.

Commonly reported
Error validating access token: Session has expired…

Commonly reported Meta API response when the stored access token has lapsed — long-lived Instagram tokens expire after roughly 60 days without renewal, and immediately after a password change.

The fix: Reconnect the Instagram account in Settings, then retry the post.

TikTok

Surfaced by Postlia
TikTok session expired — reconnect your account.

The stored access token expired and no refresh token was available to renew it, so the publish could not even be attempted.

The fix: Reconnect the TikTok account in Settings, then retry the post.

Surfaced by Postlia
TikTok rejected the post: …

TikTok accepted the upload but its asynchronous review marked the publish as failed. The part after the colon is TikTok's own fail reason, passed through verbatim.

The fix: The fix depends on the reason TikTok gives — the two most common ones are listed below.

Commonly reported
spam_risk_too_many_posts

A documented TikTok Content Posting API fail reason: the account has hit TikTok's own posting-frequency cap and further API posts are temporarily refused as a spam precaution.

The fix: Wait — typically a few hours — and space out scheduled TikTok posts.

Commonly reported
unaudited_client_can_only_post_to_private_accounts

A documented TikTok fail reason: the posting app hasn't completed TikTok's audit, so TikTok only allows posts with private (self-only) visibility through it. This is about the app's audit status, not your content.

The fix: Post with private visibility, or publish this video from the TikTok app directly.

Surfaced by Postlia
TikTok never confirmed this video within 24 hours — treat it as not published

TikTok accepted the video and returned a publish ID, but a full day of status checks never saw it go live (or fail). Rather than poll forever, Postlia closes it out honestly as unconfirmed.

The fix: Check the TikTok account before reposting — the video may actually be live, and reposting would duplicate it.

Surfaced by Postlia
TikTok account no longer connected — could not confirm this video

The video was submitted, but the account was disconnected before Postlia could confirm whether it went live. The submission may still have succeeded on TikTok's side.

The fix: Check the account on TikTok first; if the video isn't there, reconnect in Settings and post again.

Bluesky

Commonly reported
Invalid identifier or password

Bluesky's standard sign-in error, commonly returned when the handle is wrong or — most often for schedulers — when the app password was revoked or retyped incorrectly. App passwords are separate from the main account password.

The fix: Generate a fresh app password in Bluesky (Settings → App Passwords) and reconnect the account with it.

Commonly reported
Token has expired

Commonly reported AT Protocol response when a session token has lapsed mid-request. Postlia creates fresh sessions from your app password, so this usually clears itself on the next attempt.

The fix: Retry the post. If it keeps failing, reconnect with a new app password.

Surfaced by Postlia
Bluesky video processing timed out — try a shorter video

The video was uploaded to Bluesky's video service, but transcoding didn't finish within our polling window. Longer or higher-bitrate files take longer to process.

The fix: Try a shorter or smaller video, or retry — processing time varies with load.

Surfaced by Postlia
Bluesky blob upload failed (…)

The image bytes were refused before the post was created. Bluesky enforces a per-image size cap, so an oversized file is the usual cause; the status code in parentheses is Bluesky's response.

The fix: Compress the image (Bluesky's per-image limit is small — well under most camera originals) and retry.

Mastodon

Commonly reported
The access token is invalid

Mastodon's standard 401 response when a token was revoked — typically by removing the app under Account → Authorized apps, or by the instance admin. Mastodon tokens don't expire on a schedule; invalid almost always means revoked.

The fix: Reconnect the Mastodon account in Settings, then retry the post.

Surfaced by Postliatransient — auto-retried
Mastodon media is still processing — try again shortly

The instance accepted the upload (a 202 response) but was still transcoding it when we tried to attach it to the post. Smaller instances can take a while to process video.

The fix: Nothing — this one is retried automatically.

Surfaced by Postlia
Mastodon post failed (422): …

The instance rejected the post as invalid, and the part after the colon is the server's own validation message. The most common cause is exceeding the instance's character limit (500 by default, though instances can raise it).

The fix: Shorten the post below your instance's limit — or read the server's message after the colon for the specific rule.

Surfaced by Postlia
Mastodon posts support text and a single image only

Postlia's own guard: this post had media Postlia doesn't yet send to Mastodon (for example a multi-image carousel). It never reached the instance.

The fix: Keep one image on the Mastodon version of the post, or drop the extra media for that platform.

Pinterest

Surfaced by Postlia
Pinterest session expired — reconnect your account.

The stored access token expired and no refresh token was available to renew it. Pinterest rotates refresh tokens, so a lost or revoked one means a fresh login is required.

The fix: Reconnect the Pinterest account in Settings, then retry the post.

Surfaced by Postlia
Pinterest createPin failed: … …

Pinterest refused to create the pin; the tail is Pinterest's own response body. The usual causes are a board that was deleted or made unavailable, or an image Pinterest couldn't fetch.

The fix: Confirm the board still exists and the image loads in a browser, then retry — or pick a different board.

Surfaced by Postlia
Missing Pinterest board for this scheduled post

Every pin must target a board, and this scheduled post was saved without one — Postlia fails the post rather than guess a board for you.

The fix: Edit the post, choose a Pinterest board, and reschedule.

Surfaced by Postlia
Pinterest posts require an image

Pinterest is image-first: the API cannot create a text-only pin, so Postlia stops the post before sending it.

The fix: Add an image to the post's Pinterest version, then retry.

YouTube

Surfaced by Postlia
YouTube session expired — reconnect your account.

The stored Google access token expired and no refresh token was available — most commonly because the app's access was removed in the Google account's security settings.

The fix: Reconnect the YouTube account in Settings, then retry the post.

Surfaced by Postlia
YouTube upload failed: … …

The video bytes were rejected during the resumable upload; the tail is Google's own status and response body, which names the specific reason.

The fix: Read the reason in the message — the two most common ones are listed below.

Commonly reported
uploadLimitExceeded

A documented YouTube Data API error reason: the channel has exceeded the number of videos it may upload — a rolling per-channel cap that is stricter for new or unverified channels.

The fix: Wait roughly 24 hours and retry; verifying the channel raises the ceiling.

Commonly reported
quotaExceeded

A documented YouTube Data API error reason: the API project's daily quota is used up. Video uploads are expensive against this quota, so it is the most common hard stop for scheduled Shorts.

The fix: Retry the next day — the quota resets daily. The video and account are both fine.

Surfaced by Postlia
Missing YouTube title for this scheduled post

YouTube requires every video to have a title, and this scheduled post was saved without one — Postlia fails the post rather than invent a title.

The fix: Edit the post, add a title for the YouTube version, and reschedule.

Honest FAQ

Are these error messages specific to Postlia?

No. Apart from a few clearly-labelled Postlia guard messages (like “Pinterest posts require an image”), these are the platforms' own responses. Any scheduling tool talking to the same APIs receives the same errors — Postlia's Delivery Receipt just shows them to you verbatim instead of hiding them.

Why did my post fail with no error message at all?

Some platforms publish asynchronously: they accept the post, return an ID, and confirm (or fail) later. If that confirmation never arrives, there is genuinely no platform error to show — which is why Postlia records it explicitly as unconfirmed (“never confirmed”) instead of guessing, and advises checking the account before reposting.

Which failures are retried automatically?

Transient ones: rate limits (429), server errors (5xx), network timeouts, and “media still processing” responses. Postlia retries these up to three more times with 5, 15, then 45-minute backoff. Expired tokens, missing permissions, validation and duplicate-content errors are terminal — they won't heal on their own, so retrying without fixing the cause would just fail again.

Does a publishing error mean the platform is unreliable?

Usually the opposite. Most of the errors on this page are platform protections working as designed — expired sessions, spam and frequency caps, content review, permission checks. They're inconvenient in the moment, but they're deliberate rules, not outages.

How do I see the exact error for my own posts?

Every post published through Postlia gets a Delivery Receipt: the platform's real response, verbatim, per account — plus this taxonomy's plain-English translation next to it. If a post fails, the receipt shows you the same string you'd look up on this page.

See the real error on your own posts

Postlia's Delivery Receipt shows the platform's actual response for every post — success or failure, verbatim — with this page's plain-English translation beside it. If something on this page went stale or a string is missing, tell us: support@postlia.com.