Guides

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

CaseResponse
Private profile403 with PROFILE_PRIVATE (a definitive, billable answer)
Profile does not exist404 with PROFILE_NOT_FOUND
Invalid identifier400 with INVALID_IDENTIFIER

See private and deleted accounts for how to handle these cleanly.

On this page