Set up pages_manage_posts and the other Graph API permissions, survive Meta app review - or skip app review entirely with Outstand Managed Keys.
Facebook is supported in Outstand through the Bring Your Own Key (BYOK) model via Meta's Facebook Graph API. This allows you to use your own Meta app credentials to connect Facebook Pages and publish posts through Outstand's unified API.
Managed Keys are included with your subscription. We handle the OAuth app setup for you, so you can skip the approval process entirely. Follow the steps below only if you want full white-labelling with your own Meta app credentials (BYOK). Contact support@outstand.so if you have questions about your Managed Keys setup.
Quick Information
Our application works with the following OAuth scopes:
pages_read_user_content- Permission to read user-generated content on your Pages (posts, comments)business_management- Permission to manage business pagespages_show_list- Permission to list the Pages you managepages_manage_posts- Permission to publish postspages_read_engagement- Permission to read engagement metrics and post-level insightspages_manage_engagement- Permission to interact with engagementread_insights- Permission to read Page insights and metrics
These are the scopes that are required for the integration to work.
Facebook Graph API
We utilize Meta's Facebook Graph API to connect to Facebook Pages and publish posts. The version of the API we use is v24.0.
Outstand OAuth Callback URL
When configuring your Meta app, you must add the following OAuth redirect URI:
https://www.outstand.so/app/api/socials/facebook/callbackThis is where Facebook will redirect users after they authorize your app. Make sure to add this URL to:
- Facebook Login → Settings → Valid OAuth Redirect URIs
- Settings → Basic → App Domains: Add
outstand.so
White-labeling authentication flow
For full white-labeling integration, you need to follow the following flow:
- Call the
/v1/social-networks/:network/auth-urlendpoint to get the authentication URL. You MUST provide a redirect_uri in the request body. - The redirect URI must lead to a Facebook-specific callback URL in your application. We will redirect to it with a
sessionquery parameter. - Your callback URL must call the
/v1/social-accounts/pending/:sessionTokenendpoint (docs link) to get the pending connection details. - The response will contain a list of available pages/accounts that can be connected.
- You can then redirect the user to a selection page where they can select the pages/accounts they want to connect.
- Once the user has selected the pages/accounts, you can call the
/v1/social-accounts/pending/:sessionToken/finalizeendpoint (docs link) to finalize the connection. - The response will contain the connected accounts.
- You can then use the connected accounts to post on behalf of the user.
The full flow is illustrated in the following diagram:
Media Requirements
When publishing posts with media to Facebook Pages, Outstand handles media processing automatically:
How Media Upload Works
- Media Download: Outstand downloads the media from your provided URL server-side
- Binary Upload: The media is then uploaded directly to Facebook as binary data
- Post Creation: Once the media is uploaded, the post is created with the media attached
This approach ensures reliable media uploads and avoids issues where Facebook cannot access your media URLs.
Image Requirements
| Requirement | Specification |
|---|---|
| Formats | JPEG, PNG, GIF, BMP, TIFF, WEBP |
| Maximum size | 10 MB |
| Minimum dimensions | 100x100 pixels |
| Maximum dimensions | 4096x4096 pixels |
Video Requirements
The limits below follow Meta's official video upload limits. The applicable maximum depends on the upload method Meta uses:
| Requirement | Specification |
|---|---|
| Formats | MP4, MOV, AVI, WMV, FLV, WEBM (MP4 recommended) |
| Maximum size (standard upload) | 1 GB |
| Maximum size (resumable upload) | Up to 1.75 GB |
| Maximum duration (standard upload) | 20 minutes |
| Maximum duration (resumable upload) | Up to 45 minutes |
| Minimum duration | 1 second |
| Recommended aspect ratio | 16:9 or 9:16 |
See Meta's video uploads guide for the full list of supported container formats and codecs.
Text
Facebook does not publish a hard character limit for Page post messages in the Graph API; posts support very long text (many thousands of characters). Keep copy concise for best engagement.
Media URL Requirements
Your media URLs must:
- Be publicly accessible over HTTPS
- Return a valid
Content-Typeheader (e.g.,image/jpeg,video/mp4) - Be available at the time of publishing (Outstand downloads the media when publishing)
- Not require authentication or special headers to access
Example with Media
{
"containers": [
{
"content": "Check out our latest update!",
"media": [
{
"url": "https://media.yoursite.com/images/update.jpg",
"filename": "update.jpg"
}
]
}
],
"accounts": ["facebook"]
}Common Errors
| Error | Cause | Solution |
|---|---|---|
(#324) Requires upload file | Legacy error - should not occur with current implementation | Contact support if you see this error |
(#100) Invalid image | Image format not supported or corrupted | Verify image is a valid JPEG/PNG |
(#1) An unknown error occurred | Temporary Facebook API issue | Retry after a few minutes |
Publishing Rate Limits
Facebook Pages publishing is governed by Meta's Business Use Case (BUC) rate limits rather than a fixed number of posts per day. Meta does not publish a hard "posts per day" cap; instead the allowance scales with your Page's activity.
- Page-level formula: the number of calls allowed within a rolling 24-hour window is 4,800 x the number of engaged users, where engaged users are the unique people who engaged with your Page in the last 24 hours.
- Limits are enforced over a rolling 24-hour window.
- When you exceed the limit, the Graph API returns a throttling error (code
4,17,32, or613depending on the case).
See Meta's Graph API rate limiting and page-level rate limits documentation.
Available Metrics
Post-level metrics
When using the Post Analytics API with a Facebook Page post:
| Metric | Description |
|---|---|
likes | Count of the LIKE reaction only - see the note below |
comments | Total comments on the post |
shares | Total shares of the post |
impressions | Times the post was rendered on screen (media views) |
reach | Unique people who saw the post |
engagement_rate | Engagement as a percentage of reach |
platform_specific additionally carries reactions_total (all six reaction types combined), the raw
insights values, and insights_unavailable listing any metric Meta did not return.
likes counts only the LIKE reaction, so it is lower than the reaction count shown in Meta Business
Suite, which totals all six types. Use platform_specific.reactions_total when you want the number
that matches the Meta UI. engagement_rate already uses the fuller reaction total.
impressions and reach are returned as null, not 0, when Meta does not report them - so you can
tell "nobody saw this post" apart from "this could not be measured".
Post-level insights additionally require that the connecting user holds the Analyze task on the Page. A user with only Editor access can publish through Outstand but will not be able to read post insights.
Video posts do not currently return post-level insights.
Account-level metrics
When using the Account Metrics API with a Facebook Page:
| Metric | Description |
|---|---|
impressions | Times Page content was rendered on screen for the period |
reach | Unique people who saw Page content |
post_engagements | Total engagement actions on Page posts |
Requirements:
pages_read_engagementandread_insightspermissions must be approved- Supports date range filtering via
sinceanduntilparameters (Unix timestamps)
Meta's June 2026 insights deprecation
On 15 June 2026 Meta retired its impression and unique-reach metrics across Page, Post and Video Insights, in all API versions at once, and replaced them with "media view" metrics. Outstand now reads the replacements, which changes how you should read the numbers:
- A media view counts content actually rendered on screen, where an impression counted content delivered. The new numbers are therefore lower than the old ones for the same content.
- Meta did not backfill history. A drop across 15 June 2026 in your own reporting reflects the change of definition, not a change in your audience.
- The old and new metrics are not directly comparable, so avoid mixing them in one time series.
See Meta's deprecated metrics reference
for the full list. Outstand keeps its metric names in one place and degrades one metric at a time, so a
future Meta rename costs you that single metric rather than the whole analytics response - anything
missing is reported in insights_unavailable.
Feel free to get in touch with our support team if you have any questions or need assistance with the integration.