Compose & cross-post
The composer is where posts are born. It's built around one idea: one logical post, many channels. You write once, decide where it goes, and optionally tailor it per platform — without splitting it into separate posts.
The composer surface
- Channel picker — choose one or more connected accounts. Mix platforms freely.
- Caption editor — write the default caption. Live character counters adapt to the strictest selected platform.
- First comment — optional text posted immediately after the main post (handy for hashtags and links).
- Media — attach images, videos, or documents from your media library or upload new files.
- Per-channel overrides — tailor the caption or other fields for a specific destination.
- Action — publish now, schedule, or save as draft.
Cross-posting
When you select multiple channels, post.buzz fans the post out into a
per-channel post account for each destination. They share a
crossPostGroupId so they're treated as one unit (one status, one analytics
rollup), but each can carry its own overrides.
┌─► Instagram (default caption)
Post ──────┼─► X (override: 280-char version)
└─► LinkedIn (override: long-form version)
This is the pattern for "post everywhere, but make it fit."
Per-channel overrides
Overrides let you change the caption (and select platform-specific fields) for a single channel without duplicating the post. Typical uses:
- Shortening the caption for X's 280-character limit.
- Writing a longer, professional version for LinkedIn.
- Adding platform-specific tags or mentions.
In the REST API, this is the accountOverrides array — see
Posts API.
Validation before you publish
Every post is checked against the destination platform's limits before it's submitted:
- Text — character limits per platform and tier (e.g. X free vs. premium).
- Media — file count, size, resolution, aspect ratio, bitrate, and video duration.
- Ownership — the accounts and media you reference must belong to you.
If anything fails, you get a clear message naming the broken constraint. The post never leaves in a half-valid state.
Post types
The post type tells the platform how to publish. Which types are available depends on the platform:
- Instagram:
post(carousel),reel,story - TikTok: video,
photo(photo mode) - YouTube:
short, long-form video - Facebook:
post,reel,story - Most others: a single post type
Pick the type in the composer; validation rules change to match.
Publishing outcomes
A post's per-channel status moves through:
draft → scheduled → publishing → published | failed
If one channel fails (e.g. a token expired or the platform rejected the media),
only that channel is marked failed. The others still ship. The failed row
carries the platform's error so you can edit and retry.
Long-form threads
Write one long-form draft and publish it as native renditions per channel: reply-chained threads on X, Bluesky, Mastodon, and Threads; the full text as a single post on LinkedIn and Facebook. Platforms that can't take long text or chains (Instagram, TikTok, …) are disabled for this format.
How it works
- Pick Thread as the post type in the compose wizard.
- Write or paste your draft in the Content step. The deterministic splitter breaks it into parts per channel — at paragraph, then sentence, then word boundaries — respecting each platform's character limit.
- Review the split per channel tab: edit any part inline, watch the char counters, optionally number parts (1/, 2/…), or hit Refine with AI to restructure the split (credit-gated; you review before accepting).
- Attach media (it rides the first part), pick channels, validate, schedule.
Editing the draft after hand-edits — typing in the draft regenerates every channel's parts, which discards manual edits and AI refines. The wizard warns before doing so.
If a thread fails mid-publish — the schedule records exactly which parts went live. Retrying resumes from the first unpublished part, so nothing is duplicated. Engagement insights track the thread's root post.
Related
- Scheduling — when posts go out.
- Media library — where attachments come from.
- Posts API — do all of this programmatically.