Skip to Content

Instagram Upload API

This section details how to upload photos, videos, reels, stories, and carousels to Instagram using the API.

Base URL

https://api.multi-upload-tool.com/api/v1

Authentication

All requests require an API Token in the header: x-api-key: YOUR_API_TOKEN


Requirements

Instagram Video Requirements

  • Container Format: MOV or MP4 (MPEG-4 Part 14), no edit lists, moov atom at head.
  • Audio Codec: AAC, 48 kHz max, 1-2 channels, 128 kbps.
  • Video Codec: HEVC or H264, progressive scan, closed GOP, 4:2:0 chroma subsampling.
  • Video Bitrate: VBR, max 25 Mbps.
  • Frame Rate: 23-60 FPS.
  • Resolution: Max width 1920px.
  • Aspect Ratio: 0.01:1 to 10:1 (Recommended 9:16 to avoid cropping).
  • Duration: 3 seconds to 15 minutes.
  • File Size: Max 300 MB.

Instagram Photo Requirements

  • Formats: PNG, JPEG, GIF.
  • Media Types: IMAGE (Feed), STORIES.
  • Carousels: Up to 10 images/videos.

Upload Photo

Upload a single photo or a story to a connected Instagram account.

Endpoint

POST /upload

Content-Type

multipart/form-data

Parameters

Query Parameters

ParameterTypeRequiredDescription
asyncstringNoDefault "true". If "false", the API waits for upload completion.

Body Parameters

ParameterTypeRequiredDescription
accountIdstringYesThe ID of the connected Instagram account.
photoFileYesThe image file to upload.
titlestringNoThe caption for the post.
media_typestringNoIMAGE (Feed), STORIES. Auto-detected from file type and count if omitted.
schedule_datestringNoISO 8601 date string to schedule the post (e.g., 2025-12-25T10:00:00Z).
location_idstringNoInstagram Location ID to tag a place.
collaboratorsstringNoComma-separated list of usernames to invite as collaborators.
user_tagsstringNoComma-separated list of usernames to tag in the image.

Example Request (Photo)

curl -X POST https://api.multi-upload-tool.com/api/v1/upload \ -H "x-api-key: YOUR_API_TOKEN" \ -F "accountId=123" \ -F "photo=@/path/to/image.jpg" \ -F "title=Hello Instagram! #vibes" \ -F "media_type=IMAGE" \ -F "location_id=123456789"

Upload Video

Upload a single video, reel, or video story to a connected Instagram account.

Endpoint

POST /upload

Content-Type

multipart/form-data

Parameters

Query Parameters

ParameterTypeRequiredDescription
asyncstringNoDefault "true". If "false", the API waits for upload completion.

Body Parameters

ParameterTypeRequiredDescription
accountIdstringYesThe ID of the connected Instagram account.
videoFileYesThe video file to upload.
titlestringNoThe caption for the post (Reels/Feed).
media_typestringNoVIDEO, REELS, STORIES. Default: REELS.
schedule_datestringNoISO 8601 date string to schedule the post.
cover_urlstringNoCustom cover image URL for Reels/Videos.
location_idstringNoInstagram Location ID to tag a place.
collaboratorsstringNoComma-separated list of usernames to invite as collaborators.
share_to_feedbooleanNoWhether to share Reels to Feed. Default: true.
audio_namestringNoReels only. Custom display title for the Reel’s original audio (renames the audio shown to viewers — can only be set once). Does not attach a track from Instagram’s music library; the Instagram Platform API does not expose music selection for any media type.
thumb_offsetstringNoTime offset (in ms) for the video thumbnail.

Example Request (Video/Reel)

curl -X POST https://api.multi-upload-tool.com/api/v1/upload \ -H "x-api-key: YOUR_API_TOKEN" \ -F "accountId=123" \ -F "video=@/path/to/video.mp4" \ -F "title=My new reel! 🎥" \ -F "media_type=REELS" \ -F "cover_url=https://example.com/cover.jpg"

Upload a carousel (album) containing up to 10 photos and/or videos.

Endpoint

POST /upload

Content-Type

multipart/form-data

Parameters

Query Parameters

ParameterTypeRequiredDescription
asyncstringNoDefault "true". If "false", the API waits for upload completion.

Body Parameters

ParameterTypeRequiredDescription
accountIdstringYesThe ID of the connected Instagram account.
photoFile[]YesArray of files (images and/or videos). Use the key photo for all items.
titlestringNoThe caption for the carousel.
schedule_datestringNoISO 8601 date string to schedule the post.
location_idstringNoInstagram Location ID to tag a place.
collaboratorsstringNoComma-separated list of usernames to invite as collaborators.
user_tagsstringNoComma-separated list of usernames to tag in the first image.

Note on music: The Instagram Platform API does not allow attaching music from Instagram’s library to a carousel (or to any other media type). There is no audio_id / music_id parameter — this is an Instagram-side limitation. To add a song from the Instagram music library, open the published post in the Instagram app and add music there.

curl -X POST https://api.multi-upload-tool.com/api/v1/upload \ -H "x-api-key: YOUR_API_TOKEN" \ -F "accountId=123" \ -F "photo=@/path/to/photo1.jpg" \ -F "photo=@/path/to/video2.mp4" \ -F "photo=@/path/to/photo3.jpg" \ -F "title=My mixed media dump 📸🎥"

Example Response

{ "success": true, "message": "Upload queued successfully", "data": { "uploadId": 789, "status": "pending", "jobId": "job_456" } }