← back to Marketing Command Center
docs/META-APP-REVIEW.md
100 lines
# Meta App Review — getting FB + Instagram to post LIVE
**App:** DW Marketing · **App ID:** `985142067843357` · owned by the Designer
Wallcoverings business portfolio (`214184499265528`).
## The problem (root cause)
MCC connects and **reads** Facebook/Instagram fine (we pulled the page list +
`@designerwallcoverings` follower count). But **publishing fails**:
```
(#200) The permission(s) pages_manage_posts are not available … need to be approved by App Review.
(#10) Application does not have permission for this action ← instagram_content_publish
```
Every token minted via Graph API Explorer comes back WITHOUT the two **write**
scopes — `pages_manage_posts` and `instagram_content_publish`. They have
**Advanced Access** gating: Meta no longer hands them to a plain admin token on a
use-case app. Two ways past it, in order of effort.
---
## ROUTE A — System User token (try this FIRST, often no full review)
A Business **System User** token for assets the business **owns** frequently
carries the write scopes without a public App Review, because it's first-party
access to owned pages.
1. https://business.facebook.com/settings → **Users → System Users**
2. **Add** → name `MCC Publisher` → role **Admin** → Create
3. **Add Assets** → Pages → select **DesignerWallcoverings.com** → toggle
**Manage Page** (full control) ON. Repeat for any other pages to post from.
Add Assets → Instagram accounts → select **@designerwallcoverings**.
4. **Generate New Token** → app = **DW Marketing** → check:
- `pages_manage_posts`
- `pages_read_engagement`
- `pages_show_list`
- `instagram_basic`
- `instagram_content_publish`
- `business_management`
→ **Generate**, copy the token.
5. Paste the token to Claude. We re-run `debug_token`; if the two write scopes
are present, MCC posts live immediately (System User tokens are long-lived /
effectively non-expiring). **Done — no public review.**
If `debug_token` STILL shows the writes missing → the app needs Advanced Access
granted, which means Route B.
---
## ROUTE B — Full App Review (Advanced Access)
Needed only if Route A doesn't grant the writes. Days-long Meta-side approval.
### Prerequisites (do once)
- **Business verification** — Business Settings → Security Center → Verify the
Designer Wallcoverings business (legal docs / domain). Required for Advanced
Access.
- **Privacy Policy URL** — App Settings → Basic. Use
`https://designerwallcoverings.com/policies/privacy-policy`.
- **App icon** (1024×1024) + **Category** (Business & Pages) in Settings → Basic.
- App stays in the Designer Wallcoverings business (already is).
### Request the permissions
App Dashboard → **App Review → Permissions and Features** → request **Advanced
Access** for each:
| Permission | Justification (paste-ready) |
|---|---|
| `pages_manage_posts` | "Our internal Marketing Command Center schedules and publishes photo and text posts to Facebook Pages that our business owns and manages (Designer Wallcoverings and sister brand pages). No third-party or end-user pages are accessed." |
| `pages_read_engagement` | "We read post/engagement metrics on our own Pages to report performance inside our internal dashboard." |
| `instagram_content_publish` | "We publish images with captions to the Instagram Business accounts we own that are linked to our Pages (e.g. @designerwallcoverings), scheduled from our internal dashboard." |
| `instagram_basic` | "We read the linked IG Business account's id/username/media count to display account status and confirm the publish target." |
| `business_management` | "We enumerate the Pages and linked IG accounts our business owns so the dashboard can list valid publish targets." |
### Screencast the reviewers need (record one ~2-min video)
Show the full Facebook-login → use flow, because reviewers must see real usage:
1. Open MCC → log in (show the basic-auth, then the dashboard).
2. Channels panel → click **Connect Facebook** → complete the FB login consent,
granting the listed permissions.
3. Compose a post (caption + image) → select the DesignerWallcoverings page +
@designerwallcoverings → **Publish** → show it succeed.
4. Open the actual Facebook Page + Instagram and show the post live.
Upload the video in each permission's submission. (A reviewer test account /
instructions box: "This is an internal tool; the attached video demonstrates the
full publish flow on our own owned assets.")
### Submit
App Review → **Requests** → review the bundle → **Submit**. Typical turnaround
2–7 business days. While pending, MCC keeps **staging** posts (no data lost) and
flips to live the moment Advanced Access is granted — no code change needed.
---
## After approval
Mint the token (System User per Route A, or Graph Explorer), paste to Claude →
we save `FB_PAGE_ACCESS_TOKEN` / `IG_ACCESS_TOKEN` and the publish pipeline goes
live. The Streams Board's Facebook/Instagram columns flip from "Stages" to
"Connected · live".