## Composer

- **First comment** (per post or per destination) posts after the destination is verified live, as its own checkpointed stage. If it fails, the receipt is flagged and the parent is never re-posted. Supported on YouTube, Instagram, Facebook Pages, X and LinkedIn; TikTok has no comment API.

- **Threads** (`parts`) post each part as a reply to the previous one, with a receipt entry per part. A failed part flags the receipt and skips the remaining parts; the parent and earlier parts stay. Supported on X, Threads, Bluesky and Mastodon; other platforms reject parts loudly at validation.

- **UTM fields** (source, medium, campaign, term, content) are added to every link in the caption, parts and first comment at delivery time; workspace defaults sit under post and destination values.

- **Link shortening** uses your own Bitly or Dub key, stored encrypted. Without a key links pass through untouched and the receipt records it; a configured shortener that fails is flagged and the long link is used.

- **Recycling** republishes a post on a cadence (every N days, optionally N times) as fresh posts with their own receipts, into the account's queue or at the cadence instant. The same-asset guard applies to each instance.

- **CSV import**: columns `caption, destinations, mode, scheduled_at, queue_account, media_id, media_url, first_comment, parts, utm_*, labels, same_asset_override`; unknown columns are rejected by name (map headers with `mapping`); every row is validated and reported separately — one bad row never sinks the file.

---
HTML version: https://a1lane.ai/docs/composer
