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 is a wizard: Post type → (Content) → Media → Channels → Validate → Schedule. Threads insert an extra Content step. You can jump back to any earlier step, and nothing is committed until the final step. Unsaved work is kept safe: drafts autosave locally (restored if you leave and come back), and navigating away with unsaved changes asks whether to stay, discard, or save as a draft.
You can arrive at the composer mid-task from many places: the Posts page (Edit), the calendar, or an ideation proposal (Edit opens the composer preloaded with the proposal).
Step 1 — Post type
Eight formats: post, story, reel, carousel, poll, thread, long-form video, document. Types your selected channels can't publish are disabled, and if a channel change makes the current type impossible the selection snaps to the closest supported one.
Step 2 — Media
Attach from your media library or upload new files (drag-and-drop or browse). Details that matter here:
- HEIC/HEIF photos are converted to JPEG automatically before upload.
- Media count and mixed-media rules are the intersection across your selected platforms — if you hit a cap, the picker tells you which constraint fired.
- Selected media is analyzed by AI automatically (image descriptions feed caption generation). You can edit a description or re-run it from the media panel.
- Arrange mode lets you crop images (with per-format ratio presets), reorder, and remove — order matters for carousels and galleries.
- An aspect-ratio warning flags images a platform may crop, with the recommended ratio.
Step 3 — Channels
Pick any mix of connected accounts. Accounts that can't publish the chosen format are disabled with the reason.
Step 4 — Validate
The heart of the wizard. Every selected channel gets a card with:
- A live platform preview — what the post will look like on that platform (threads show one preview per part, media on the first).
- Validation issues — errors and warnings computed against that platform's enforced limits, each with an optional ✨ AI fix that writes the corrected value (or a caption override) for you.
- Platform panels where extra fields exist: TikTok (privacy level, allow comment/duet/stitch, branded-content disclosure), YouTube (made-for-kids COPPA setting, visibility), Reddit (subreddit, flair, NSFW/spoiler), and Pinterest (board picker).
The base caption editor sits above the cards, with Generate (one suggestion) and 5 options (pick from five; regenerate avoids the ones you've already seen). Counters track the strictest character limit among your channels plus hashtag count. Generation waits for media analysis to finish so the caption can see the images.
Per-channel overrides — tailor the caption for a single channel (an 280-character version for X, long-form for LinkedIn) without duplicating the post. An override can rescue a channel that would otherwise fail validation. Channels that can't be fixed can be dropped from this post entirely.
Polls get their editor here: one question, 2–4 options, and a duration in days (LinkedIn polls run 1–14 days; Reddit can't create polls through the API).
TikTok and YouTube enforce platform compliance settings (privacy level, made-for-kids). Schedule and Publish now stay disabled until every targeted TikTok/YouTube channel reports it can publish — you can still save a draft.
Step 5 — Schedule
- Date & time default to the next 9:00 AM in your local timezone.
- Publish now sends immediately; Save draft stores it for later.
- Only channels whose validation passes are submitted — failing channels are dropped rather than blocking the post.
- After scheduling you get a receipt: a live countdown, the channel manifest, and a View in calendar deep link.
Editing an existing post reuses the same wizard with Save Changes; the repeat rule (see recurrence) can only be attached when a post is first scheduled.
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." In the REST API,
overrides are 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, for the specific post type.
- Ownership — the accounts and media you reference must belong to you.
The server re-validates identically, so a post never leaves in a half-valid state. If anything fails, you get a clear message naming the broken constraint.
Long-form threads
Write one long-form draft and publish it as native renditions per channel:
- Pick Thread as the post type.
- 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 (tier-aware for X).
- Review the split per channel tab: edit any part inline, watch the counters, optionally number parts (1/, 2/…), or hit Refine with AI to restructure the split (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.
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, and the
failed row carries the platform's error so you can edit and retry — see
Posts & post detail.
Related
- Scheduling — when posts go out.
- Media library — where attachments come from.
- Posts & post detail — the queue and retry flows.
- Posts API — do all of this programmatically.