Skip to main content

How do I post to Instagram with an API, without my own Meta app?

Send a multipart/form-data request to Upload-Post's POST https://api.upload-post.com/api/upload (videos/Reels) or POST /api/upload_photos (photos and carousels) with platform[]=instagram. Upload-Post runs its own approved Meta app with the required Instagram permissions, so you skip the whole Meta developer flow: no app registration, no App Review, no permission approvals, no token refresh logic. You connect the Instagram account once via OAuth in the dashboard. It does have to be a Business or Creator account linked to a Facebook Page (that's an Instagram platform requirement).

Steps

  1. Create an account at upload-post.com and generate an API key under API Keys (Authentication).
  2. Connect the Instagram account at Manage Users, approving all requested permissions. To let your users connect their own Instagram accounts inside your product, generate a white-label JWT connect link instead.
  3. Post a Reel:
curl \
-H 'Authorization: Apikey your-api-key-here' \
-F 'video=@/path/to/your/video.mp4' \
-F 'title="Your Reel caption"' \
-F 'user="test"' \
-F 'platform[]=instagram' \
-X POST https://api.upload-post.com/api/upload

Photos and carousels

Use POST /api/upload_photos with a photos[] array (up to 10 items; Instagram also supports mixed photo + video carousels):

curl -X POST https://api.upload-post.com/api/upload_photos \
-H 'Authorization: Apikey your-api-key-here' \
-F 'photos[][email protected]' \
-F 'photos[][email protected]' \
-F 'photos[][email protected]' \
-F 'title="My mixed carousel"' \
-F 'user="test"' \
-F 'platform[]=instagram'

Useful Instagram parameters

Full list in the Upload Video reference:

ParameterWhat it doesDefault
instagram_titleInstagram-specific caption (falls back to title)title
media_typeREELS or STORIESREELS
share_to_feedAlso show the Reel in the feedtrue
share_modeTrial Reels: CUSTOM, TRIAL_REELS_SHARE_TO_FOLLOWERS_IF_LIKED, TRIAL_REELS_DONT_SHARE_TO_FOLLOWERSCUSTOM
cover_url / cover_imageCustom Reel cover (URL or binary JPEG ≤ 8 MB)none
user_tagsUsers to tag, e.g. "@user1, user2" (video posts)none
collaboratorsComma-separated collaborator usernamesnone
location_idInstagram location IDnone
first_commentAuto-post a first comment after publishingnone
scheduled_dateISO-8601 date to schedule the postnone

Stories: send media_type="STORIES" on either endpoint (video or photo).

Limits and gotchas

  • Account type: personal Instagram accounts aren't supported by the Instagram API. Switch to Business/Creator and link a Facebook Page. Error 400 on connect usually means a missing Page or unverified account (FAQ).
  • Daily cap: 50 Instagram posts per connected account per rolling 24 h (upload limits).
  • Video specs: max 300 MB. See Video Requirements and Photo Requirements.
  • Photo tagging uses JSON user_tags with x/y coordinates; see Upload Photo.