Integrating Instagram API in a Mobile Application
Instagram API in 2024 is two different products with fundamentally different capabilities. Instagram Basic Display API (for personal accounts) and Instagram Graph API (for business accounts and creators). The first allows only reading user media. The second allows publishing, comment management, insights. Understanding this distinction upfront is critical—discovering needed functionality is unavailable late in development causes problems.
Instagram Basic Display API
Suitable for "log in with Instagram and show my photos."
Authorization via OAuth:
https://api.instagram.com/oauth/authorize
?client_id=YOUR_APP_ID
&redirect_uri=yourapp://oauth
&scope=user_profile,user_media
&response_type=code
Get media:
GET https://graph.instagram.com/me/media
?fields=id,caption,media_type,media_url,thumbnail_url,timestamp
&access_token=...
Pagination via cursor from paging.cursors. Token lives 60 days, refresh via refresh_access_token endpoint.
Basic Display API limitations—no publishing, no commenting, no followers access. Read only.
Instagram Graph API
Publishing requires business Instagram account linked to Facebook Page, app in Facebook Developer Console with instagram_content_publish rights.
Publishing Photo
Two-step process:
- Create media container:
POST https://graph.facebook.com/v19.0/{ig-user-id}/media
?image_url=https://yourserver.com/photo.jpg
&caption=Post caption #tag
&access_token=...
Response: { "id": "17889615814797203" } — container ID.
- Publish container:
POST https://graph.facebook.com/v19.0/{ig-user-id}/media_publish
?creation_id=17889615814797203
&access_token=...
Important: photo must be accessible at public HTTPS URL. Instagram downloads it to its servers. Can't upload file directly—URL only. Architecture: client uploads to S3 → gets public URL → sends to server → server calls Graph API.
Video Publishing (Reels)
Same two-step, but with media_type=REELS and video_url. After container creation, wait for processing—check status via GET /{container-id}?fields=status_code.
Carousel (Multiple Photos)
Three steps: create item container per photo → create carousel container with children=id1,id2,id3 → publish.
Getting Token in Mobile App
Instagram Graph API doesn't support direct mobile app authorization without Facebook SDK. Standard flow:
- Authorize via Facebook Login SDK (
FBSDKLoginKiton iOS/Android). - Request
instagram_content_publish,instagram_basicpermission. - Get User Access Token Facebook.
- Exchange for long-lived token via backend.
Facebook SDK on iOS—6 MB to binary. Alternative without SDK—OAuth via ASWebAuthenticationSession / Custom Tab with manual handling.
Limits and Quotas
- 25 posts per day per account (not per app).
- 200 API requests per hour per access token.
-
media_urlfrom Basic Display API lives only hours—don't cache long-term. - App must pass App Review in Facebook if requesting
instagram_content_publish—5–10 business days.
Webhooks
Graph API supports webhooks for events: new comment, new mention, post status change. Configure in Facebook Developer Console: provide verify token and callback URL. Needs public HTTPS endpoint on your server.
Work Phases
Register Facebook App + configure Instagram product → OAuth flow with needed permissions → implement API calls via backend → pass App Review for production access.
Timeline
Basic integration (authorization + read media): 2–3 days. With content publishing and webhooks: 4–6 days plus Meta App Review time. Pricing calculated individually.







