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 ready | Check it now |
|---|---|
| Meta developer/business account | Confirm that you may create the app under the intended business owner. |
| A permitted test Page | Check that the person connecting it has the required Page access. |
| Instagram professional account, if used | Check the account and its Page association for the Facebook-based connection implemented by this source version. |
| Website and policy pages | Open the public links in a signed-out session. The page must describe your real service and data use. |
| Separate browser tabs | Tab 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
- 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. - Enter your actual application name and a monitored contact address. Choose the business portfolio only if you are authorized to use it.
- 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.
- Complete the account/business checks requested for that app. Open its settings and record App ID. Store App Secret privately.
- 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
- Select the provider you are configuring. Facebook and Instagram have different callback paths in this version.
- Copy App ID and App Secret from that Meta app into the matching application fields. Keep the secret out of recordings.
- Copy the full application Callback URL. In the matching Meta login settings, add it to the accepted OAuth redirect URIs and save.
- Keep the supported Graph version selected for your implementation. Do not change the version only because another example uses a different one.
- 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 application | Paste or check here |
|---|---|
| Meta App ID | Application App ID. |
| Meta App Secret | Application App Secret, entered privately. |
| Application Callback URL | Meta OAuth redirect configuration for that login product. |
| Application Inbox webhook URL, if needed | Meta webhook Callback URL for the inbox feature. |
| Application Webhook verify token, if needed | The 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
- Open Channels in the workspace that should own the connection. Select Add channels, then the intended Facebook Page or Instagram connection.
- Continue to Meta. Confirm the app name is the app you configured and sign in with the authorized account.
- Review the requested access and select the permitted test assets. Return through the normal consent flow; do not close the browser halfway through.
- 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.
- 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
- 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.
- After the action completes, open the provider and verify the actual post. A scheduled/queued item alone is not a published result.
- 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.
- 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 group | Demonstration to prepare |
|---|---|
| pages_show_list / pages_read_engagement | Authorize the account, show the allowed Page list and load the selected Page data. |
| pages_manage_posts | Create an intentional test Page post and show the result on that Page. |
| pages_manage_metadata | Show the implemented subscription/webhook flow for the relevant Page. |
| pages_manage_engagement / pages_read_user_content | Show the actual supported comment/read/moderation action. |
| pages_messaging | Show the supported Page inbox conversation and reply flow. |
| read_insights | Open the supported report for the authorized test Page. |
| instagram_basic / instagram_content_publish | Show the implemented professional-account connection and Instagram publishing action. |
| instagram_manage_comments / instagram_manage_messages / instagram_manage_insights | Demonstrate only the corresponding comments, inbox or report screen that is actually available. |
| business_management | Explain 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
- Use the app/use case that offers the intended Threads API access in your authorized Meta account. Record that app’s own credentials.
- In the application, select Threads. Enter its App ID and App Secret; do not assume the Facebook provider’s saved values populate it.
- 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.
- Select Save configuration. As the workspace user, connect the permitted Threads profile and verify its identity.
- 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
- 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.
- 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.
- 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.
- 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
- Record the real application login, provider consent, asset selection, action and provider-side result. Show every requested permission’s feature and keep credentials hidden.
- 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.
- Check the whole form: correct app, domain, permissions, contact, policies and working test access. Complete required data-handling questions truthfully.
- Use the form’s submission action only when the prerequisites are complete. Record its submission reference and the status the console actually shows.
- If rejected, open the response for the specific item. Reproduce the problem, correct it, update the relevant video/steps and resubmit the corrected item.
- 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
| Symptom | Next step |
|---|---|
| Page/profile is not listed | Check asset ownership, the connecting person’s role, professional-account association and the assets selected during consent. |
| Authorization works but publishing fails | Check the specific write permission, token/asset pairing and the publisher’s visible error. |
| Inbox has no inbound messages | Check the correct webhook endpoint, verification, event subscription and selected Page/profile. |
| Meta asks for a different app product | Compare 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 label | Source information |
|---|---|
| Status | Use the value shown by your installation or issued for your app. |
| App ID | Use the value shown by your installation or issued for your app. |
| App Secret | Use the value shown by your installation or issued for your app. |
| Permissions | threads_basic,threads_content_publish,threads_manage_insights (source default; review necessity and actual granted access before requesting) |
| Graph version | Use the value shown by your installation or issued for your app. |
| Callback URL | /integrations/threads/profile |
Version: 1d0944d30f606782c9abf5b878224cdd3cd09b99
Open the source definitionStackPosts — Instagram / AppChannelInstagramProfiles
| Setting label | Source information |
|---|---|
| Status | Use the value shown by your installation or issued for your app. |
| App ID | Use the value shown by your installation or issued for your app. |
| App Secret | Use the value shown by your installation or issued for your app. |
| Graph version | Use the value shown by your installation or issued for your app. |
| Permissions | instagram_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 token | Use the value shown by your installation or issued for your app. |
| Inbox webhook URL | /webhooks/meta/instagram |
Version: 1d0944d30f606782c9abf5b878224cdd3cd09b99
Open the source definitionStackPosts — Facebook / AppChannelFacebookPages
| Setting label | Source information |
|---|---|
| Status | Use the value shown by your installation or issued for your app. |
| App ID | Use the value shown by your installation or issued for your app. |
| App Secret | Use the value shown by your installation or issued for your app. |
| Graph version | Use the value shown by your installation or issued for your app. |
| Permissions | pages_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 token | Use the value shown by your installation or issued for your app. |
| Inbox webhook URL | /webhooks/meta/facebook |
Version: 1d0944d30f606782c9abf5b878224cdd3cd09b99
Open the source definitionMarkHub — Instagram / ChannelInstagramProfiles
| Setting label | Source information |
|---|---|
| Status | Use the value shown by your installation or issued for your app. |
| App ID | Use the value shown by your installation or issued for your app. |
| App Secret | Use the value shown by your installation or issued for your app. |
| Graph version | Use the value shown by your installation or issued for your app. |
| Permissions | instagram_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 Token | Use the value shown by your installation or issued for your app. |
| Subscribed Fields | Use the value shown by your installation or issued for your app. |
Version: 68a5655db1bbe17c74fb211f0fe0ee4e63c8be88
Open the source definitionMarkHub — Facebook / ChannelFacebookPages
| Setting label | Source information |
|---|---|
| Status | Use the value shown by your installation or issued for your app. |
| App ID | Use the value shown by your installation or issued for your app. |
| App Secret | Use the value shown by your installation or issued for your app. |
| Graph version | Use the value shown by your installation or issued for your app. |
| Permissions | pages_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 Token | Use the value shown by your installation or issued for your app. |
| Subscribed Fields | Use the value shown by your installation or issued for your app. |
Version: 68a5655db1bbe17c74fb211f0fe0ee4e63c8be88
Open the source definition