Instagram API media_url missing: copyrighted audio and reels

Since 2026-07-30 Instagram omits media_url for video with copyrighted audio or reels with downloads off. Treat it as optional and import files you own.

4 min readSume
All posts

If media_url is missing from an Instagram Graph API media response, that is the documented behavior since 2026-07-30: the field is now omitted for video with copyrighted or licensed audio, and for reels whose owner turned downloads off. Treat the field as optional, and keep a copy of any file you own before you rely on the URL.

The rules below are from the Instagram Platform changelog, read 2026-09-30. The Sume side comes from the Video trim and Video frames docs.

When does Instagram omit media_url?

The changelog entry dated Jul 30, 2026 lists two cases. Both apply to the IG Media endpoint.

media_url omission cases, Instagram Platform changelog, read 2026-09-30
CaseApplies toOwner's own media
Copyrighted or licensed audio, including audio from the Instagram audio library, or flagged for a copyright violationAll video media: reels, video posts, video storiesStill omitted, even when the app user owns the media
Reel owner turned off downloads (account-level or per-reel)Reels only, on endpoints that read other users' mediaNot affected when you read your own media through GET /<IG_USER_ID>/media or GET /<IG_MEDIA_ID>

What other fields still come back?

The changelog says all other fields on the media object, such as id, permalink, caption and timestamp, are unchanged. So code should branch on whether media_url is present instead of assuming it. A reel whose media_url is gone is still listed; only the file link is withheld.

How do I handle it in code?

Read media_url defensively, and queue the item for manual follow-up when it is absent. Do not try to rebuild the file URL from the permalink; the omission is a deliberate download protection.

function pickVideoSource(media) {
  if (typeof media.media_url === "string" && media.media_url) {
    return { ok: true, url: media.media_url };
  }
  return { ok: false, reason: "media_url omitted", permalink: media.permalink };
}

Where does Sume fit when I do have the file?

Sume only works on media hosted on its own domain. The trim docs say there is no open-internet fetch, so import first. For a file you are allowed to use, that means importing it once and then cutting it into a new MP4 with video trim; the trim docs describe the result as a cut of one Sume-hosted clip. See the oEmbed and media-import route for the import side.

If you need stills from a clip you already have, the video frames docs list format as jpeg (default) or png with max_edge from 16 to 2160. None of this recovers a URL Instagram chose to omit.

What should I do next?

Audit every place your code reads media_url, make the missing case a normal path, and keep original uploads in your own storage. Also read the sibling case in off-host URLs are unsupported.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume