Instagram Messaging API vs Graph API — Venn diagram showing Messaging API as a subset within Graph API, endpoint map with permissions, use-case decision matrix
In this guide: The one-sentence answer · What the Instagram Graph API covers · What "Instagram Messaging API" specifically means · All endpoint categories mapped · Permissions for each · Webhook subscriptions · The deprecated old API · Decision matrix by use case

The one-sentence answer

✓ Direct answer
The "Instagram Messaging API" is not a separate API — it is a specific subset of endpoints, permissions, and webhook subscriptions within the Instagram Graph API that are focused exclusively on Direct Messages. Both use the same base URL (graph.facebook.com/v21.0), the same authentication system, and the same App setup. "Instagram Messaging API" is Meta's marketing label for the DM-specific capabilities within the larger Graph API.

The confusion arises because Meta markets different API capabilities under different product names — "Instagram Graph API" for the full platform, "Instagram Messaging API" or "Messenger API for Instagram" for the DM-specific subset. Developers searching for "Instagram Messaging API" often find documentation that reads as if it's a completely different system. It isn't. You set up one Facebook App, get one set of tokens, and use different endpoints and permissions depending on what you're building.

What is the Instagram Graph API?

The Instagram Graph API is the complete, official API for Instagram Business and Creator accounts. It is the only legitimate way to access Instagram data and functionality programmatically — everything from posting content to reading analytics to responding to DMs flows through it.

The Graph API covers six major capability areas:

  • Content management — create, publish, and retrieve posts, reels, stories, and carousels on behalf of a business account
  • Media insights — read impressions, reach, engagement, and audience data for individual media and account-level metrics
  • Comments — read comments on posts, reply to comments, delete comments, hide comments
  • Hashtag search — search for public posts by hashtag (with significant rate limits)
  • Mentions — detect when other accounts mention or tag your business account in posts or stories
  • Direct Messages — receive and send DMs, handle story replies and story mentions (this is the "Messaging API" subset)

All six of these are part of the same Graph API. The base URL, authentication system, App Review process, and token type are identical across all of them. The differences are in which endpoints you call, which permissions you request, and which webhook fields you subscribe to.

What is the "Instagram Messaging API" specifically?

When Meta (and most third-party documentation) refers to the "Instagram Messaging API" or "Messenger API for Instagram," they mean the subset of the Graph API that enables:

  • Receiving DMs — webhook events when users send your business account a direct message
  • Sending DMs — calling POST /{ig-user-id}/messages to send a reply to a user's IGSID
  • Story replies — webhook events when users reply to your story via DM (arrives with message.reply_to.story)
  • Story mentions — webhook events when users tag your account in their story (arrives as a referral event)
  • Emoji reactions — webhook events when users react to one of your messages
  • Read receipts — webhook events when users read your messages

This is a focused, DM-only subset of what the full Graph API can do. It requires specific messaging permissions (instagram_manage_messages), specific webhook subscriptions (messages, messaging_referrals), and its own send endpoint. But it runs on the same infrastructure, same authentication, and same App as everything else.

The Venn diagram: Instagram Graph API is the large outer circle. Instagram Messaging API is a smaller circle entirely contained within it. Every capability of the Messaging API is part of the Graph API. But the Graph API has many capabilities that are not part of the Messaging API (content publishing, analytics, hashtag search, etc.).

Full endpoint map: Graph API vs Messaging API

Here is a complete map of Instagram Graph API endpoints, labeled by whether they are Graph-only, Messaging-only (the "Messaging API" subset), or apply to both:

📊 Analytics / Insights — Graph API only
GET/{ig-user-id}?fields=followers_count,media_count,...
GET/{ig-user-id}/insights?metric=impressions&period=day
GET/{media-id}/insights?metric=reach,impressions
📸 Content Publishing — Graph API only
POST/{ig-user-id}/media (create container)
POST/{ig-user-id}/media_publish (publish container)
GET/{ig-user-id}/media (list posts)
💬 Comments — Graph API only
GET/{media-id}/comments
POST/{media-id}/comments (reply to comment)
POST/{comment-id}?hidden=true (hide comment)
🔍 Hashtag Search — Graph API only
GET/ig_hashtag_search?q=sunset&user_id={id}
GET/{hashtag-id}/top_media
💌 Direct Messages — Messaging API (subset of Graph API)
POST/{ig-user-id}/messages (send DM to user)
GET/{ig-user-id}/conversations (list DM threads)
GET/{conversation-id}/messages (read thread)
🔗 Account Info — Used by both
GET/me?fields=id,name,instagram_business_account
GET/{ig-user-id}?fields=id,name,username,biography

Permissions: what you need for each capability

Permissions are the clearest way to distinguish what the "Messaging API" requires vs what the rest of the Graph API needs. Every permission requires App Review for production use beyond test accounts.

PermissionCategoryWhat it enables
instagram_manage_messages Messaging API Receive DM webhook events. Send DM replies via /{ig-user-id}/messages. Access conversation history. Required for all DM automation.
pages_messaging Messaging API Subscribe to and receive webhook events via the linked Facebook Page. Without this, Instagram DM webhooks do not fire regardless of other permissions.
pages_read_engagement Both Read basic information about the linked Facebook Page and Instagram account. Required by both messaging and Graph API features for account verification.
instagram_manage_insights Graph API Read account-level and media-level analytics data including impressions, reach, engagement, follower demographics. For analytics dashboards and reporting tools.
instagram_content_publish Graph API Create and publish posts, reels, stories, and carousels on behalf of a business account. For content scheduling and publishing tools.
instagram_manage_comments Graph API Read, reply to, hide, and delete comments on posts. For comment management tools and comment-to-DM automation (needs instagram_manage_messages too for the DM send step).
instagram_basic Graph API Read basic profile information and list of posts. Often included as a base permission alongside more specific permissions for most Graph API use cases.

Webhook subscriptions: messaging vs everything else

Webhook field subscriptions are where the Messaging API and the rest of the Graph API diverge most clearly. All subscriptions go through your Facebook App's Instagram Webhooks settings, but the fields you subscribe to determine which events you receive:

Instagram webhook subscription fields — messaging vs graph
// ── MESSAGING API WEBHOOK FIELDS ───────────────────────────────────────── messages // DMs received, story replies, quick replies, media DMs messaging_referrals // Story mentions (user tags your account in their story) messaging_optins // Opt-in events for recurring notification widgets // ── NON-MESSAGING GRAPH API WEBHOOK FIELDS ─────────────────────────────── mentions // When your account is @mentioned in another account's caption/comment comments // Comments on your posts (for comment management + comment-to-DM triggers) live_comments // Comments on live videos story_insights // Story analytics events // ── CRITICAL DISTINCTION ───────────────────────────────────────────────── // Story REPLIES (user DMs a reply to your story) → "messages" field // Story MENTIONS (user tags you in their story) → "messaging_referrals" field // @mentions in captions/comments → "mentions" field (non-messaging)

The single most confusing overlap: story-related events split across two different webhook fields. A user replying to your story is a messaging event (messages field). A user tagging your account in their own story is a referral event (messaging_referrals field). An account mentioning you in a caption is a non-messaging event (mentions field). Three different webhook fields for three superficially similar interactions.

The deprecated old Instagram API — what it was and why it matters

The Stack Overflow question from 2019 that often surfaces for this query was comparing two things that don't exist in the same form today: the "Instagram API" (now fully deprecated) and the "Instagram Graph API" (current). Understanding this history explains why so many online answers are wrong.

The Legacy Instagram API was fully deprecated in March 2020. Any integration still using it has been broken for years. Any tutorial or Stack Overflow answer from before 2020 that discusses the "Instagram API" vs "Instagram Graph API" is describing a comparison that no longer exists. The current state: there is only the Instagram Graph API (with the Messaging API as a subset). There is no separate "Instagram API" to compare it to.
Timeline: Instagram API history
// 2012 — Instagram API launched (the "old" API) // Base URL: api.instagram.com, OAuth-based, allowed personal account access // Could: read posts, search hashtags, get followers (for your own account) // 2018 — Instagram Graph API launched as replacement // Base URL: graph.facebook.com, uses Facebook OAuth, business accounts only // Added: analytics, content publishing, comments management // 2020 (March) — Legacy Instagram API fully shut down // All api.instagram.com endpoints stopped working // Only graph.facebook.com works from this point forward // 2020 (ongoing) — Instagram Messaging API (Messenger API for Instagram) // DM endpoints added to the Graph API // Uses graph.facebook.com/v21.0/{ig-user-id}/messages // Today: One API. graph.facebook.com. Multiple capability subsets. // "Messaging API" = DM subset. "Graph API" = all capabilities including DMs.

Decision matrix: what to use for your use case

DM chatbot / auto-responder
Receive DMs via webhook, send replies, handle story replies and mentions. Permissions: instagram_manage_messages, pages_messaging. Webhook fields: messages, messaging_referrals.
Messaging API
Analytics dashboard
Read account-level impressions, reach, follower count, media performance. Permissions: instagram_manage_insights, instagram_basic.
Graph API
Content scheduler / publisher
Create and publish posts, reels, stories programmatically. Permissions: instagram_content_publish, instagram_basic.
Graph API
Comment management tool
Read and reply to post comments, hide spam. Webhook field: comments. Permissions: instagram_manage_comments.
Graph API
Comment-to-DM automation
Detect a keyword comment, then DM the commenter. Needs BOTH: comments webhook (Graph API) + messaging send (Messaging API). Permissions: instagram_manage_comments + instagram_manage_messages.
Both
Full Instagram management platform
All capabilities: publishing, analytics, DMs, comments, hashtag search. All permissions. Multiple webhook fields.
Both
E-commerce DM automation
Receive purchase intent DMs, send product links, order tracking replies. Pure Messaging API use case.
Messaging API
UGC (story mention) collection
Detect when users mention your brand in their stories, download media. Messaging API for the mention webhook + Graph API for media.
Both

Common questions

Is the Instagram Messaging API a separate API from the Instagram Graph API?
No. The Instagram Messaging API is a subset of endpoints, permissions, and webhook subscriptions within the Instagram Graph API. Both use the same base URL (graph.facebook.com/v21.0), the same authentication system, and the same Facebook App setup. "Instagram Messaging API" is Meta's product name for the DM-specific capabilities within the broader Graph API framework.
What permissions do I need for Instagram DMs vs Instagram analytics?
DMs (Messaging API): instagram_manage_messages + pages_messaging + pages_read_engagement. Analytics (Graph API): instagram_manage_insights + instagram_basic. Content publishing (Graph API): instagram_content_publish + instagram_basic. Comments (Graph API): instagram_manage_comments. All require App Review for production use.
What was the old Instagram API and is it still available?
The old Instagram API (Legacy Instagram API) was launched in 2012 and used the base URL api.instagram.com. It allowed access to personal accounts and used Instagram-specific OAuth. It was fully shut down in March 2020 and no longer functions. All current Instagram integrations must use the Instagram Graph API (graph.facebook.com). Any tutorial referencing "api.instagram.com" is describing a broken, deprecated system.
What webhook fields do I subscribe to for Instagram DMs?
For DMs and story replies: messages field. For story mentions (when users tag your account in their story): messaging_referrals field. For @mentions in post captions/comments: mentions field (non-messaging, Graph API). For comments on posts: comments field (Graph API). Subscribe to all fields you need in your Facebook App's Instagram Webhooks settings.
Do I need two different Facebook Apps for messaging vs non-messaging Graph API features?
No — one Facebook App handles all Instagram Graph API capabilities. You request different permissions for different features (instagram_manage_messages for DMs, instagram_manage_insights for analytics, etc.), but it's all the same App setup. You'll use one App Secret for HMAC verification, one webhook URL for all Instagram events, and one set of Page Access Tokens per account. The difference is purely in which permissions you request and which endpoints you call.
What is the Instagram Send API endpoint for DMs?
The endpoint is POST /v21.0/{ig-user-id}/messages called against graph.facebook.com. The ig-user-id is your Instagram Business Account numeric ID (also the entry[0].id value in incoming webhooks). The request body: {"recipient": {"id": "USER_IGSID"}, "message": {"text": "your reply"}}. Authenticated with a Page Access Token that has instagram_manage_messages permission.

The Messaging API webhook layer,
handled for you.

Now that you know the Messaging API is a subset of the Graph API, the next step is receiving those events on your server. SocialHook handles the HMAC verification, raw payload parsing, and event normalization — every DM, story reply, and story mention arrives as clean JSON to your endpoint.

No credit card required · $50/month after trial · Instagram + Messenger + WhatsApp