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
| Parameter | Type | Required | Description |
|---|---|---|---|
async | boolean | No | Default true. If false, the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected Instagram account. |
photo | File | Yes | The image file to upload. |
title | string | No | The caption for the post. |
media_type | string | No | IMAGE (Feed), STORIES. Default: IMAGE. |
scheduledDate | string | No | ISO 8601 date string to schedule the post (e.g., 2025-12-25T10:00:00Z). |
location_id | string | No | Instagram Location ID to tag a place. |
collaborators | string | No | Comma-separated list of usernames to invite as collaborators. |
user_tags | string | No | Comma-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
| Parameter | Type | Required | Description |
|---|---|---|---|
async | boolean | No | Default true. If false, the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected Instagram account. |
video | File | Yes | The video file to upload. |
title | string | No | The caption for the post (Reels/Feed). |
media_type | string | No | VIDEO, REELS, STORIES. Default: REELS. |
scheduledDate | string | No | ISO 8601 date string to schedule the post. |
cover_url | string | No | Custom cover image URL for Reels/Videos. |
location_id | string | No | Instagram Location ID to tag a place. |
collaborators | string | No | Comma-separated list of usernames to invite as collaborators. |
share_to_feed | boolean | No | Whether to share Reels to Feed. Default: true. |
audio_name | string | No | Custom name for the audio track (Reels). |
thumb_offset | string | No | Time 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 Carousel
Upload a carousel (album) containing up to 10 photos and/or videos.
Endpoint
POST /upload
Content-Type
multipart/form-data
Parameters
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
async | boolean | No | Default true. If false, the API waits for upload completion. |
Body Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
accountId | string | Yes | The ID of the connected Instagram account. |
photo | File[] | Yes | Array of files (images and/or videos). Use the key photo for all items. |
title | string | No | The caption for the carousel. |
scheduledDate | string | No | ISO 8601 date string to schedule the post. |
location_id | string | No | Instagram Location ID to tag a place. |
collaborators | string | No | Comma-separated list of usernames to invite as collaborators. |
user_tags | string | No | Comma-separated list of usernames to tag in the first image. |
Example Request (Carousel)
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"
}
}