The Instagram Basic Display API is deprecated. What now?
It depends on what you used it for. If you read public profiles and posts, switch to a public data API. Openhandle returns the same profile, post, and comment data with one API key and no app review. If your app acted on behalf of its own users, move to the Instagram API with Instagram Login, which needs a business or creator account and an app review.
Basic Display stopped answering in December 2024. There is no grace path back. Every app that still calls it gets errors.
Checked September 2026 · request and response run against the API · no affiliate links
curl "https://api.openhandle.dev/v1/instagram/profiles/@northstar_forge_test/posts" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"import { OpenHandle } from '@openhandle/sdk';
const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
const page = await openhandle.instagram.profile('northstar_forge_test').posts.list();
for (const post of page.data) console.log(post.id, post.metrics.likes);{
"platform": "instagram",
"resource": "post",
"capturedAt": "2026-09-18T10:02:11Z",
"source": "live",
"data": [
{
"id": "910100000001",
"createdAt": "2026-08-09T15:30:00Z",
"author": { "id": "910000000001", "handle": "northstar_forge_test" },
"metrics": { "likes": 840, "comments": 5, "views": 12000 }
}
],
"meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}Trimmed to one post and the fields most Basic Display apps used. The full post has caption, media, hashtags, and more. The example is a Test profile, so you can run it on a free Test key.
What Basic Display did, and what replaces each part
| You used it for | Replacement |
|---|---|
| Show a public profile or feed on a website | A public data API. Openhandle profile and posts endpoints. |
| Read the logged-in user’s own media | Instagram API with Instagram Login. Needs a professional account and app review. |
| Analyze accounts you do not own | A public data API. Meta never offered this. |
| Post, comment, or reply as a user | Instagram API with Instagram Login. Openhandle is read-only. |
What changes when you switch
- —No user login flow. You call with your own API key. No OAuth dialog, no token refresh every 60 days.
- —Public accounts only. Private accounts return
PROFILE_PRIVATE. Basic Display could read a private account that logged in. A public data API cannot. - —One shape for every platform. The same post schema works for TikTok and X. Store
id, not the handle. Handles change.
When this does not work
These answers are definitive. Store them, do not retry them.
| Situation | Status | Code |
|---|---|---|
| The account is private | 403 | PROFILE_PRIVATE |
| The account is deleted, banned, or never existed | 404 | PROFILE_NOT_FOUND |
| The identifier is malformed | 400 | INVALID_IDENTIFIER |
{
"error": {
"code": "PROFILE_PRIVATE",
"message": "This profile is private.",
"requestId": "req_01j8…",
"retryable": false
}
}Every new workspace starts with 100 free live requests, no card needed. A full synthetic Test dataset covers every endpoint at no charge.
Read next
More Instagram questions
Send your agent ahead.
Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.