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.

instagram-upload.ts
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

Request — cURL
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'
Response — 200 OK
{
  "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

1

Create your account

Sign up for Upload-Post and grab your API key from the dashboard.

2

Connect Instagram

Authorize your Instagram account once — we manage the Instagram Graph API OAuth and reels publishing access for you.

3

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 Account

Prefer an AI agent? Use the Instagram Claude Code skill or the Instagram MCP server.