All guides
Setup guide

Facebook, Instagram and Threads

Configure the correct Meta app and demonstrate the exact feature for each permission you request.

Prepare the account and website

Complete Facebook Page publishing, Instagram, Page inbox and Threads only if those features are installed and you intend to use them. The app owner prepares the Meta account; the administrator configures credentials; the workspace user connects an authorized asset.

Have readyCheck it now
Meta developer/business accountConfirm that you may create the app under the intended business owner.
A permitted test PageCheck that the person connecting it has the required Page access.
Instagram professional account, if usedCheck the account and its Page association for the Facebook-based connection implemented by this source version.
Website and policy pagesOpen the public links in a signed-out session. The page must describe your real service and data use.
Separate browser tabsTab 1: your application’s API Integration. Tab 2: the Meta app. Tab 3: the workspace test account.

Create the app

1. Create and identify the Meta app

Open Meta for Developers → My Apps

App owner

  1. Open https://developers.facebook.com/apps/ and confirm you are signed in with the intended owner account. Start Create App if this action is offered.
  2. Enter your actual application name and a monitored contact address. Choose the business portfolio only if you are authorized to use it.
  3. Choose the use case that supports the implemented Facebook Login connection for your feature. Meta can organize this as Use cases or Products. Do not choose an unrelated login product merely to get past this screen.
  4. Complete the account/business checks requested for that app. Open its settings and record App ID. Store App Secret privately.
  5. Enter the actual website/domain and policy/deletion details the app settings request. Use the completed public pages, not placeholder URLs.

Expected result The app dashboard shows the intended app name, owner and App ID.

If this does not happen The exact Meta creation screens could not be checked in a signed-in console. If the required use case is absent, check your account’s current eligibility and Meta’s current instructions before choosing another type.

2. Match the credentials and redirect

Open Your application → API Integration → Facebook or Instagram

Administrator

  1. Select the provider you are configuring. Facebook and Instagram have different callback paths in this version.
  2. Copy App ID and App Secret from that Meta app into the matching application fields. Keep the secret out of recordings.
  3. Copy the full application Callback URL. In the matching Meta login settings, add it to the accepted OAuth redirect URIs and save.
  4. Keep the supported Graph version selected for your implementation. Do not change the version only because another example uses a different one.
  5. Review Permissions for the working features you will demonstrate. Set Status to Enable for this test setup and select Save configuration.

Expected result The OAuth redirect registered in Meta exactly matches the full Callback URL in the application.

If this does not happen Compare protocol, hostname, path and trailing slash. Do not use your homepage or the inbox webhook as the OAuth redirect.

Copy from Meta / your applicationPaste or check here
Meta App IDApplication App ID.
Meta App SecretApplication App Secret, entered privately.
Application Callback URLMeta OAuth redirect configuration for that login product.
Application Inbox webhook URL, if neededMeta webhook Callback URL for the inbox feature.
Application Webhook verify token, if neededThe same private verification value in Meta’s webhook configuration.

Connect and test as a workspace user

3. Connect the test asset

Open StackPosts workspace → Channels → Add channels

Workspace user

  1. Open Channels in the workspace that should own the connection. Select Add channels, then the intended Facebook Page or Instagram connection.
  2. Continue to Meta. Confirm the app name is the app you configured and sign in with the authorized account.
  3. Review the requested access and select the permitted test assets. Return through the normal consent flow; do not close the browser halfway through.
  4. If the application shows an asset picker, select the intended Page/profile and select Add selected in the Page picker. If a plan-limit confirmation appears, check the selection and remove excess assets before continuing.
  5. Return to Channels. Check the connected asset’s actual name and owner. Do not continue with a similarly named asset from another workspace.

Expected result The intended Page or professional profile is listed in the correct workspace.

If this does not happen If the list is empty, check the connecting person’s asset role, the selected consent assets and the app’s permissions. Correct access and reconnect instead of repeatedly creating new apps.

4. Demonstrate the feature you will request

Open Connected workspace → the enabled publishing, inbox or report feature

Workspace user

  1. For publishing, open the installed publishing editor, choose the connected test asset and enter content meant for that asset. Check the selected destination before submitting the action.
  2. After the action completes, open the provider and verify the actual post. A scheduled/queued item alone is not a published result.
  3. For inbox access, send one permitted test message to the selected business asset, check the received conversation, reply and confirm receipt at the test sender.
  4. For reports, open the implemented report for the selected asset and check the identity and date range. Do not claim insights access solely because an empty report page loads.

Expected result The specific action covered by the requested permission produces an observable result.

If this does not happen Use the error shown for that feature. Check the exact asset/token and permission; a successful account connection does not establish write or inbox access.

Match permissions to features

Source-default permission groupDemonstration to prepare
pages_show_list / pages_read_engagementAuthorize the account, show the allowed Page list and load the selected Page data.
pages_manage_postsCreate an intentional test Page post and show the result on that Page.
pages_manage_metadataShow the implemented subscription/webhook flow for the relevant Page.
pages_manage_engagement / pages_read_user_contentShow the actual supported comment/read/moderation action.
pages_messagingShow the supported Page inbox conversation and reply flow.
read_insightsOpen the supported report for the authorized test Page.
instagram_basic / instagram_content_publishShow the implemented professional-account connection and Instagram publishing action.
instagram_manage_comments / instagram_manage_messages / instagram_manage_insightsDemonstrate only the corresponding comments, inbox or report screen that is actually available.
business_managementExplain the specific implemented business-asset operation. Do not request it as a general workaround.

Set up Threads separately

Configure the separate Threads connection

Open Meta Threads app/use case + API Integration → Threads

App owner and administrator

  1. Use the app/use case that offers the intended Threads API access in your authorized Meta account. Record that app’s own credentials.
  2. In the application, select Threads. Enter its App ID and App Secret; do not assume the Facebook provider’s saved values populate it.
  3. Copy the Threads Callback URL into that app’s redirect configuration. Review threads_basic, threads_content_publish and threads_manage_insights against your actual features.
  4. Select Save configuration. As the workspace user, connect the permitted Threads profile and verify its identity.
  5. Perform the one requested Threads publishing/report action and show its actual result in your review demonstration.

Expected result The Threads profile and intended API action work under the correct app’s access.

If this does not happen If the provider card or required access is absent, check the installed module and the current Threads access process. Facebook/Instagram approval is not Threads approval.

Submit the review

5. Prepare one complete permission explanation

Open Your application + the Meta app’s review section

App owner

  1. Open the existing app and locate the review/permission access section for its selected use case. Check the outstanding business, identity and data-use requirements.
  2. For each permission, write the user action, the exact screen path, the data or write operation needed and the result. Do not use “we need all permissions for social media management” as the explanation.
  3. Use the pages_show_list example below only if it matches your implemented Page-selection flow. Prepare a separate explanation for publishing, inbox, comments or insights.
  4. Give the reviewer a working application test account with the required plan and feature. Use the platform’s supported test-asset/reviewer access mechanism. Do not provide your personal Meta login.

Expected result Each requested permission has its own reproducible action and reason.

If this does not happen Remove permissions without a working feature, or finish the implementation and test before submitting.

Example: Page-list permission — adapt to your real flow

Permission: pages_show_list
Purpose: Let an authorized user choose which managed Facebook Page to connect.
Steps: Sign in to the application test account. Open Channels, choose Add channels,
then start the Facebook Page connection. Complete Meta authorization using the
permitted test asset flow. Review the returned Page list and select the test Page.
Expected result: Only the authorized Page is connected to this workspace.
Video evidence: Replace this line with the actual video timestamp.
This example does not justify publishing or messaging permissions.

6. Record, submit and handle the decision

Open Meta app → the review form for the requested items

App owner

  1. Record the real application login, provider consent, asset selection, action and provider-side result. Show every requested permission’s feature and keep credentials hidden.
  2. Upload/attach the recording in the review form as supported. Enter the exact login URL, reviewer steps and test-account access in the supported protected fields.
  3. Check the whole form: correct app, domain, permissions, contact, policies and working test access. Complete required data-handling questions truthfully.
  4. Use the form’s submission action only when the prerequisites are complete. Record its submission reference and the status the console actually shows.
  5. If rejected, open the response for the specific item. Reproduce the problem, correct it, update the relevant video/steps and resubmit the corrected item.
  6. After approval, inspect the permissions and production access actually granted. Reconnect the test account when required, repeat the feature test, then make it available to intended users.

Expected result You have a real submission reference, then a provider decision and a successful feature test after any approval.

If this does not happen A saved draft, business verification, Live mode or account connection alone is not permission approval. Follow the current console’s requirements.

Check failures

SymptomNext step
Page/profile is not listedCheck asset ownership, the connecting person’s role, professional-account association and the assets selected during consent.
Authorization works but publishing failsCheck the specific write permission, token/asset pairing and the publisher’s visible error.
Inbox has no inbound messagesCheck the correct webhook endpoint, verification, event subscription and selected Page/profile.
Meta asks for a different app productCompare the actual implemented OAuth flow with the requested use case before changing configuration.

Version and source information

These are fields and default paths found in the reviewed source version. An installed module or a source default does not prove platform approval. Copy the complete URL shown by your running installation; do not paste a path by itself into a developer console.

StackPosts — Threads / AppChannelThreadsProfiles
Setting labelSource information
StatusUse the value shown by your installation or issued for your app.
App IDUse the value shown by your installation or issued for your app.
App SecretUse the value shown by your installation or issued for your app.
Permissionsthreads_basic,threads_content_publish,threads_manage_insights (source default; review necessity and actual granted access before requesting)
Graph versionUse the value shown by your installation or issued for your app.
Callback URL/integrations/threads/profile

Version: 1d0944d30f606782c9abf5b878224cdd3cd09b99

Open the source definition
StackPosts — Instagram / AppChannelInstagramProfiles
Setting labelSource information
StatusUse the value shown by your installation or issued for your app.
App IDUse the value shown by your installation or issued for your app.
App SecretUse the value shown by your installation or issued for your app.
Graph versionUse the value shown by your installation or issued for your app.
Permissionsinstagram_basic,instagram_content_publish,instagram_manage_comments,instagram_manage_messages,instagram_manage_insights,pages_read_engagement,pages_show_list,business_management (source default; review necessity and actual granted access before requesting)
Callback URL/integrations/instagram/profile
Inbox webhook verification tokenUse the value shown by your installation or issued for your app.
Inbox webhook URL/webhooks/meta/instagram

Version: 1d0944d30f606782c9abf5b878224cdd3cd09b99

Open the source definition
StackPosts — Facebook / AppChannelFacebookPages
Setting labelSource information
StatusUse the value shown by your installation or issued for your app.
App IDUse the value shown by your installation or issued for your app.
App SecretUse the value shown by your installation or issued for your app.
Graph versionUse the value shown by your installation or issued for your app.
Permissionspages_read_engagement,pages_manage_posts,pages_show_list,business_management,pages_manage_metadata,pages_manage_engagement,pages_read_user_content,pages_messaging,read_insights (source default; review necessity and actual granted access before requesting)
Callback URL/integrations/facebook/page
Inbox webhook verification tokenUse the value shown by your installation or issued for your app.
Inbox webhook URL/webhooks/meta/facebook

Version: 1d0944d30f606782c9abf5b878224cdd3cd09b99

Open the source definition
MarkHub — Instagram / ChannelInstagramProfiles
Setting labelSource information
StatusUse the value shown by your installation or issued for your app.
App IDUse the value shown by your installation or issued for your app.
App SecretUse the value shown by your installation or issued for your app.
Graph versionUse the value shown by your installation or issued for your app.
Permissionsinstagram_basic,instagram_content_publish,instagram_manage_comments,instagram_manage_messages,pages_read_engagement,pages_manage_metadata,pages_show_list,business_management (source default; review necessity and actual granted access before requesting)
Callback URL/integrations/instagram/profile
Webhook Callback URL/integrations/meta/webhook
Webhook Verify TokenUse the value shown by your installation or issued for your app.
Subscribed FieldsUse the value shown by your installation or issued for your app.

Version: 68a5655db1bbe17c74fb211f0fe0ee4e63c8be88

Open the source definition
MarkHub — Facebook / ChannelFacebookPages
Setting labelSource information
StatusUse the value shown by your installation or issued for your app.
App IDUse the value shown by your installation or issued for your app.
App SecretUse the value shown by your installation or issued for your app.
Graph versionUse the value shown by your installation or issued for your app.
Permissionspages_show_list,pages_read_engagement,pages_manage_posts,pages_manage_engagement,pages_manage_metadata,pages_messaging,business_management (source default; review necessity and actual granted access before requesting)
Callback URL/integrations/facebook/page
Webhook Callback URL/integrations/meta/webhook
Webhook Verify TokenUse the value shown by your installation or issued for your app.
Subscribed FieldsUse the value shown by your installation or issued for your app.

Version: 68a5655db1bbe17c74fb211f0fe0ee4e63c8be88

Open the source definition