Platform Guide10 min readApr 3, 2026

How to Post Instagram Reels via API — Complete Guide

Publish Reels programmatically with captions, location tags, collaborator invites, alt text, and scheduled delivery. One API call or SDK method replaces the entire manual upload flow.

Why Reels are the highest-leverage format on Instagram

Instagram's algorithm has been tilted toward short-form video since late 2022, and the gap keeps widening. In 2026, Reels consistently reach 2-3x more non-followers than static feed posts. The Explore page is dominated by Reels. The search results surface Reels first. Even the main feed now interleaves Reels between photo posts from accounts the viewer already follows.

The numbers back it up. According to Meta's own data, 90% of Instagram accounts interact with at least one Reel every week. For brands that publish Reels consistently, follower growth rate averages 1.4x higher than brands that stick to static images. Reels also drive the highest save rates of any content format, which Instagram's algorithm treats as a strong positive signal.

If you are managing more than a handful of accounts, publishing Reels through the phone app does not scale. You cannot schedule in bulk, you cannot reuse templates, and you cannot integrate with your content pipeline. That is where the API comes in.

API publishing vs. the Instagram app

Here is the practical difference between manual and programmatic Reel publishing. The gap is not just convenience — it is capacity.

Manual (Phone App)

  • One Reel at a time, per device
  • No scheduling — post now or set a reminder
  • Cannot pull video from a CDN or asset pipeline
  • No API webhook for post status tracking
  • Copy-pasting captions across accounts

API (CodivUpload)

  • Batch publish to multiple accounts in one request
  • Schedule Reels for exact UTC timestamps
  • Pull video from any public URL or your CDN
  • Real-time status updates via webhook or dashboard
  • Platform overrides — different caption per platform

An agency managing 20 Instagram accounts can schedule an entire week of Reels in a single API loop. The same task takes roughly 3 hours per week in the app — opening each account, uploading each video, typing each caption, setting each publish time. The API reduces that to a script that runs in under a minute.

TypeScript SDK

Publishing a Reel with the SDK

The CodivUpload TypeScript SDK wraps the REST API with type-safe methods. Install with npm install codivupload and initialize with your API key.

publish-reel.ts
import CodivUpload from "codivupload";

const codiv = new CodivUpload("cdv_...");

const reel = await codiv.posts.create({
  platforms: ["instagram"],
  description: "Behind the scenes of our new product #reels #bts",
  media_urls: ["https://cdn.example.com/bts-video.mp4"],
  profile_name: "my_brand",
  instagram_media_type: "REELS",
  instagram_location_id: "123456789",
  instagram_alt_text: "Team working on product in office",
  instagram_collaborators: ["partner_brand"],
});

// reel.id → "post_9f3a7b..."
// reel.status → "processing" → "published"

The SDK returns a post object immediately with a processing status. Once Instagram finishes ingesting the video (typically 10-30 seconds for clips under 60s), the status updates to published. You can poll the status via codiv.posts.get(reel.id) or watch for real-time updates in the dashboard.

REST API

Publishing via REST API (curl)

If you prefer raw HTTP requests or are working in a language without an SDK, here is the equivalent curl command. The endpoint accepts JSON and returns the same post object.

publish-reel.sh
# Publish an Instagram Reel with all platform params
curl -X POST \
  https://api.codivupload.com/v1/posts \
  -H 'Authorization: Bearer cdv_YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "profile_name": "my_brand",
    "platforms": ["instagram"],
    "post_type": "video",
    "description": "Behind the scenes of our new product #reels #bts",
    "media_urls": ["https://cdn.example.com/bts-video.mp4"],
    "instagram_media_type": "REELS",
    "instagram_location_id": "123456789",
    "instagram_alt_text": "Team working on product in office",
    "instagram_collaborators": ["partner_brand"],
    "instagram_share_to_feed": true
  }'

The response includes a post_id and per-platform status. Instagram's Content Publishing API processes the video asynchronously, so the initial status will be processing. CodivUpload polls Instagram internally and updates the post status to published once the Reel is live.

What it looks like in the dashboard

When you schedule a Reel through the API or the CodivUpload composer, it appears in the dashboard as a post card with full metadata. Here is a preview of a scheduled Reel.

my_brand

Instagram

REELS

bts-video.mp4

1080 x 1920 · 0:34

Behind the scenes of our new product #reels #bts

@partner_brandLocation taggedAlt text added
Apr 4, 2026 · 14:00 UTC
Scheduled

The post card updates in real time. Once the scheduled time arrives, the status changes from "Scheduled" to "Processing" to "Published" — no page refresh needed.

Instagram Reels content specifications

Getting the specs right is the difference between a Reel that looks polished and one that gets auto-cropped into something unrecognizable. These are the current requirements as of April 2026.

SpecValue
Aspect ratio9:16 (vertical)
Duration0-90 seconds
File sizeMax 1 GB
FormatsMP4, MOV
Caption2,200 chars max
Hashtags30 max (3-5 recommended)
Cover imageAuto-generated from video

Resolution matters. While Instagram technically accepts a range of resolutions, 1080 x 1920 pixels (9:16 at 1080p) gives the sharpest result. Lower resolutions get upscaled and appear blurry on high-DPI devices. Higher resolutions get downscaled, wasting upload bandwidth.

All Instagram-specific API parameters

These parameters are prefixed with instagram_ and apply only when "instagram" is in the platforms array. They are validated by Zod on the server — any unknown field is silently dropped.

ParameterTypeDescription
instagram_media_typestringSet to "REELS" to publish as a Reel. Also accepts "STORIES" for ephemeral content.
instagram_location_idstringFacebook Place ID to geo-tag the Reel. Look up valid IDs via the Facebook Pages Search API.
instagram_alt_textstringDescriptive alt text for accessibility. Improves discoverability and WCAG compliance.
instagram_collaboratorsstring[]Up to 3 Instagram usernames. The Reel appears on their profile once they accept the invite.
instagram_user_tagsstring[]Tag specific Instagram users within the media. Separate from collaborator invites.
instagram_media_urlsstring[]Platform-specific media URLs that override the top-level media_urls for Instagram only.
instagram_share_to_feedbooleanWhen true, the Reel also appears on your main Instagram grid alongside regular posts.
instagram_cover_urlstringCustom cover image URL for the Reel. Overrides the auto-generated frame from the video.

Scheduling Reels for future delivery

Add a scheduled_date field to your request and CodivUpload will hold the Reel until the specified time. The timestamp must be in ISO 8601 format and is always interpreted as UTC.

schedule-reel.ts
const scheduled = await codiv.posts.create({
  platforms: ["instagram"],
  description: "Monday motivation #reels",
  media_urls: ["https://cdn.example.com/monday.mp4"],
  profile_name: "my_brand",
  instagram_media_type: "REELS",
  // Schedule for Monday 9am EST (14:00 UTC)
  scheduled_date: "2026-04-06T14:00:00Z",
});

Once scheduled, the post appears in your dashboard calendar with a "Scheduled" badge. CodivUpload stores the media on its CDN immediately — the video is not uploaded to Instagram until the scheduled time arrives. This means you can schedule Reels weeks in advance without worrying about media link expiration.

Time zone handling

All timestamps in the API are UTC. If your audience is in EST (UTC-5), schedule for 14:00 UTC to publish at 9:00 AM local time. The dashboard composer includes a time zone picker that converts automatically, so you only need to think in UTC when using the API directly.

Four mistakes that tank Reel performance

These are the issues we see most often in support tickets. Each one is avoidable with a small change to your workflow.

Uploading horizontal video

Instagram crops landscape video to fit 9:16. The result cuts off the sides of your frame. Always shoot or export at 1080 x 1920.

Stuffing 30 hashtags into every caption

Instagram has flagged hashtag-stuffing as a negative signal since 2024. Use 3-5 highly relevant tags. Quality over quantity.

Skipping alt text

Alt text helps visually impaired users and feeds Instagram's content understanding engine. It takes 10 seconds to add and improves reach.

No call to action in the caption

Reels with a CTA ("Save this for later", "Follow for more") generate 37% more engagement than those without. Always close with an action.

Publish the same Reel to TikTok, YouTube Shorts, and more

A 9:16 vertical video that works as an Instagram Reel also works as a TikTok video, YouTube Short, Facebook Reel, and Pinterest Idea Pin. CodivUpload lets you publish to all of them in a single request by adding platforms to the array.

cross-post-reel.ts
const cross = await codiv.posts.create({
  platforms: ["instagram", "tiktok", "youtube", "facebook"],
  description: "Shared across 4 platforms",
  media_urls: ["https://cdn.example.com/reel.mp4"],
  profile_name: "my_brand",
  // Instagram-specific
  instagram_media_type: "REELS",
  instagram_collaborators: ["partner_brand"],
  // YouTube-specific
  youtube_privacy_status: "public",
});

Platform-specific parameters only affect their target platform. instagram_collaborators is ignored by TikTok and YouTube. youtube_privacy_status is ignored by Instagram. You can set everything in one request and let CodivUpload route each parameter to the correct platform service.

Prerequisites for Instagram Reel publishing

Instagram's Content Publishing API has specific account requirements. These are not CodivUpload limitations — they come from Meta's platform rules.

Professional account required

Your Instagram account must be a Creator or Business account. Personal accounts cannot use the Content Publishing API. Switching is free and takes 30 seconds in the app.

Connected Facebook Page

Instagram's API routes through Facebook. Your Professional Instagram account must be linked to a Facebook Page. CodivUpload walks you through this during onboarding.

Video meets format specs

MP4 or MOV, under 1 GB, under 90 seconds. Videos outside these bounds will fail at Instagram's processing stage, not at the CodivUpload API layer.

Further reading

Start publishing Reels via API

Connect your Instagram account, grab an API key, and publish your first Reel in under 5 minutes. Free plan includes 10 uploads per month.