Create post (publish immediately)
Facebook allows 30 API-published Reels per Page in a moving 24-hour window. A post whose platform_options.facebook.type is reel is refused when a selected Page is already at that limit (Reels published in the last 24 hours plus Reels already scheduled inside that window): 422 PLATFORM_DAILY_LIMIT_REACHED, with details carrying account_id, limit, used and next_available_at. Nothing is created. Check first with GET /social/accounts/{account_id}/facebook/reel-limit.
Requires scope social:write.
Authorizations
API key from Developer dashboard (Bearer token).
Headers
Act inside a profile (sub-account) you own: data reads and writes target the profile workspace while billing, rate limits and usage stay on your own account. Requires the profiles:manage scope. Returns 404 for profiles you do not own and 409 for paused profiles.
Client idempotency key (X-Request-Id accepted as an alias). Send a fresh key per logical post and REUSE it when retrying that exact call after a timeout / 5xx / connection reset: the retry returns the original post with HTTP 200 and idempotent_replay: true instead of creating a duplicate. A key permanently identifies its post in the workspace (deleting the post frees the key). See the Idempotency guide.
64^[A-Za-z0-9._:-]{1,64}$Body
Post text content
Target platforms. Use twitter for X and gmb for Google Business. telegram posts via the workspace's connected bot (created with @BotFather); discord posts via the connected server webhook. Both are connected in the dashboard's Social Accounts page.
facebook, instagram, twitter, linkedin, youtube, tiktok, gmb, threads, bluesky, tumblr, telegram, discord IDs of connected social accounts to post to
Media URLs to attach to the post
Destination URL for the post. Applied to the platforms that have a link field (currently Facebook); other selected platforms are reported back in data.warnings, so put the URL in the post text for those. On Facebook a text-only post renders it as a preview card; when media is attached Meta drops the parameter, so the URL is appended to the post text instead. A per-platform platform_options..link always takes precedence.
Skip the 24h duplicate-content guard. Without it, content identical to a post created in this workspace in the last 24 hours is rejected with 409 DUPLICATE_CONTENT (and the charge is refunded).
Per-platform composer options - the same payload the web composer stores; publish handlers read it as-is (unknown keys are ignored, max 20KB). Keyed by platform, e.g. {"tiktok": {"privacy_level": "SELF_ONLY"}, "instagram": {"content": "IG-specific caption"}, "_thumbnail": {"timestamp_ms": 3000}}. Common keys: per-platform content override; tiktok privacy/duet/stitch options; _thumbnail custom video cover. See the Platform options guide for every key each platform accepts (privacy, flair, first comments, formatting, AI-disclosure flags, thumbnails and more).

