I'm debugging Instagram messaging webhooks with the current Instagram API and Instagram Login, rather than the older Facebook Page Login flow. The app is live, the business is verified, and the instagram_business_manage_messages permission has been approved.
Real comment webhooks arrive normally, and Meta's synthetic tests for messages, messaging_postbacks, and comments reach the callback successfully. The app-level and Instagram account-level subscriptions show messages and messaging_postbacks enabled. Outbound messages work, and the Conversations API can retrieve real incoming DMs.
The problem is that actual messaging events never reach my server. A normal DM produces no webhook request, and tapping a button produces no messaging_postbacks request. The server logs every request before signature validation, so this is not a signature or parsing issue. I reproduced it with two Instagram Business accounts connected to the same approved app.
In one test, the Conversations API retrieved the exact incoming DM, proving Instagram received it. I then sent a button message, received a successful send response, and had the recipient tap the button, but no postback webhook was dispatched. I've regenerated tokens, reapplied subscriptions, confirmed messages appear in the Primary inbox, and verified the callback with Meta's test events.
Could an account-level subscription still be missing even though the dashboard shows the fields enabled? Is there another entitlement, review state, Data Use Checkup requirement, or dispatch setting needed for real messages and postbacks when using Instagram Login?
2 Answers
The fact that the Conversations API can retrieve the DM shows that message ingestion is working, but that does not guarantee real-time delivery is enabled. Check the account-level subscription with the access token associated with that Instagram account, confirm both fields are listed as active, and repeat the check after reauthorizing or changing the subscription. If the subscription is absent or stale, real messages and postbacks can be stored and queryable without being sent to the webhook.
The dashboard’s webhook test only proves that Meta can reach your callback; it does not necessarily subscribe the real Instagram account. Explicitly subscribe the account through the Instagram Graph API using the account’s `/{ig_user_id}/subscribed_apps` endpoint, including the `messages` and `messaging_postbacks` fields. Then query that endpoint and verify the returned subscription state rather than relying only on the dashboard.

This was the missing step in my setup too. The synthetic test events worked even though the actual Instagram account had not been subscribed through the API.