Instagram — what to expect
Instagram is not Messenger with a different logo. Meta gives it its own rules, and several of them are things no messaging tool can change — ours included.
This page is the short list of those. If something on Instagram behaves differently from WhatsApp or Messenger and you are wondering whether it is a fault, look here first: most of the surprises are on it, with the reason.
Every item below is something Meta states in its own documentation. We cannot work around them, so the next most useful thing is to say which is which — a platform rule you can plan around, or a switch somebody has to flip.
Five switches that make a connected account look broken
An Instagram account can be connected successfully, show as healthy, and still receive nothing. There is no error, because from the API's side nothing failed. These are the five reasons, in the order they are worth checking.
Settings → Channels → ⋯ → Connection check asks Meta everything it will answer about this channel — the account, the webhook subscription, the permissions of whoever connected it — and shows each answer as it came, marking anything it could not ask as unknown rather than as a tick.
What it deliberately does not do is guess at the four settings below. Those have no API at all: we can neither read nor change them, so the screen names them and tells you where they live, with no verdict beside them. Run it first and you will usually know whether the problem is on our side or in one of these four screens.
1. Connected Tools is off
Instagram app → Settings → Messages and story replies → Message controls → Connected Tools → Allow Access to Messages.
Until this is on, Meta does not hand your messages to any third-party tool. This is the most common cause by a wide margin, and it is set by the account owner on their own phone — nobody else can turn it on for them.
2. The Instagram account is a Creator account that has never been "woken"
Meta requires one API call against a Creator account before it will start sending webhooks for it. We make that call when you connect the channel, so this usually resolves itself — but if a Creator account was connected before this was in place, disconnect and reconnect it once.
3. The app is not the default in Conversation Routing
Facebook Page settings → Page Setup → Instagram Conversation Routing.
If your business has more than one tool connected to the same Instagram account, Meta decides which one may answer. When a conversation is idle, only the default application can send. Set us as the default, or expect replies to be refused between conversations.
If nothing is configured there at all, Meta falls back to sending every message to every connected tool, with no coordination — so you may see the same customer answered twice, once by us and once from Meta Business Suite.
4. "Take control of conversations" is off
Facebook Page settings → Page Setup → Advanced Messaging.
This one only matters when another tool currently holds a conversation. Without it we cannot take a thread back, which is what an agent is asking for when they press Take back.
5. The app is not published
Meta does not deliver webhooks at all for an unpublished app, regardless of review status. This is on our side rather than yours, and is listed so the symptom is recognisable.
Things Instagram simply does not do
None of these are settings. They are how the platform works.
Messages with a GIF or a sticker never reach us
Meta is explicit: "If a person sends a message with a gif or sticker a webhook will not be triggered." The customer sees their message sent normally; we are told nothing at all.
So a conversation can have a gap in it that only the customer can see. If someone says "I sent you a picture" and there is nothing in the thread, this is usually why — ask them to send it as a normal photo.
Buttons and cards do not appear on desktop
Quick replies, ice breakers, and both kinds of card message are, in Meta's own words, "not available on desktop" — five separate feature pages say it.
A customer reading your message on instagram.com sees the text and no buttons.
This is why our flows always accept a typed answer as well as a tap: on desktop,
typing is the only option a customer has.
There is no way to unsend a message
The Instagram app has an Unsend button. The Instagram Messaging API does not, so no tool built on it can withdraw a message from a customer's device — Telegram is the only channel where that is possible at all.
You can still remove a message from your inbox (it stays with the customer), and the panel says exactly that when you do.
Inbox folders are invisible to us
Instagram sorts conversations into Primary, General and Requests. Meta does not tell us which folder anything is in, so we cannot show it.
Two consequences worth knowing:
- Messages from people who do not follow the account land in Requests, which many businesses never open. We can tell you whether a person follows the account, which is the closest signal to "is this in Requests".
- Replying from any third-party tool moves that conversation to General in your own Instagram app. That is Meta's behaviour, not a choice of ours — so if you organise by folder, expect answered threads to move.
Conversations in Requests go quiet after 30 days
Meta stops returning conversations that have sat unanswered in Requests for 30 days. They are not deleted; they simply stop being available to any tool, so they cannot be imported later.
Story mentions disappear, and we do not keep a copy
When someone mentions your account in a story, we receive a link to it — not the video. Meta forbids storing the media, which means that once the story expires (24 hours) or the author deletes it, the picture is gone for everyone, including us.
The message stays in the thread with who sent it and when; where the story was, the panel says it is no longer available. If a story mention matters, open it the day it arrives.
Story mentions also only reach us at all if the person's account is public, or if it is private and they follow you.
One private reply per comment, and Live is different
Answering a comment privately is limited to one message per comment, within 7 days.
Comments made during an Instagram Live are stricter: a private reply is only possible while the broadcast is running. Once the stream ends Meta refuses both a private reply and a public one, so a live comment left unanswered stays unanswered. If Live is part of how you sell, someone has to be watching the comments during it.
Small differences that are easy to misread
| What you notice | Why |
|---|---|
| A long button label gets shortened | Meta caps button text at 20 characters. We refuse a longer one while you can still edit it. |
| Turkish text hits a limit sooner than expected | Instagram counts bytes, not characters, and Turkish letters and emoji cost more than one each. A 700-character Turkish message can exceed the limit where a 999-character English one does not. |
| A carousel offers no video | Instagram's card message carries images only. The carousel form hides the video option on Instagram for that reason. |
| A "Seen" tick appears later than on WhatsApp | We mark a message seen when a person actually opens the conversation, not when it arrives. |
| A feature works on one customer's phone and not another's | Meta gates several of these on the Instagram app version — the persistent menu needs v226+, ig.me link tracking v235+. There is no single minimum version. |
| You renamed the Instagram account | Nothing breaks: messages and comments are tied to the account's id, not its name. The new username shows up on the channel and in the ig.me link by the next morning, or as soon as you open the link panel. A QR code or link you printed with the old name keeps pointing at the old name — print it again. |
Getting a stuck account looked at
If the five switches are right and messages still are not arriving, Meta provides a diagnostic your developer or administrator can run:
App Dashboard → Messenger → Instagram Settings → Webhook debugger.
It shows the subscriptions, the connected Instagram account and the Messaging toggle for a given Page, and can send a test webhook that produces a TraceID. That id is what Meta's support needs in order to look into it.