Back to blog General

Instagram API Changes in 2026 Explained

· 7 min read · By Fahim Reza

If your Instagram feed silently stopped updating sometime after late 2024, you didn't break anything — Instagram did. The API that powered the overwhelming majority of "show my Instagram on my website" integrations was switched off, and its replacements work very differently.

This post is the technical deep-dive: what actually changed at the API layer, why personal accounts no longer work, and exactly how the Divi Instagram Feed plugin talks to Meta's current APIs under the hood.


1. The big break: Basic Display API end-of-life

The Instagram Basic Display API reached end-of-life on December 4, 2024. It is not deprecated-but-working — it is off. Any integration still calling graph.instagram.com Basic Display endpoints with personal-account tokens now fails outright.

Basic Display was the easy path: a personal Instagram account, a simple OAuth consent, a long-lived token, and /me/media. That simplicity is gone, and there is no successor that supports personal accounts. This is the single most important fact for anyone embedding Instagram in 2026:

Personal Instagram accounts can no longer be accessed via any official API. You need a Professional account — Business or Creator.


2. The 2026 landscape: two APIs, not one

Meta now exposes Instagram through two distinct products. Choosing the right one is the whole game.

A. Instagram API with Instagram Login

This is the direct functional successor to Basic Display, built for "display my own content" use cases. Key properties:

  • Host: graph.instagram.com (largely unversioned for these endpoints).
  • Account types: Instagram Business or Creator. Crucially, Creator accounts do not require a linked Facebook Page — this is the lightweight path.
  • Login: "Business Login for Instagram" — the user authenticates with Instagram directly, no Facebook account in the loop.
  • Core scope for feeds: instagram_business_basic (read profile + media). You do not need messaging, publishing, or insights scopes for a display widget — and requesting them will slow down App Review.

B. Instagram Graph API

The full-featured API for Business/Creator accounts that are connected to a Facebook Page.

  • Host: graph.facebook.com, versioned (e.g. /v25.0/).
  • Login: Facebook Login; you traverse me/accounts → Page → instagram_business_account.
  • Scopes: instagram_basic, pages_show_list, pages_read_engagement.
  • Use it when: the account is a Business account already managed through a Facebook Page.

How Divi Instagram Feed maps to this

The plugin supports both, selected by an account_type flag, in includes/ig/api.php:

private const INSTAGRAM_API_URL = 'https://graph.instagram.com/';
private const FACEBOOK_API_URL  = 'https://graph.facebook.com/v23.0/';
private const DEFAULT_MEDIA_FIELDS =
  'id,caption,media_type,media_url,permalink,thumbnail_url,timestamp,'
  . 'username,comments_count,like_count,children{media_url,media_type,thumbnail_url}';
  • Creator / "Instagram Login" pathgraph.instagram.com/me for the profile and graph.instagram.com/me/media for posts.
  • Business / Graph API pathgraph.facebook.com/v{ver}/{ig-user-id}/media, after resolving the Instagram Business account from the connected Page.

Both request the same media field set, so the rendered output is identical regardless of which API served it.


3. Account types: the rule that trips everyone up

Account typeSupported in 2026?Via which API
Personal❌ NoNone (Basic Display is dead)
Creator✅ YesInstagram API with Instagram Login
Business✅ YesInstagram API with Instagram Login or Instagram Graph API

The practical consequence for any plugin: if a user tries to connect a personal account, Instagram will simply refuse to issue a usable token. There is no code workaround — the only fix is for the user to convert their account to Professional (Settings → Account type and toolsSwitch to Professional account → Creator). Conversion is free, reversible, and does not change the public appearance of the profile.

This is why Divi Instagram Feed now shows a persistent, page-scoped notice on its Accounts dashboard explaining the Professional-account requirement before a user attempts to connect — turning a confusing failed-token error into an actionable instruction.


4. Tokens: long-lived, but not forever

Both APIs use long-lived access tokens valid for ~60 days. They do not auto-renew — you must refresh them while they're still valid.

For the Instagram-Login path the refresh endpoint is:

GET https://graph.instagram.com/refresh_access_token
      ?grant_type=ig_refresh_token
      &access_token={long-lived-token}

A refreshed token must be requested before expiry (best practice: every 50–55 days; a token that has already expired cannot be refreshed — the user has to reconnect).

Divi Instagram Feed automates this with WordPress cron. It registers a custom ~30-day schedule and a refresh handler:

add_action('divi_instagram_feed_tokens_refresh', [$this, 'refresh_access_tokens']);
// ...
wp_schedule_event(time(), 'monthly', 'divi_instagram_feed_tokens_refresh');

On each run it iterates connected accounts and calls refresh_access_token for the Instagram-Login accounts, storing the new token back in the divi_instagram_feed_accounts option. Because the refresh interval (~30 days) is well inside the 60-day token life, tokens stay valid without any user intervention — as long as the site's WP-Cron actually fires (worth noting for low-traffic sites that may need a real system cron).


5. Graph API versioning (don't pin and forget)

The Instagram Graph API path runs on versioned Facebook endpoints. Meta ships a new version roughly quarterly and supports each for about two years:

VersionReleased
v25.0Feb 18, 2026
v24.0Oct 8, 2025
v23.0May 29, 2025
v22.0Jan 21, 2025

The current plugin build pins v23.0. That still works today, but it's on a deprecation clock (≈ mid-2027). A healthy maintenance practice — for any Graph API integration — is to track Meta's changelog and bump the version constant ahead of the two-year window rather than waiting for calls to start 4xx-ing. (The graph.instagram.com Instagram-Login endpoints are effectively unversioned, so only the Business/Graph path needs this attention.)


6. Fetching media: the request that builds the feed

Once an account is connected, rendering a feed is a single fielded request:

# Instagram Login (Creator/Business, no Page)
GET https://graph.instagram.com/me/media
      ?fields=id,caption,media_type,media_url,permalink,thumbnail_url,
              timestamp,username,comments_count,like_count,
              children{media_url,media_type,thumbnail_url}
      &limit={n}&access_token={token}

# Instagram Graph API (Business via Page)
GET https://graph.facebook.com/v25.0/{ig-user-id}/media?fields=...&access_token={token}

Notes that matter in production:

  • media_type is one of IMAGE, VIDEO, CAROUSEL_ALBUM. For video, render thumbnail_url (not media_url); for carousels, descend into children.
  • like_count / comments_count are available on owned-account media and power the hover-overlay stats — but treat them as optional and degrade gracefully if absent.
  • Rate limits are real: roughly 200 calls/hour per Instagram account. A feed widget must cache aggressively rather than calling the API on every page view.

Divi Instagram Feed caches API responses in WordPress transients (prefixed dif_insta_feed_*) with a configurable TTL, and ships a Cache Manager admin page to inspect/clear them. This keeps a high-traffic page from ever approaching the hourly limit, since visitors are served the cached payload and the API is only hit when the cache expires.


7. The plugin-distribution wrinkle: App Review & Advanced Access

This part is invisible to end users but decisive for any plugin developer.

A WordPress plugin is one Meta app used by thousands of unrelated site owners, each connecting their own Instagram account. Meta's permission model has two tiers:

  • Standard Access — only works for users with a role on the app (you and your testers).
  • Advanced Access — works for the general public.

Without Advanced Access on instagram_business_basic (and the Business-path scopes), every customer connection fails. Advanced Access is granted only through App Review, which requires:

  • Business verification, a Live-mode app, privacy policy, and a data-deletion path.
  • A use-case description scoped to exactly what the app does (read profile + media to display a feed).
  • A screencast showing the full flow — OAuth consent screen included — and the data actually rendering on a front-end page.
  • Reviewer-reproducible test instructions, demoed with a Creator or Business account (never a personal one).

Least-privilege is not just good hygiene here; requesting scopes the demo doesn't visibly exercise is a common rejection reason.


8. Migration checklist

If you're moving an old Basic Display integration (or just reconnecting a broken feed):

  1. Convert the Instagram account to Professional (Creator is enough; no Facebook Page needed for the Instagram-Login path).
  2. Reconnect through the plugin — old personal-account tokens are dead and cannot be refreshed.
  3. Confirm WP-Cron is firing so token refresh actually runs every ~30 days; on low-traffic sites, wire a real system cron to wp-cron.php.
  4. Set a sane cache TTL — long enough to stay well under 200 calls/hour, short enough that new posts appear reasonably quickly.
  5. (Developers) Track Meta's changelog and bump the Graph API version constant before the ~2-year deprecation window closes.

Summary

The 2024 Basic Display shutdown ended the era of frictionless personal-account embeds. In 2026 the rules are simple, even if the migration isn't: Professional account, correct API for the account type, long-lived tokens refreshed on a schedule, aggressive caching, and — for plugin authors — Advanced Access via App Review. Divi Instagram Feed implements all five so the site owner's only required action is the one no code can do for them: switch to a Professional account and click Connect.


Sources

Every plugin.
One payment. Forever.

Get all 9 DiviPeople plugins — plus every future release. Buy once, use on unlimited sites, keep updates & support for life.

Learn about Once