Works, with rewrites

How to post from X to Mastodon

You can, but not by copying the text across: 2 things change between X and Mastodon, starting with the hashtag rules are not the same. Below is exactly what breaks and what to do instead.

Side by side

XMastodon
Characters280500
Mediaoptionaloptional
Hashtags1-2 hashtags, zero is fine2-4 hashtags in CamelCase (#SocialMedia, not #socialmedia) for screen readers
Links in bodysuppress reachfine
Needs platform approvalyesno

What changes, one by one

The hashtag rules are not the same

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

Mastodon lets you put the link back in

X penalises links in the body, so posts written for it park the URL elsewhere. On Mastodon links in the body are fine — putting it back is free reach.

Why copy-paste cross-posting underperforms

X is one hook and nothing else — opinionated, conversational, over in a breath. Mastodon is community-first; alt text on media is expected, not optional. 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": ["x", "mastodon"],
    "text": "Your post",
    "per_platform": {
      "x": { "text": "The X version" },
      "mastodon": { "text": "The Mastodon 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.

Do this without writing the post twice

PostWire takes one idea and publishes a version written for each network — the right length, hashtags and format per platform. It also refuses posts that would fail, like a video network with no video, before they are queued.

Free for one brand — 30 posts a month, no card. Starter is $9/month for three brands and 300 posts. There is a REST API and an MCP server if you would rather automate it.

Start free — no card →

Questions people actually ask

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

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

If you are weighing the paid options, how Ayrshare's per-profile pricing compares is the part most people find out too late.