Instagram Reels API aspect ratio: 0.01:1 to 10:1, 9:16 advised
Meta's Reels API accepts any aspect ratio from 0.01:1 to 10:1 and only recommends 9:16. See what each ratio rule says and check a clip with video inspect.

Instagram's Reels API does not require 9:16. Meta's IG User Media reference says the required aspect ratio for a Reel is between 0.01:1 and 10:1, and that Meta recommends 9:16 "to avoid cropping or blank space". A 16:9 file or a 1:1 file is inside the required range, so the ratio rule alone will not reject it; the recommendation is about how the video is displayed (read 2026-10-02).
The reference page is the only vendor source for this post. Sume's side comes from the video inspect and Timeline 1.0 docs.
What ratio range does each Instagram surface accept?
The same page lists separate specifications for Reels, Stories and images, and the numbers are not the same. Stories video starts at 0.1:1, not 0.01:1, and feed images have a much narrower window.
| Surface | Required ratio | Recommended |
|---|---|---|
| Reels video | 0.01:1 to 10:1 | 9:16 |
| Stories video | 0.1:1 to 10:1 | 9:16 |
| Feed image | 4:5 to 1.91:1 | Not stated |
If 16:9 passes, why does Meta recommend 9:16?
Meta's stated reason is cropping and blank space. The page does not describe exactly how a 16:9 Reel is shown, so treat the recommendation as a display preference rather than a hard rule, and look at a test publish on your own account before you batch anything.
The same page says the Reel cover is cropped to the middle 9:16 rectangle when the cover image is another shape, and cropped to the middle 1:1 square if you share the Reel to the feed. Keep faces and text near the center of the frame if the clip will do both.
How do I check a clip's ratio before publishing?
Run video inspect with frames: false. Probe and stills are unbilled, and the probe returns width, height and rotation separately, so read all three. The sketch below swaps width and height for a quarter-turn rotation. That swap is my reading of the field, not something the docs spell out, so confirm it on a phone-shot file.
If a clip is outside 9:16 and you want the recommended shape, regenerate at 9:16 or build the cut in Timeline, whose default output is 1080x1920.
import hashlib, os, time, requests
BASE = "https://api.sume.com"
H = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
def probe(video_url):
key = "probe-" + hashlib.sha256(video_url.encode()).hexdigest()[:24]
r = requests.post(f"{BASE}/v1/video-inspect", headers={**H, "Idempotency-Key": key},
json={"video_url": video_url, "frames": False}, timeout=60)
r.raise_for_status()
rid = r.json()["data"]["video_inspect_id"]
while True:
d = requests.get(f"{BASE}/v1/video-inspect/{rid}", headers=H, timeout=30).json()["data"]
if d["resource_status"] == "ready":
return d["probe"]
if d["resource_status"] in ("failed", "canceled"):
raise RuntimeError(d["error"])
time.sleep(2)
p = probe("https://media.sume.com/artifacts/artf_demo/talk.mp4")
w, h = (p["height"], p["width"]) if p["rotation"] in (90, 270, -90) else (p["width"], p["height"])
ratio = w / h
print(f"{w}x{h} ratio {ratio:.4f}", "in range" if 0.01 <= ratio <= 10 else "OUT of range",
"| 9:16" if abs(ratio - 9 / 16) < 0.01 else "| not 9:16")What should I do?
Treat 9:16 as the default and the 0.01:1 to 10:1 range as the refusal boundary. Probe each file, log the ratio next to the container id, and send only files that pass. Put the file at a URL Meta can fetch, because the page says Meta fetches video_url from a public server.
Sources
Related posts
More in Integrations
- Instagram Reels API audio: AAC, 48 kHz max, mono or stereo
Meta's Reel spec asks for AAC audio, a sample rate of 48 kHz at most, 1 or 2 channels and 128 kbps. Check those fields with a Sume video inspect probe first.
- Instagram Reels API cover_url vs thumb_offset: which one wins?
If a Reel container sets both cover_url and thumb_offset, Meta uses cover_url and ignores thumb_offset. How each works, and how to pull a cover frame.
- Instagram Reels API: is_paid_partnership and sponsor IDs
The Instagram Content Publishing API takes is_paid_partnership and branded_content_sponsor_ids for Reels, sponsor ids need Facebook Login. Request-body example.
- Instagram Reels API share_to_feed: true does not guarantee Reels
share_to_feed=true lets a Reel appear in Feed and Reels; false limits it to Reels. Neither value guarantees placement. What Meta's page says, and what to prep.
Written by Sume