Docs/Channels

Connecting Instagram

From the Channels tab in the dashboard — click Connect → a modal opens → confirm in Instagram.

Requirement — Business or Creator profile

Before connecting your Instagram profile must be **Business** or **Creator**, not Personal. The switch happens inside the Instagram app — Settings → Account type and tools → Switch to professional account. It's free and doesn't change how your profile looks to followers. Step-by-step: see "Switching to an Instagram Business account".

1. Open the "Connect Instagram" modal

In Dashboard → **Channels** tab there's an Instagram row. When it's not connected you see a "Not connected" status and a purple "Connect" button on the right. Click the button — a modal opens titled "Connect Instagram" with the subtitle "Automatic connection with Meta". Below it is a "Before you connect, make sure you have:" section with one requirement — "Instagram Business account · It's free — switch from Settings".
Channels tab — Instagram row "Not connected" with a "Connect" button

2. Click "Connect with Instagram"

At the bottom of the modal there are two buttons: "Step-by-step full guide" (opens /guide in a new tab) and a purple CTA "Connect with Instagram". A note below reads "You'll be redirected to Meta for authorization". Click the CTA.

3. Brief "Connecting to Instagram…" screen

For a fraction of a second you see a black screen with a purple spinner and "Connecting to Instagram…" text. This is an interstitial we render — not an error. It exists because on iOS a direct HTTP redirect to instagram.com triggers Universal Links and hands the user off to the native Instagram app (where the callback never returns). A JS-driven redirect does NOT trigger Universal Links and keeps the login in the browser. If it sits there for more than 2-3 seconds, a fallback "If nothing happens, tap here" link takes over manually.

4. Sign in to Instagram and approve scopes

You're redirected to `instagram.com/oauth/authorize` with these params: • `scope=instagram_business_basic,instagram_business_manage_messages` — exactly 2 scopes. (We used to ask for `instagram_business_content_publish` too, but Meta never approved it — requesting it silently failed OAuth with "profile doesn't exist", so we dropped it.) • `enable_fb_login=false` — hides the "Log in with Facebook" option. If a user's FB account has no linked IG Business, that path also silently fails with "profile doesn't exist". • `force_reauth=true` — forces Instagram to prompt a fresh login even if a session is active, so you can pick the correct Business account. You enter your IG username/password, see the requested-permissions screen, and click Allow: • `instagram_business_basic` — read profile. • `instagram_business_manage_messages` — read and send DMs. Without both, the bot can't reply.

5. Back in the dashboard + automatic webhook

We return you to the dashboard. If everything went through — the Instagram row status is green and shows your handle. We automatically subscribe to messaging webhooks (`POST /v21.0/{ig-user-id}/subscribed_apps` with `subscribed_fields=messages,messaging_postbacks`) — no action needed from you. If the subscribe step fails, the status shows "Pending setup" with a "Retry" button — click it and we'll try again.
Instagram row in Channels — green "Connected" status + account handle
Tip: To test — DM yourself from another Instagram account. The first reply may take 2-3 seconds (cold start), the rest are sub-second.

On mobile — why you need a Private / Incognito tab

**The desktop flow above works in one click.** On mobile, however, there's a known Instagram bug that LinkDM and other integrations also hit: if you have an active Instagram session in the mobile browser, `instagram.com/oauth/authorize` silently redirects you back to `instagram.com` (the feed) instead of returning the callback to raiceptionist.com. OAuth never completes, the bot stays disconnected. **The fix** (industry-standard workaround): complete the OAuth in a **Private / Incognito tab** where there's no active IG session. There Instagram prompts a fresh login and the flow finishes cleanly. So you don't have to log into raiceptionist.com from the Private tab, we use a **bridge link**: a one-time signed URL that auto-logs you in and immediately starts the IG OAuth.

Mobile flow — 3 steps in a Private tab

When you're on a mobile browser and tap "Connect Instagram", you see a dedicated modal titled "Connect Instagram" with a Meta Verified Business app badge: **1. Copy the link** — tap the purple "Copy link" button. The bridge URL (from `POST /api/auth/mobile-bridge`) is **valid for 10 minutes** and **single-use** (consumed on first open). It's auto-copied to your clipboard; if clipboard permissions are missing, copy manually. **2. Open a Private / Incognito tab** — • **Safari (iOS):** the tabs icon bottom-right → "Private" → new tab. • **Chrome:** "⋮" menu → "New Incognito Tab". **3. Paste & Go** — long-press the address bar → "Paste & Go". The bridge URL sets a signed session cookie and immediately redirects to the IG OAuth start endpoint. From there the flow is identical to the desktop variant (interstitial → instagram.com/oauth/authorize → approve → callback → dashboard).
Tip: Why doesn't the link work in the same tab? The whole point is a fresh IG session — which you only get in a Private tab. If you paste in the current tab, it'll log you into raiceptionist.com and immediately hit the same Instagram bug.

Possible Instagram row states

• **Connect** — not connected. • **Pending setup** (yellow badge) — OAuth succeeded but webhook subscribe didn't — click Retry. • **Connected** (green badge) — all good; shows handle and a menu button for disconnect. • **Token expired** (red badge) — rare; if it happens, click disconnect then connect again.

Meta Tech Provider verification

rAIceptionist is approved by Meta as a Tech Provider since April 2026. You connect Instagram self-serve — no manual whitelist needed.
Connecting Instagram · rAIceptionist Docs