Instagram API in Mobile Apps: Graph and Basic Display
We integrate Instagram API into mobile apps. Clients often ask to "add Instagram" without specifying details. That's a mistake: choosing the wrong API eats weeks of development. Instagram Graph API (for business accounts) allows publishing content, managing comments, and viewing analytics. Instagram Basic Display API (for personal accounts) only reads user media. Let's examine the practical differences.
Choosing the right API saves up to 40% of integration time and reduces the risk of App Review rejections. Based on 20+ projects, we guarantee a working solution.
Which Instagram API to Choose for Publishing?
First, clarify: do you need to publish to Instagram or just display photos? For reading, Basic Display works. For publishing, only Graph API qualifies, and it requires a business account connected to a Facebook Page. Our experience: over 5 years working with Instagram API, 20+ projects — we ensure the right choice.
| Feature | Basic Display API | Graph API |
|---|---|---|
| Read user media | Yes | Yes |
| Publish photos and videos | No | Yes |
| Manage comments | No | Yes |
| Get insights | No | Yes |
| Supports personal accounts | Yes | No |
| Required account type | Personal | Business (Instagram Creator or Business) |
This comparison shows: Graph API is better if you need control over content. Basic Display is only for "log in with Instagram." The official Instagram documentation recommends Graph API for any interaction beyond reading.
Instagram Basic Display API: Authentication and Media Reading
Suitable for "log in with Instagram and show your photos" scenarios. OAuth authorization:
https://api.instagram.com/oauth/authorize &client_id=YOUR_APP_ID &redirect_uri=yourapp://oauth &scope=user_profile,user_media &response_type=code Fetching media:
GET https://graph.instagram.com/me/media &fields=id,caption,media_type,media_url,thumbnail_url,timestamp &access_token=... Pagination via cursor from the paging.cursors field. Token lives 60 days, refreshed with refresh_access_token. Limitation: you cannot publish, comment, or get followers. Only reading your own content.
Instagram Graph API: Publishing Today
Publishing requires an Instagram business account connected to a Facebook Page, and an app in Facebook Developer Console with instagram_content_publish permission. The API has been stable for years.
How to Get an Access Token in a Mobile App?
Instagram Graph API does not support direct authorization without Facebook SDK. Standard flow:
- Authorization via Facebook Login SDK (
FBSDKLoginKiton iOS/Android). - Request permissions
instagram_content_publish,instagram_basic. - Obtain Facebook User Access Token.
- Exchange for a long-lived token on the backend.
Facebook SDK on iOS adds 6 MB to the binary. An alternative without SDK is OAuth via ASWebAuthenticationSession / Custom Tab with manual token handling. We use SDK in 80% of projects — faster and more reliable. More about OAuth can be found on Wikipedia.
Publishing Photos: Two-Step Process
- Create a media container:
POST https://graph.facebook.com/v19.0/{ig-user-id}/media &image_url=https://yourserver.com/photo.jpg &caption=Caption with #tag &access_token=... Response: { "id": "17889615814797203" } — container ID.
- Publish the container:
POST https://graph.facebook.com/v19.0/{ig-user-id}/media_publish &creation_id=17889615814797203 &access_token=... Important: the photo must be accessible via a public HTTPS URL. Instagram downloads it to their servers. Architecture: client uploads photo to S3 → gets public URL → sends to server → server calls Graph API. We ensure proper error handling and retry logic.
Publishing Videos (Reels) and Carousels
Same two-step flow but with media_type=REELS and video_url. After creating the container, wait for video processing — check status via GET /{container-id}?fields=status_code. For carousel: three steps — create item containers for each photo, then a carousel container with children=id1,id2,id3, then publish.
| Parameter | Value |
|---|---|
| Maximum carousel items | 10 |
| Media requirements | 1080×1080, JPG/PNG |
| Video processing timeout | up to 10 seconds |
Limits and Quotas
- 25 publishes per day per account.
- 200 requests per hour per access token.
-
media_urlfrom Basic Display API lives only a few hours — do not cache. - Facebook App Review for
instagram_content_publishtakes 5–10 business days.
Webhooks for Events
Graph API supports webhooks: new comment, new mention, publish status change. Setup via Facebook Developer Console: verify token and callback URL. Requires HTTPS endpoint. In this section, we connect real-time notifications — your server receives data without polling.
Work Stages
- Analysis: determine required APIs, permissions, architecture.
- Register Facebook App + configure Instagram product.
- Implement OAuth flow on client and server.
- Develop core functionality (read, publish, webhooks).
- Testing: integration, load.
- Pass App Review.
- Deploy and document.
Timelines
Basic integration (auth + media reading) starts from 3 days. With publishing and webhooks, from 6 days, plus App Review time. Exact timelines and cost are calculated individually. Contact us for a consultation — we'll assess within 1 business day.
Common Integration Mistakes
- Forgetting to refresh the token — 401 error after 60 days.
- Not specifying the correct OAuth scope — get 403.
- Caching
media_urllonger than a few hours. - Failing App Review — missing screenshots of the functionality.
Contact us for a consultation. Get a personalized offer for your project.







