You have a public Instagram Reel URL, you need the actual MP4, and you need it this week. By the end of this guide you’ll call the Instagram Premium Downloader API on Zyla API Hub to turn a public /reel/ link into a downloadable file URL, handle job progress until it’s finished, and wire it into your app or automation.
What this API does
The Instagram Premium Downloader API takes a public Instagram Reel URL and starts a media download job that results in a direct download URL (e.g., MP4). You submit the official Reel URL, poll the job until its progress hits 100 with status text “finished,” and then read the download_url to fetch the media. Stories are not supported. This API is built for developers shipping:
- Content ingestion pipelines that archive public Reels for analysis.
- Internal tools that let social teams collect assets for editing or republishing (where permitted).
- Automations that sync approved public Reels into CMS or DAM systems.
The listing lives on Zyla API Hub, which gives you a single developer account and one Bearer key that works across thousands of APIs. You subscribe per listing; your first Hub API includes a 7-day free trial (up to 50 requests). There’s no Free Plan beyond that—check the listing for current access options and pricing.
Getting started on Zyla API Hub
- Open the API listing: Instagram Premium Downloader API on Zyla.
- Click Subscribe (or Start Free Trial if available) and confirm.
- Register to create your Zyla account and get your Bearer API key.
- Call the Download endpoint with a public Reel URL and poll until progress is 100. Then use the returned download_url to fetch the media.
You can always browse the full catalog at zylalabs.com and reuse the same account and key for other APIs, but remember you subscribe per listing.
Workflow and endpoint overview
This API is a job-based downloader for public Instagram Reels. The sequence is:
- Send the official Instagram Reel URL to the Download endpoint.
- Receive a JSON response that includes job status fields (e.g., progress and text) and the download_url once finished.
- Poll until progress is 100 (status text: finished), then fetch the download_url for the MP4.
Key details you need to know:
- Auth: Bearer YOUR_API_KEY in the Authorization header.
- Input: an official, public Instagram /reel/ URL.
- Output: JSON with a progress indicator and, when finished, a download_url to the media.
- Stories are not supported.
The Download endpoint
Use the following endpoint to start and monitor a Reel download job:
Method: (call as documented in the listing)
URL: https://zylalabs.com/api/13602/instagram+premium+downloader+api/30360/download?utm_source=blog&utm_medium=article&utm_campaign=instagram-reel-download-api&utm_content=docs
Required input: an official, public Instagram Reel URL (for example, the official sample Reel URL is https://www.instagram.com/reel/DZ88ac0tlSz/ with format=mp4). If a parameter shape is not shown below, pass the Reel URL as the request requires on the API page and use the examples in this article to verify your call.
Official cURL example
Use the official request sample below. Replace YOUR_API_KEY with your Bearer key and the Reel URL with the one you want to download.
(The CMS will insert the exact, copy-pasteable request sample here.)
curl --location --request GET 'https://zylalabs.com/api/13602/instagram+premium+downloader+api/30360/download?url=https://www.instagram.com/reel/DZ88ac0tlSz/&format=mp4' --header 'Authorization: Bearer YOUR_API_KEY'
Official JSON response sample
Below is the official response sample that shows a job reaching progress 100 with text "finished." When you see this status, read download_url to get the media file.
(The CMS will insert the exact, official JSON here.)
{
"success": true,
"id": "9337d296e4099be1cfa06f98f1b9ba815eb5b62e",
"progress_url": "https://ig-download.zylalabs.com/api/progress?id=9337d296e4099be1cfa06f98f1b9ba815eb5b62e",
"message": "Job started. Poll progress_url every 3–5 seconds until progress is 100, then use download_url."
}
What the JSON fields mean in practice
When you call the Download endpoint with a public Reel URL, you’ll receive a JSON object with fields you can use to drive your flow. Based on the official sample and the API’s documented behavior, pay attention to:
- success: A boolean indicating whether the request was valid and a job could be created or updated. If success is false, log the message provided (if any), check the Reel URL is public and valid, and retry or surface an error to the user.
- progress: A numeric job indicator. Poll until progress is 100 before attempting to fetch the media. Treat any value less than 100 as not ready.
- text: A human-readable job status. Expect "finished" when progress reaches 100.
- download_url: Only present once the job is complete. This is the direct URL to the media (e.g., MP4). Fetch it with a standard HTTP GET. Consider downloading immediately and storing the file in your own storage if you need long-term access.
If a field is missing (for example, download_url before the job is done), handle it defensively: keep polling until progress is 100 and text is "finished", or time out and present a helpful message.
A minimal Python example
The snippet below shows how to call the Download endpoint with Bearer auth and read the common fields. It does not assume any undocumented parameter names—pass the official Reel URL per the API page and the cURL sample above. Once finished, it prints the download_url.
import os
import time
import requests
API_KEY = os.getenv("ZYLA_API_KEY", "YOUR_API_KEY")
DOWNLOAD_URL = "https://zylalabs.com/api/13602/instagram+premium+downloader+api/30360/download?utm_source=blog&utm_medium=article&utm_campaign=instagram-reel-download-api&utm_content=docs"
headers = {
"Authorization": f"Bearer {API_KEY}"
}
# IMPORTANT:
# Pass the official Instagram Reel URL as required by the API listing.
# See the cURL sample above for the exact request shape.
def start_or_check_job():
# If the API expects a JSON body or query string, include the public Reel URL there.
# Here we avoid inventing parameters and demonstrate a generic call.
response = requests.post(DOWNLOAD_URL, headers=headers)
response.raise_for_status()
return response.json()
def fetch_when_ready(poll_interval=2, max_wait=120):
waited = 0
while waited <= max_wait:
data = start_or_check_job()
# Defensive reads: only touch fields that exist.
success = data.get("success")
progress = data.get("progress")
status_text = data.get("text")
dl = data.get("download_url")
if success is False:
raise RuntimeError(f"API reported failure: {data}")
if isinstance(progress, int) and progress == 100 and status_text == "finished" and dl:
return dl
time.sleep(poll_interval)
waited += poll_interval
raise TimeoutError("Reel did not finish processing within the allotted time.")
if __name__ == "__main__":
url = fetch_when_ready()
print("Download URL:", url)
Notes:
- Authorization is Bearer; keep your key in a secure store and never commit it to source control.
- On success=false, check the response body for details and retry if appropriate. Common issues are private or invalid Reel URLs.
- Implement a backoff strategy if you poll frequently. Start with 1–2s and increase if needed. Always cap your total wait.
Real-world usage patterns
- CMS ingest: Let editors paste a public /reel/ URL into your tool. Create a background job that calls the Download endpoint, polls until progress is 100, then stores the MP4 in your object storage with metadata referencing the original URL.
- Data labeling or AI pipelines: For approved public data collection, spin up workers that take in a queue of Reel URLs, call the API, and store the resulting files alongside structured metadata. Respect terms and local regulations.
- Team automations: Wire a Slack slash command that triggers a serverless function to start the job and reply with the download_url once finished.
Operational tips that save time:
- Caching: Cache completed jobs keyed by the canonical Reel URL so you don’t reprocess the same media unnecessarily.
- Timeouts and retries: Treat network failures as transient unless the API returns success=false. A short exponential backoff works well.
- Storage: Download the file from download_url immediately after “finished” and store it in your system if you need durable access. The API response provides the URL you need; lifetime is not specified, so don’t assume it persists indefinitely.
- Format considerations: The official example uses format=mp4. If you need a different format, check the API page for current options.
Calling from AI agents via MCP
You can call any Zyla API from an MCP-compatible client (e.g., Claude Code, Cursor, Windsurf) through the MCP endpoint. Point your tool to the MCP URL with your API key and then invoke the Instagram Premium Downloader API by name inside the MCP client. This is useful for scripted or agentic workflows that generate and run API calls on your behalf.
MCP endpoint: MCP
Pass your key as documented by your MCP client (for example, apikey=YOUR_API_KEY in the MCP connection). The same Bearer key you use in HTTP requests works here.
“Go live” checklist
- Register: Create your Zyla account — your first Hub API includes a 7-day trial (up to 50 requests).
- Copy your Bearer key and subscribe on the Instagram Premium Downloader API listing.
- Call the Download endpoint: /download with a public Reel URL.
- Poll until progress is 100 (text: finished), then read download_url and GET the media file.
If you prefer to start an Instagram job as JSON via a streamlined flow, begin here: Register.
Explore more APIs you can add with the same account at zylalabs.com.
FAQ
Does this API support Instagram Stories?
No. Stories are not supported. Use only public /reel/ URLs.
What authentication does the API require?
Bearer authentication. Include Authorization: Bearer YOUR_API_KEY in every request.
How do I know when a Reel is ready to download?
Poll the job until progress is 100 and the text field is "finished". Then use download_url to fetch the media.
Is there a free plan?
There is no Free Plan. Your first Hub API includes a 7-day free trial (up to 50 requests). Check the API page for current access options and pricing.
Which Reel URL should I send?
Send the official, public Instagram Reel URL. The official example uses https://www.instagram.com/reel/DZ88ac0tlSz/ with format=mp4. Private or unavailable URLs will fail.
Can I call this from an AI code agent?
Yes. Use the MCP endpoint linked above with your API key in any MCP-compatible client and invoke the Instagram Premium Downloader API through the MCP interface.
Ready to ship? Create your Zyla account, get your Bearer key, subscribe to the Instagram Premium Downloader API, and wire the Download endpoint into your app. Start here: Register.