Publishing to Facebook Pages via the Octopost API
Facebook supports text posts, images (up to 10), videos, and link previews -- but only to Pages, not personal profiles. This is a Facebook API restriction, not an Octopost limitation. Octopost handles OAuth, Page token exchange, multi-photo assembly, and resumable video uploads automatically -- you just send us your content.
Content Limits
| Constraint | Limit |
|---|---|
| Post text | 63,206 characters (effectively unlimited) |
| Images per post | 10 |
| Image formats | JPEG, PNG, GIF, BMP, TIFF |
| Image max size | 10 MB per image |
| Video formats | MP4, MOV, AVI, WMV, FLV |
| Video max size | 10 GB |
| Video max duration | 240 minutes |
Good to Know
- Pages only, no personal profiles. This is the single most important thing to know. The Facebook Graph API does not allow posting to personal timelines. Users must connect a Facebook Page in their Octopost account settings -- not a personal profile. There is no workaround for this.
- Users must be a Page admin or editor. The connected account needs sufficient permissions on the Page they want to post to.
- Link previews are cached aggressively. If you update the page a URL points to, Facebook may show stale preview data. Use the Facebook Sharing Debugger to clear the cache before posting.
- URLs in post text generate link preview cards. Including a URL in your text will automatically create a preview card with title, description, and thumbnail. No extra configuration needed.
- Scheduled posts are supported. Facebook Pages support native scheduling. Set a future timestamp and Octopost will schedule the post on Facebook's side (must be 10 minutes to 6 months in the future).
- Facebook accepts both image URLs and uploads. Unlike Instagram and Threads, Facebook can handle direct image uploads. Octopost uses whichever method is most reliable for your media.
Platform-Specific Features
Text Posts
Plain text posts with optional link previews:
{
"content": "Exciting update from our team!",
"platforms": ["facebook"]
}Image Posts
Single or multi-image posts (up to 10):
{
"content": "New product photos",
"platforms": ["facebook"],
"media": {
"images": [
"https://example.com/photo1.jpg",
"https://example.com/photo2.jpg"
]
}
}Octopost assembles multi-photo posts using Facebook's attached_media[] system behind the scenes.
Video Posts
Single video per post:
{
"content": "Behind the scenes footage",
"platforms": ["facebook"],
"media": {
"video": "https://example.com/bts.mp4"
}
}Octopost uses resumable uploads for large video files so you don't have to manage chunked transfers.
Scheduled Posts
Set a future publish time:
{
"content": "This will go live tomorrow morning",
"platforms": ["facebook"],
"scheduled_for": "2026-04-04T09:00:00Z"
}The timestamp must be between 10 minutes and 6 months in the future. Octopost validates this before sending.
Rate Limits
Facebook uses a dynamic rate limit system based on your app's call volume and the ratio of valid to invalid calls. Octopost tracks your usage and paces requests to maintain healthy limits.
Things Octopost Handles for You
You don't need to worry about any of this, but in case you're curious:
- OAuth and token exchange. Facebook uses a two-layer token system. The user authenticates with a user token, then Octopost exchanges it for a long-lived Page access token. This Page token is what's actually used for publishing. Octopost manages the full flow including token refresh.
- Page access token lifecycle. Page tokens can expire or be invalidated. Octopost automatically exchanges for long-lived tokens during connection and handles refresh when needed. If re-authentication is required, Octopost reports it clearly.
- Multi-photo post assembly. Facebook's API requires multi-image posts to use
attached_media[]references, where each image is uploaded separately and then attached to the post. Octopost does all of this from your flat list of image URLs. - Resumable video upload. Large video files use Facebook's resumable upload protocol with chunked transfers. Octopost manages the upload session, chunking, and completion so you just provide a video URL.
- Permission scopes. Octopost requests
pages_manage_posts,pages_show_list, andpages_read_engagementduring OAuth. Facebook requires app review for these permissions -- Octopost has already completed this review. - Content validation. Octopost validates character limits and media constraints before sending anything to Facebook, giving you immediate feedback.
- Error reporting. If something fails -- Page not connected, token expired, permission missing, rate limit hit -- Octopost reports a clear error describing the issue and whether it's retryable.
Example
{
"content": "We just shipped something big. Details in the link below.",
"platforms": ["facebook"],
"media": {
"images": ["https://example.com/announcement.jpg"]
}
}That's it. Octopost takes care of the rest.