Get Instagram profile data
One GET request returns a normalized Instagram profile (followers, bio, verification, and business status) without Graph API approval.
To get Instagram profile data, call the profile endpoint with a handle or platform ID and your API key. One request, one normalized JSON response, no Graph API approval process.
curl "https://api.openhandle.dev/v1/instagram/profiles/@instagram" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"{
"platform": "instagram",
"resource": "profile",
"capturedAt": "2026-08-06T12:04:11Z",
"source": "live",
"data": {
"id": "25025320",
"handle": "instagram",
"displayName": "Instagram",
"bio": "Discover what's next.",
"avatar": {
"url": "https://media.openhandle.dev/…",
"expiresAt": null
},
"externalUrl": null,
"isVerified": true,
"isPrivate": false,
"isBusiness": true,
"category": null,
"metrics": {
"followers": 690128233,
"following": 105,
"posts": 8064
}
}
}What you get
Every field above, every time, in the same shape. Metrics Instagram does not
expose come back as null, never 0. See
metric semantics. The avatar URL is
proxied through media.openhandle.dev so it stays stable while you process
it.
Identifiers
Look up by handle (instagram) or by platform ID (25025320). Handles
change; IDs do not. Store the id from the response for long-term
references, then use it for later lookups.
Freshness and price
Add ?freshness=live|24h|7d|30d to control how fresh the data must be. The
default is 24h. A 24-hour cache hit costs $0.0005. See
freshness and caching and
pricing.
Edge cases
| Case | Response |
|---|---|
| Private profile | 403 with PROFILE_PRIVATE (a definitive, billable answer) |
| Profile does not exist | 404 with PROFILE_NOT_FOUND |
| Invalid identifier | 400 with INVALID_IDENTIFIER |
See private and deleted accounts for how to handle these cleanly.