Instagram Reels resumable upload (rupload) vs a public video_url
Instagram Reels can publish from a public video_url or a resumable rupload. Resumable is Facebook Login only; check your Sume media link is reachable first.

To publish a Reel you can either give Instagram a video_url on a publicly reachable server, or upload the bytes yourself with upload_type=resumable to rupload.facebook.com. The resumable route is documented for Facebook Login only; with Instagram Login you use video_url.
These facts come from Meta's Instagram Platform content publishing pages, read 2026-10-02. Sume facts come from media inputs. Sume does not publish to Instagram; it produces the MP4 you hand to either route.
What does each route need?
Both start with a container: POST /<IG_ID>/media with media_type=REELS. Then POST /<IG_ID>/media_publish, and GET /<IG_CONTAINER_ID>?fields=status_code in between to see IN_PROGRESS, FINISHED, ERROR, EXPIRED or PUBLISHED.
| Item | video_url | Resumable |
|---|---|---|
| Container parameter | video_url=<public URL> | upload_type=resumable |
| Upload call | None; Instagram fetches it | POST to rupload.facebook.com/ig-api-upload/<container id> |
| Headers | Not applicable | Authorization, offset, file_size |
| Login | Facebook Login or Instagram Login | Facebook Login only |
| File location | Public server at publish attempt | Local file or publicly hosted video |
Is a Sume media link public enough?
Meta's page says the media must be on a publicly accessible server at the moment of the publishing attempt. Sume results are media.sume.com HTTPS URLs, but the docs we read do not promise that Instagram's fetcher can reach every artifact, so do not assume it.
Test it the way Instagram would: request the URL with no Authorization header and no cookies, and confirm a 200 with a video content type. If that fails, download the file and use the resumable route (Facebook Login) or host it somewhere you control.
# 1. Reachability check, no credentials
curl -sI "https://media.sume.com/artifacts/artf_demo/reel-a.mp4" | head -5
# 2. Create the Reels container from that URL
curl -X POST "https://graph.facebook.com/v26.0/$IG_ID/media" \
-d media_type=REELS \
-d video_url="https://media.sume.com/artifacts/artf_demo/reel-a.mp4" \
-d caption="Test" \
-d access_token="$IG_TOKEN"
# 3. Poll until FINISHED, then publish
curl "https://graph.facebook.com/v26.0/$CONTAINER_ID?fields=status_code&access_token=$IG_TOKEN"What does the resumable route look like?
After creating the container with upload_type=resumable, send the file to POST https://rupload.facebook.com/ig-api-upload/<IG_MEDIA_CONTAINER_ID> with the Authorization, offset and file_size headers. Meta's page says it supports local files and hosted videos. The page does not give per-chunk size rules, so read the full reference before writing a chunked client.
Use it when your file lives behind auth or on a machine Instagram cannot reach. Skip it when video_url already works: fewer moving parts.
What does the page not tell me?
The pages we fetched list no video length, file size, aspect ratio, frame rate or codec limits for Reels. Do not invent them; preflight your file with video inspect, whose probe is unbilled, and compare against the requirements in Instagram Reels API video requirements.
Rate limit on the publishing page: 100 API-published posts within a 24-hour moving period. See the bulk-run sizing post before queuing a batch.
How do I decide in practice?
Start with video_url. It is one fewer call and works under both logins. Move to resumable only when the reachability test fails or when the file is large enough that you want control over the transfer, and only if your app uses Facebook Login.
Whichever route you pick, create a new container on ERROR or EXPIRED rather than reusing the old one, and log the container id next to your Sume job id so a failed publish can be traced back to the exact artifact that produced it.
Sources
Related posts
More in Developers
- reels_skip_rate: what the 3-second metric means and how to test hooks
reels_skip_rate is the share of Reel views that skipped in the first 3 seconds. Pull the opening frames and words with Sume video inspect to compare hooks.
- Instagram Reels thumb_offset is in milliseconds: pick the frame first
thumb_offset takes milliseconds, defaults to 0, and loses to cover_url. Preview candidate frames with Sume video_frames before you publish the Reel.
- Instagram Reels user_tags API: usernames only, not on-screen text
user_tags on a Reel tags public accounts by username; x and y apply to images and stories. A handle burned into the video is not a tag. How to do both.
- Reels views vs crossposted_views vs facebook_views: which to report
Instagram Reels insights list views, crossposted_views and facebook_views separately. Which to report, and how to trace Sume-made variants.
Written by Sume