Quick reference
The image/video size caps above are Postbreeze’s server-side ingest
limits. Facebook’s own publish-time caps are tighter (Reels must be
9:16 and 3–90s, max 30 Reels per Page per 24h, etc.) — exceed those
and the publish step returns an error from Meta even though the
upload succeeded.
Before you start
Required scopes:pages_show_list— read the list of Pages you administer.pages_manage_posts— create posts on your Pages.pages_manage_engagement+pages_read_engagement— first-comment + inbox replies.pages_read_user_content— inbox comments-on-your-posts feed.
Reels use-case enabled. Before review approval, video posts work fine but kind: "REEL" will return FB_REEL_NOT_APPROVED.
Quick start
Workspace is inferred from your API key — noworkspaceId argument
and no workspace in the URL. Use the flat shape (content +
platforms) for the common case; drop to the
nested shape at the bottom of this page
only when a power-user workflow demands it.
platformOptions reference and
Media uploads for the two ways to attach
images and video.
Content types
Feed (text + optional link)
kind: "FEED". Pure text post, optionally with a link whose OG
preview Facebook auto-generates. When you attach media to a FEED
post, the server auto-normalizes it to PHOTO (1 image) or
PHOTO_CAROUSEL (2–10) — you don’t have to set kind yourself.
Photo (single image)
kind: "PHOTO". Send exactly one image, either by mediaIds (the
presign flow) or by mediaItems (URL ingest).
Node.js — pre-uploaded media
Node.js — URL ingest (alternative)
mediaItems accepts any reachable URL — Postbreeze fetches the asset
through an SSRF-guarded ingest path. Use mediaIds when you’ve already
uploaded the file via the
presign flow.
Photo Carousel (2–10 images)
kind: "PHOTO_CAROUSEL". Mixed photo + video is not allowed on organic Page posts — that surface is ads-only.
Video
kind: "VIDEO". Single video file. Up to 4 hours of runtime; the
server-side ingest cap is 5 GB.
Node.js
Reel
kind: "REEL". 9:16, 3–90 seconds, video-only. Optionally pass
reelTitle — it’s prepended to the description on the Reel surface
(not the Feed).
Node.js
Media requirements
Images
Videos
Platform-specific fields
That’s the complete schema — there is no
pageId, geoRestriction,
or story support on Facebook today. The firstComment field is not
inside platformOptions; it lives one level up as a sibling of
platformOptions on each platforms entry (see below).
First comment
PassfirstComment on the platforms entry — sibling of
platformOptions, not nested inside it. Facebook publishes the comment
as the Page (not as a personal user). No delay needed — Facebook
accepts immediate comments after publish.
Node.js
Analytics
Refresh cadence: every 14 days.
The 2026 metric names above (
page_follows, page_media_view, etc.) replaced the pre-June-2026 page_impressions family. Postbreeze emits the new names directly — no migration needed.
Common errors
What you can’t do
- ❌ Publish to personal Facebook profiles
- ❌ Schedule via Facebook’s native scheduler (we use our own queue)
- ❌ Mix video and image in one carousel (ads-only feature)
- ❌ Live video / Live Reels
- ❌ Stories (planned for v2)
- ❌ Tag specific users in caption text
- ❌ Add location tags (Meta removed this from the Graph API)
- ❌ Cross-post to Instagram in the same call (use two entries in
platforms) - ❌ First comment on Reels (Meta API limitation)
Full control: nested shape
The flat shape (content + platforms) above is the canonical entry
point and covers every Facebook use case. Postbreeze also accepts an
equivalent nested shape (caption + targets) for callers porting
from older internal tooling — the two shapes produce identical
posts.
Prefer the flat shape for all new integrations.