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.
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.
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.
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 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
bts-video.mp4
1080 x 1920 · 0:34
Behind the scenes of our new product #reels #bts
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.
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.
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.
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.
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
All Instagram content types — Reels, Stories, carousels, and feed posts — with API examples for each.
Publish to Instagram, TikTok, YouTube, and seven more platforms from one API call.
Full setup, authentication, error handling, and advanced patterns for the CodivUpload SDK.
Every endpoint, parameter, and response schema in the interactive API reference.