OmniPost publishes to Instagram using the Instagram API with Instagram Login — no connected Facebook Page is required from your end users.
Scopes OmniPost requests
| Scope | Purpose |
|---|---|
| instagram_business_basic | Read the connected account's profile (username, ID) to display in your dashboard. |
| instagram_business_content_publish | Create media containers and publish them to the account's feed. |
How OmniPost publishes
Instagram uses a container-then-publish model. When you call POST /v1/upload with "platforms": ["instagram"], OmniPost:
- Creates a media container from your media URL and caption.
- Polls the container until it reports ready (or errors).
- Publishes the container, producing the live post.
All of this happens server-side inside the processing window of the target — you only see pending → processing → published/failed.
Media constraints
| Type | Formats | Limits |
|---|---|---|
| Image | JPEG, PNG | ≤8MB. Aspect ratio 0.1:1–10:1 (9:16 to 1.91:1 recommended). |
| Video (feed/Reels) | MOV, MP4 (H.264/HEVC, AAC audio) | ≤1GB, 23–60fps. Reels: 3s–15min. Stories: 3s–60s. |
| Carousel | Mixed image/video children | Up to 10 items. |
Quirks to design around
- Containers expire in 24 hours. If a container isn't published within 24h of creation (rare, but possible under sustained platform-side delay), the target fails with
container_expired— OmniPost retries the container creation automatically before surfacing this. - Media must be URL-reachable. Instagram's container API pulls from a URL you provide (
image_url/video_url) — it does not accept a raw file upload, so the media you pass toPOST /v1/uploadmust already be hosted publicly. - No Facebook Page required with Instagram API with Instagram Login — a standalone Instagram professional account is sufficient.
Rate limits
Instagram enforces ~50 published posts per rolling 24-hour window per connected account, plus a cap of 400 container creations/24h. Exceeding it fails the affected target with platform_rate_limited — see Rate Limits.
App review, in brief
Publishing in live mode requires your Meta app to complete Business Verification and pass App Review for Advanced Access to both scopes above, including a screencast and written use case per permission, with the app in Live Mode. Meta also requires a Deauthorize Callback URL and a Data Deletion Callback (or Instructions) URL configured on your app, since it can share the same Meta App object as Threads.
None of this blocks development — use a sandbox key to build and test your full Instagram publishing flow before Meta approves your app.