Works, with rewrites

Cross-posting Mastodon to X: what actually breaks

You can, but not by copying the text across: 4 things change between Mastodon and X, starting with you lose 220 characters. Below is exactly what breaks and what to do instead.

Side by side

MastodonX
Characters500280
Mediaoptionaloptional
Hashtags2-4 hashtags in CamelCase (#SocialMedia, not #socialmedia) for screen readers1-2 hashtags, zero is fine
Links in bodyfinesuppress reach
Needs platform approvalnoyes

What changes, one by one

You lose 220 characters

Mastodon allows 500 characters; X caps at 280. A post written to Mastodon's length gets truncated — usually mid-sentence — unless it is rewritten, not trimmed.

The hashtag rules are not the same

Mastodon: 2-4 hashtags in CamelCase (#SocialMedia, not #socialmedia) for screen readers. X: 1-2 hashtags, zero is fine. Carrying the tag block across is the single most obvious sign of an automated cross-post.

A link in the body suppresses reach on X

Links are fine on Mastodon. On X they cut distribution — the link belongs in a reply, not in the post.

X needs approval, Mastodon does not

You can post to Mastodon today with a credential you generate yourself. X gates posting behind a platform review — see our API approval notes for what that actually takes.

Why copy-paste cross-posting underperforms

Mastodon is community-first; alt text on media is expected, not optional. X is one hook and nothing else — opinionated, conversational, over in a breath. Those are different jobs, so the same words cannot do both well — and every algorithm here demotes text that obviously was not written for it. The fix is not to skip cross-posting; it is to send a native version to each network.

Publish to both in one call

curl -X POST https://postwire.io/api/post \
  -H "Authorization: Bearer $POSTWIRE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["mastodon", "x"],
    "text": "Your post",
    "per_platform": {
      "mastodon": { "text": "The Mastodon version" },
      "x": { "text": "The X version" }
    }
  }'

PostWire's /api/generate writes those per-platform versions for you from a single prompt, respecting every limit in the table above. From an AI agent it is one MCP tool call.

Get an API key free →

Questions people actually ask

Can I cross-post from Mastodon to X?
You can, but not by copying the text across: 4 things change between Mastodon and X, starting with you lose 220 characters. Below is exactly what breaks and what to do instead.
What is the character limit difference between Mastodon and X?
Mastodon allows 500 characters and X allows 280.
How do I post to Mastodon and X at the same time?
With PostWire, one API call publishes to both: POST /api/post with platforms set to ["mastodon","x"]. Or one MCP tool call from an AI agent.

Other pairs: X to Mastodon · all combinations · which APIs need approval