# xpost help

Questions not answered here go to support@xpost.to — a person reads it.

## Getting started

Connecting your accounts, hiding one you don't post to, and keeping clients apart.

Page: /help/getting-started

### Which platforms can I post to?

Link: /help/getting-started#platforms

Nine: X, Bluesky, Threads, Instagram, Facebook, LinkedIn, TikTok, YouTube, Pinterest.

You connect them under [Accounts](/app/accounts). One post can go to as many of them at once as you like — each account gets its own delivery and its own receipt, so one platform failing never takes the others down with it.

### How do I connect an account?

Link: /help/getting-started#connect

[Accounts](/app/accounts) → pick a platform → sign in through that platform's own login screen, in a popup. xpost never sees your password, and the access token it gets back is encrypted before it's stored.

If the popup closes without connecting, it's almost always the platform's sign-in that was refused — try again in a window where you're already logged into that platform.

You can disconnect any account at any time. That removes the credential immediately; posts already published stay published.

### Can I take an account out of the composer without disconnecting it?

Link: /help/getting-started#hide-account

Yes — the eye icon on the account's row hides it. It drops out of the composer's To picker and the row dims, while the connection, past receipts and metrics all stay exactly as they were.

One thing to know: hiding is a tidiness setting, not a lock. A post that was already scheduled to that account, or an API call that names it, still goes out. If you want it to stop posting, disconnect it.

### Can I keep separate brands or clients apart?

Link: /help/getting-started#projects

Yes. Each project has its own accounts, posts, queue and guardrails, and you switch between them at the top of the sidebar. One subscription covers every project you own — you're billed on connected accounts, not on projects.

## Scheduling and posting

Picking a time, moving a post you already scheduled, and why one is waiting for approval.

Page: /help/scheduling

### How do I choose when a post goes out?

Link: /help/scheduling#when

The composer gives you three: Now, Queue (the next free slot in your posting schedule, shown on the button so it isn't a blind choice), and Pick a time.

The queue starts at 11:00 and 17:00 every day. Change the slots under [Project settings → Queue](/app/project?tab=posting), where you can also add a few minutes of random jitter so your posts don't land on the same minute forever.

### How do I move a post I already scheduled?

Link: /help/scheduling#reschedule

Drag it on the [calendar](/app/posts?view=calendar). In month view, dropping it on another day keeps its time of day; in week view you're dropping it on a specific hour. Hovering an empty cell also gives you a + Post shortcut that opens the composer with that slot filled in.

You can move anything that hasn't gone out yet — scheduled, waiting for approval, or a draft. You can't schedule into the past.

### How close to the scheduled minute does it actually publish?

Link: /help/scheduling#timing-accuracy

xpost looks for due posts every minute, so a post normally leaves within about a minute of its time.

After that it's the platform's clock, not ours. Some platforms accept a post immediately and publish it a moment later — those sit as in flight on [Receipts](/app/receipts) until the platform confirms, which is the receipt turning green rather than us guessing.

### Why is my post sitting in Approvals?

Link: /help/scheduling#approval

Because an AI agent wrote it and the project is in copilot mode — the whole point of it. Anything created through the API or an MCP connector with an agent key waits for a human before it can publish.

Posts you write yourself are never held, and drafts are never held. If you'd rather your agent publish unsupervised, switch the project to autopilot under [Project settings → Agent](/app/agent).

## When a post doesn't go out

Guardrail blocks, expired sign-ins, failed and partial deliveries — and what fixes each.

Page: /help/blocked-and-failed

### My post was blocked before it was even scheduled

Link: /help/blocked-and-failed#guardrail-blocked

A guardrail stopped it, and the message names the exact rule it hit. Guardrails are yours — banned words, a link policy, a daily post cap, brand tone, banned topics — and you edit them on the [Guardrails](/app/guardrails) page, which also lists the last few blocks.

Guardrails read everything that would go out: the main caption, any per-platform or per-account override, a first comment on X or Instagram, and every tweet in a thread. That's deliberate, so an override can't smuggle text past a rule you set.

Fix the wording and submit again. Nothing is lost, and nothing was published.

### Why won't it let me post more to Instagram or TikTok today?

Link: /help/blocked-and-failed#platform-caps

Those two platforms cap how much one account may publish in a day, so xpost throttles before they do: 100 posts per Instagram account and 15 per TikTok account in any rolling 24 hours. These aren't settings — they're the platforms' rules.

If a post was already scheduled when the cap filled up, it isn't failed. It waits and retries every few minutes until the window frees, without burning a retry.

### A post failed. What now?

Link: /help/blocked-and-failed#post-failed

Open [Receipts](/app/receipts). There's one row per account with the platform's own error text — not a generic 'something went wrong'.

xpost tries three times, roughly a minute apart, before it calls a delivery failed. Retrying by hand before that is wasted effort.

The two common causes read differently: sign-in expired means reconnect the account (see below) and post again; anything else is usually the platform rejecting the content — a video too long, a missing image, a caption over the limit. [What each platform accepts](/help/limits) covers most of those.

### It says the post was 'partial'

Link: /help/blocked-and-failed#partial

Some accounts got it, some didn't. Every account is delivered to independently, so a broken connection on one platform doesn't hold up the rest.

Receipts show you which ones landed and which didn't. Fix whatever the failed row says, then repost to just that account — the successful ones stay put and won't be duplicated.

### An account says its sign-in expired

Link: /help/blocked-and-failed#reconnect

Platforms expire their access sooner or later, usually after a password change or a permissions change on their side. xpost checks every connected account on a schedule rather than waiting for a post to fail, so you normally see this before it costs you a post: a red dot on Accounts in the sidebar and a red panel on the account's row explaining what broke.

The fix is to reconnect that account on [Accounts](/app/accounts) — same button you connected it with. Just above the account list is a line saying when the connections were last checked, with a Check now beside it if you want to confirm straight away instead of waiting for the next automatic check.

Where a platform tells us in advance, you get the warning early: when an account's access has a known end date, we try to renew it quietly, and if we can't we email you about three days out — once, not every day — so you can reconnect before anything scheduled misses. Those emails are the An account needs reconnecting switch in [Notifications](/app/settings).

## What each platform accepts

Caption lengths, images per post, video length and file size, network by network.

Page: /help/limits

### How long can a caption be?

Link: /help/limits#caption-limits

The composer counts against each targeted platform live and warns you before you send, so you rarely need this table — but here it is.

X is the odd one out: it wraps every link in its own shortener, so any URL costs exactly 23 characters no matter how long it looks. The counter already knows that.

| Platform | Caption characters |
| --- | --- |
| X | 280 |
| Bluesky | 300 |
| Threads | 500 |
| Pinterest | 800 |
| Instagram | 2200 |
| TikTok | 2200 |
| LinkedIn | 3000 |
| Facebook | 5000 |
| YouTube | 5000 |

### Do stories need a caption?

Link: /help/limits#story-captions

No — a story has no caption. Neither Instagram nor Facebook has anywhere to print one on a story, so if you post one anyway the text is thrown away and nobody sees it.

So a post that's only going to stories can be sent with the caption box empty: xpost stops asking for one, and the counter says so. Add a feed post or a reel to the same send and the caption is needed again — those two do print it.

If you want words on a story, they have to be in the image or video itself.

### How many images can one post carry?

Link: /help/limits#media-limits

Every platform publishes a different number of them, and the extras are dropped — quietly, by the platform, with no error. xpost cuts the list to the real limit before sending so what you see in the preview is what gets published.

Pinterest and YouTube take one. If you attach a three-image carousel and target Pinterest, you get a single pin of the first image. The composer flags this on the platform's row, but it surprises people, so: check the preview before you send.

The order you arrange them in the composer is the order they publish in — so the one you want kept is the first one.

Facebook won't take photos and a video in the same post — that's Meta's rule, and its own composer refuses it too. Attach both and xpost publishes the photos to Facebook and leaves the video out, saying so on the platform's row; everywhere else still gets all of it. To put the video on Facebook as well, send it as its own post.

| Platform | Images per post |
| --- | --- |
| Pinterest | 1 |
| YouTube | 1 |
| Bluesky | 4 |
| X | 4 |
| LinkedIn | 9 |
| Facebook | 10 |
| Instagram | 10 |
| Threads | 10 |
| TikTok | 35 |

### Can I post a picture with no caption?

Link: /help/limits#caption-optional-x

On X, Instagram and LinkedIn, yes — a picture on its own is a normal post on all three, and none of them asks for words to go with it. Leave the caption box empty, attach the media, and the Post button stays live.

The caption tools stay where they are, because all three *do* print a caption if you write one. Nothing is asking you to — they're just still there if you want them.

Everywhere else still needs one. Bluesky, Facebook, Threads, TikTok and Pinterest keep asking, and YouTube needs at least a title or your video publishes as "Untitled". Some of those probably would accept an empty caption; they stay on the strict side until each one has been tried for real, because the alternative is a post that fails after we told you it would work.

Sending to several places at once? The caption is shared across all of them, so one destination that needs words brings the requirement back for the whole post.

### Which platforms won't take a text-only post?

Link: /help/limits#media-required

These four need something attached: Instagram, TikTok, YouTube, Pinterest. YouTube specifically needs a video.

xpost tells you at the composer rather than letting it fail at delivery time.

### What files can I upload?

Link: /help/limits#file-limits

Images and video, up to 100 MB each.

Video length is capped differently everywhere — X takes about 140 seconds, Bluesky 3 minutes, Instagram 15 minutes, TikTok 10. Pinterest is the one with a floor as well as a ceiling: 4 seconds to 5 minutes, and it refuses a shorter clip without saying why. The media tray checks the length as you upload and warns you then, rather than minutes later when the delivery fails.

Stories and reels have their own, shorter caps — the placement you pick decides which applies. An Instagram story stops at 60 seconds where a feed video runs to 15 minutes, and a Facebook reel stops at 90 seconds where a Facebook feed video has no practical limit at all. Both refuse anything under 3 seconds.

## Plans and billing

What the plans cost, how the trial works, and changing or cancelling yours.

Page: /help/billing

### What do the plans cost?

Link: /help/billing#pricing

You're billed on connected accounts. Posts, projects, teammates, the API and the MCP connector are included everywhere — the tiers genuinely differ by account count alone.

| Plan | Price and accounts |
| --- | --- |
| Creator | $19/month · up to 15 accounts |
| Agency | $49/month · up to 50 accounts |
| Business | $99/month · unlimited accounts |

### How does the trial work?

Link: /help/billing#trial

7 days, card required to start.

You can connect up to 5 accounts and write and save drafts without paying anything — the trial starts when you first click Post. That's on purpose: you should be able to see your own handles and your own preview before deciding.

### How do I change or cancel my plan?

Link: /help/billing#change-plan

[Account → Billing](/app/settings?tab=billing) → Manage billing, which opens Stripe's own portal. Change tier, update the card, or cancel there.

Cancelling stops posting; it doesn't delete anything. Your posts, receipts and settings are still there if you come back.

## Agents, API and MCP

Letting an AI agent post for you, and the three things that stop it embarrassing you.

Page: /help/agents

### How do I let an AI agent post for me?

Link: /help/agents#api

Create an API key with the agent role under [Project settings → Agent](/app/agent) — that tab also has ready-to-paste connect snippets for Claude, Cursor and plain REST. Both the hosted MCP connector and the REST API are included in every plan.

The [developer docs](/docs) have the whole thing — a quickstart, all the MCP tools, and the REST reference.

### What stops an agent posting something embarrassing?

Link: /help/agents#agent-safety

Three things, and they're the reason xpost exists. Guardrails run over every draft an agent writes, exactly as they do for yours. In copilot mode the agent's post lands in [Approvals](/app/approvals) and waits for you. And an agent key can never approve anything, including its own work.

An agent can also check a draft against your guardrails before creating a post, so a well-behaved one fixes its own wording rather than filling your queue with rejects.

## Your data

What we store, what we never see, and what deleting something actually deletes.

Page: /help/your-data

### How do I delete my data?

Link: /help/your-data#delete

Disconnecting an account removes its stored credential immediately. Deleting a project removes its posts, receipts, metrics, guardrails and audit trail with it.

To delete your whole user account, email support@xpost.to and it's done — you don't have to argue with anyone about it.

One thing worth being clear about: deleting something in xpost never deletes it from the social platform. A published post stays published until you remove it there.

### What do you actually store?

Link: /help/your-data#privacy

The short version: your posts and their delivery records, the encrypted tokens the platforms give us so we can post on your behalf, and the engagement numbers we read back. Not your social passwords — we never see them.

The [privacy policy](/privacy) is the long version, and it's written to be read rather than survived.
