replySettings, TikTok’s privacy and consent flags, YouTube’s
madeForKids, LinkedIn’s PDF carousels. Postbreeze exposes these
through a single field on each platform target:
platformOptions is a discriminated union — the platform field
picks which shape applies. Pass only the fields you want to override;
everything else falls back to a sensible default.
Target-level fields (every platform)
These live next toplatformOptions, not inside it. They apply to
any platform that supports them.
packages/shared/src/index.ts.
This page is the human-readable copy.
- 📐 Feed posts require aspect ratio between 4:5 (0.8) and 1.91:1.
- 📱 Reels must be a single 9:16 video, 3–90 seconds.
- 🎠 Feed carousels support up to 10 media items.
- 🚫 Stories are not supported in v1 — they’re rejected at validation.
- 🚫 Mixing image + video in one Feed post is rejected by the API.
- 💬
firstCommentis supported on Feed posts and Reels (not stories — and stories don’t ship in v1 anyway).
- 🚫 Cannot mix videos and images in the same post.
- ✅ Up to 10 images for Feed photo carousels.
- 🎬 Reels must be 9:16, between 3 and 90 seconds.
- 📊 Reels are capped at 30 publishes per Page per 24h by Meta.
- 🔗 Use
link(withkind: "FEED") for OG-card link previews. - 💬
firstCommentis supported on every surface except Reels.
X (Twitter)
- 🖼️ Up to 4 images or 1 video per tweet — never a mix.
- 🧵
threadPartsadds up to 25 tweets after the root. Each entry inherits no media; only the root tweet carries the post’smediaItems. - 💬
firstCommentis published as a reply to the root tweet, not the last thread part. - 🌍 Tweet text is always globally visible — X doesn’t expose geo-restriction on text.
LinkedIn (Personal)
- 🖼️ Up to 20 images per post.
- 🚫 Multi-video posts are not supported.
- 📄 Single PDF document posts supported — upload the PDF and attach with
type: "document". See Media uploads → LinkedIn PDFs. - 🔗 Link previews are auto-generated when no media is attached.
LinkedIn (Company)
Same shape as LinkedIn Personal, with the discriminatorplatform: "LINKEDIN_COMPANY". Use for organization pages the
connected user administers.
- 🏢 One
SocialAccountper administered organization. Use the per-orgaccountIdto fan out to multiple pages. - 📊 Org-page analytics require LinkedIn Marketing Developer Platform approval — until that lands, the analytics surface shows an “approval pending” banner. Posting still works.
TikTok (Personal)
- 🎬 Videos publish via
PULL_FROM_URL; the host of the media URL must be on TikTok’s verified-domain list (your R2 public bucket). - 📸 Photo carousels support up to 35 images.
- 📝 Video captions: up to 2,200 characters. Photo titles capped at 90 characters — use
contentfor longer descriptions. - 🔒 While the app is in TikTok Sandbox,
privacyis forced to"SELF_ONLY"regardless of what you pass — that’s a TikTok constraint until App Review lands. - 🤝 Branded content cannot be
SELF_ONLY,MUTUAL_FOLLOW_FRIENDS, orFOLLOWER_OF_CREATOR. Validation rejects the combination pre-flight.
TikTok (Business)
Same shape as TikTok Personal, with the discriminatorplatform: "TIKTOK_BUSINESS". Use for accounts authenticated through
TikTok for Business.
TIKTOK_BUSINESS slot exists for accounts that grant
the Business OAuth flow; the publish shape and validation rules are
identical to Personal.
YouTube
- 🎬 YouTube targets accept a single video, no images.
- ⏱️ Videos ≤ 3 minutes in 9:16 are automatically published as YouTube Shorts; longer videos publish as regular videos. Postbreeze doesn’t override this — it’s YouTube’s classification.
- 🖼️ Custom thumbnails work for regular videos only (not Shorts).
- 💬
firstCommentis supported and posted as a top-level comment after upload completes. - 🚫 Tags, category overrides, AI-disclosure flag (
containsSyntheticMedia) are not exposed in v1 — defaults are applied server-side (categoryId: "22"“People & Blogs”).
- 📌 Every pin requires a
board. There is no default board fallback in v1. - 🖼️ Pinterest carousels accept up to 5 images.
- 🚫 Video pins are not supported in v1.
- 🔗
linkbecomes the pin’s destination — leave it unset for image-only inspiration pins.
Threads
- 📝 Each post (root + every follow-up) is capped at 500 characters — Threads has no “See more” fold. The publisher rejects pre-flight if any part is over.
- 🧵
threadPartsadds up to 25 follow-ups after the root. Each follow-up is text-only; only the root post carries the attachedmediaItems. - 🎠 Carousels accept 2–20 mixed items (images and videos) on the root post.
- 🎬 Videos up to 5 minutes / 1 GB.
- 📊 Posting limits: 250 published posts / 24h, 1,000 replies / 24h. Each follow-up counts toward the reply quota.
- 💬
firstCommentis posted as a reply to the root post, not the last thread part.
Cross-platform example
One post fanned out to four platforms, each with its ownplatformOptions, per-target caption override, and first-comment:
platformOptions
- Instagram →
kind: "FEED" - Facebook →
kind: "FEED" - X →
replySettings: "everyone" - LinkedIn (Personal/Company) →
visibility: "PUBLIC" - YouTube →
visibility: "PUBLIC",madeForKids: false - Threads →
kindderived from media
privacy has no default) and
Pinterest (board has no default) — those two targets require
platformOptions with at least the required field, or the post is
rejected at validation.