Instagram Upload API Post Reels, Stories & Carousels Programmatically
The Instagram Graph API reels publishing flow without the OAuth headache. One REST endpoint to upload Reels, Stories, photo carousels and Trial Reels — with collaborators, custom covers, scheduling and user tags.
import { UploadPost } from 'upload-post';
const uploader = new UploadPost('your-api-key');
await uploader.upload('reel.mp4', {
title: 'My Instagram Reel',
platforms: ['instagram']
}); Instagram Posting API — Everything Included
A complete API to automate your Instagram content
Instagram Reels API
Upload Reels to Instagram with one REST call. Send a local file or a public video URL — we handle the Graph API reels publishing flow and transcoding.
Instagram Story Uploader
Post Stories programmatically with media_type=STORIES — upload Instagram Stories from images or short videos via API.
Photo Carousels
Publish multi-image photo carousels (up to 10 photos) and single images through the photo endpoint, all from code.
Trial Reels
Test content with non-followers first using share_mode — auto-share to followers if it performs, or keep it private.
Tags, Covers & Collaborators
Add collaborators, user tags, a location, a custom cover (cover_url / cover_image) and a renamed audio track per Reel.
Schedule & Queue
Schedule posts with scheduled_date or drop them into your auto-publishing queue with add_to_queue.
Upload a Video to Instagram via API
One POST request to /api/upload — send a file or a public URL
curl -X POST https://api.upload-post.com/api/upload \
-H 'Authorization: Apikey your-api-key-here' \
-F 'user=my-profile' \
-F 'platform[]=instagram' \
-F 'video=@/path/to/reel.mp4' \
-F 'title=New Reel just dropped!' \
-F 'media_type=REELS' \
-F 'share_to_feed=true' \
-F 'collaborators=@brandpartner' {
"success": true,
"results": {
"instagram": {
"success": true,
"url": "https://instagram.com/p/...",
"container_id": "17891234567890",
"video_was_transcoded": true
}
},
"usage": { "count": 12, "limit": 100 }
}
Long uploads switch to background automatically — poll the
Upload Status
endpoint with your request_id. Full reference in the
Upload Video API docs.
Want a full walkthrough? Read our step-by-step guide to automate Instagram posts with code, scheduling and no-code workflows.
Pro tip: use Trial Reels to test before you commit
Set share_mode=TRIAL_REELS_SHARE_TO_FOLLOWERS_IF_LIKED to show a Reel to
non-followers first. If it performs well within 72 hours, Instagram automatically shares it with your
followers — only you can see it was ever a Trial. It is a low-risk way to validate hooks and topics before they hit your
main audience.
Rule of thumb: use CUSTOM (the default) for content you are confident in,
and a TRIAL_REELS_* mode when you want real-world performance data first. Trial Reels are
available for public accounts with 1,000+ followers and don't support collaborators.
Instagram API Parameters
The most-used fields for the Instagram upload endpoint
| Parameter | Type | Required | Description |
|---|---|---|---|
| media_type | String | No | REELS (default) or STORIES — choose between publishing a Reel or an Instagram Story. |
| share_mode | String | No | Reel posting mode: CUSTOM (regular Reel), TRIAL_REELS_SHARE_TO_FOLLOWERS_IF_LIKED or TRIAL_REELS_DONT_SHARE_TO_FOLLOWERS. |
| share_to_feed | Boolean | No | Whether to share the Reel to the feed (regular Reels only, not Trial Reels). Defaults to true. |
| collaborators | String | No | Comma-separated list of collaborator usernames (not available for Trial Reels). |
| cover_url / cover_image | URL / File | No | Custom video cover — a public URL (cover_url) or a binary JPEG ≤ 8MB (cover_image). cover_url takes precedence. |
| audio_name | String | No | Rename the original audio track embedded in your Reel video (Reels only). |
| user_tags | String | No | Comma-separated usernames to tag on the Reel (e.g. "@user1, user2"). No coordinates needed for video tags. |
| location_id | String | No | Instagram location ID to attach to the post. |
| thumb_offset | String | No | Timestamp offset (in milliseconds) of the video frame used as the thumbnail. |
| instagram_title | String | No | Caption for the Instagram post. Falls back to the global title field. |
Photo carousels are published via the photo endpoint. See the complete parameter list in the API documentation.
Start Posting to Instagram in Minutes
Three steps to integrate the Instagram Upload API
Create your account
Sign up for Upload-Post and grab your API key from the dashboard.
Connect Instagram
Authorize your Instagram account once — we manage the Instagram Graph API OAuth and reels publishing access for you.
Upload programmatically
POST to /api/upload with platform[]=instagram and your video or photos. Done.
Instagram Upload API — FAQ
Common questions about posting to Instagram programmatically
Is there an Instagram upload API?
Yes. Upload-Post exposes an Instagram upload API through a single REST endpoint (POST /api/upload). You send your video file or a public URL with platform[]=instagram and we publish it to the connected Instagram account using the Instagram Graph API reels publishing flow. You avoid building your own Facebook/Instagram developer app, OAuth flow and Graph API container/publish polling.
How do I post a Reel to Instagram via API?
Send a multipart POST request to https://api.upload-post.com/api/upload with your API key in the Authorization header, user (your profile), platform[]=instagram and the video field (a file or a public URL). media_type defaults to REELS, so a video is published as a Reel automatically. The API returns a container_id and the published URL. A working curl and JavaScript example is shown above.
Can I upload Instagram Stories programmatically?
Yes. Use this as an Instagram story uploader by setting media_type=STORIES on the upload request. You can post Stories from an image or a short video. Everything else (user, platform[]=instagram, the media file) stays the same as a Reel upload.
Can I post photo carousels to Instagram via API?
Yes. Photo posts — single images and multi-image carousels of up to 10 photos — are supported through the photo endpoint (/api/upload_photos) with platform[]=instagram. Note that tagging users on photo posts requires x/y coordinates, which is different from video Reels where a comma-separated username list is enough.
What are Trial Reels and can I create them via API?
Trial Reels let you test content with non-followers first before sharing with your followers (available for public accounts with 1,000+ followers). Set share_mode=TRIAL_REELS_SHARE_TO_FOLLOWERS_IF_LIKED to auto-share to followers if the Reel performs well within 72 hours, or share_mode=TRIAL_REELS_DONT_SHARE_TO_FOLLOWERS to keep it to non-followers and decide later in-app. Collaborators cannot be added to Trial Reels.
Can I schedule Instagram posts with the API?
Yes. Add a scheduled_date (ISO-8601, up to 365 days in the future) to schedule the post — the API returns 202 Accepted with a job_id — or use add_to_queue to drop it into your next available auto-publishing slot.
Do I need a Facebook/Instagram developer app?
No. Upload-Post operates an approved Instagram Graph API integration, so you connect your Instagram account once and start posting to Instagram programmatically — no need to create a Meta developer app, request advanced permissions, or pass app review.
How much does the Instagram upload API cost?
You can create an account and an API key for free with no credit card. Connecting Instagram and posting Reels, Stories and carousels at scale is covered by the paid plans. See the pricing page for current limits and tiers.
Ready to automate your Instagram uploads?
Start posting Reels, Stories and carousels to Instagram programmatically today. No credit card required.
Create Free AccountPrefer an AI agent? Use the Instagram Claude Code skill or the Instagram MCP server.