
n8n Instagram Downloader API
In n8n, add an HTTP Request node that POSTs {"service": "instagram", "url": "..."} to https://developers.getinsaver.com/v1/resolve with your API key as a Bearer header. Split the returned items, then download each URL as a file and send it on to Drive, Telegram, S3 or anywhere else. Make and Zapier use the same request.

Key facts
- Endpoint
- POST /v1/resolve (one endpoint for every service)
- Free trial
- 20 result credits after email verification, no card
- Price
- from $19 for 7,500 results ($1.33–$2.53 per 1,000)
- Billing
- prepaid credits, no subscription, no expiry; failed or empty requests cost 0
- Credits per result
- 1 (Instagram, TikTok, X, Pinterest) or 2 (Stories, Highlights, Telegram)
- Limits
- up to 20 items per request; 120 requests per minute per account; 2 in progress at once on the trial, 8 on paid accounts
n8n: HTTP Request node settings
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://developers.getinsaver.com/v1/resolve |
| Authentication | Generic Credential Type → Header Auth. Name Authorization, value Bearer gis_live_... |
| Send Body | On, Body Content Type JSON, Specify Body Using JSON |
| JSON | {"service": "instagram", "url": "{{ $json.url }}", "max_results": 10} |
| Options → Timeout | 130000 |
- Feed the node a link from any trigger: a form, a Telegram message, a sheet row or an RSS item. The example reads it from the field
url. - Add a Split Out node on the field
items, so each media file becomes one item. - Add a second HTTP Request node: GET
{{ $json.url }}with the response format set to File. - Send the binary file to Google Drive, Telegram, Dropbox or S3. Do it in the same run: the media URLs are short-lived.
Make and Zapier
In Make, use HTTP → Make a request with the same method, URL, Authorization header and a raw JSON body, and turn on response parsing. In Zapier, use Webhooks by Zapier → Custom Request with the same values. Both then loop over items.
Test the request first
This is the exact request the node sends. Run it in a terminal to check your key before building the workflow:
curl -X POST https://developers.getinsaver.com/v1/resolve \
-H "Authorization: Bearer $GIS_KEY" \
-H "Content-Type: application/json" \
--max-time 130 \
-d '{"service": "instagram", "url": "https://www.instagram.com/reel/SHORTCODE/", "max_results": 10}'
{
"ok": true,
"service": "instagram",
"source_url": "https://www.instagram.com/reel/SHORTCODE/",
"item_count": 1,
"items": [
{
"type": "video",
"url": "https://cdn.example/media.mp4"
}
],
"metadata": {
"title": null,
"author": "creator",
"caption": null
},
"request_id": "39a3bff5-0000-4000-8000-000000000000",
"credits_used": 1
}
Service IDs
| service | Covers | Credits / result | Link format |
|---|---|---|---|
| Instagram Posts & Reels | 1 | instagram.com/p/... | |
| instagram-story | Instagram Stories | 2 | instagram.com/stories/username/... |
| instagram-highlight | Instagram Highlights | 2 | instagram.com/stories/highlights/... |
| tiktok | TikTok | 1 | tiktok.com/@user/video/... |
| x | X / Twitter | 1 | x.com/user/status/... |
| 1 | pinterest.com/pin/... | ||
| telegram | Telegram Public Media | 2 | t.me/channel/123 |
Errors your workflow should route
| HTTP | Code | What to do |
|---|---|---|
| 402 | INSUFFICIENT_CREDITS | Top up, or lower max_results: a request reserves max_results × credits per result first. |
| 422 | UPSTREAM_REJECTED | The post is private, deleted, expired or login-only. Show the message to your user; nothing was charged. |
| 429 | RATE_LIMITED / CONCURRENCY_LIMIT | Wait for Retry-After seconds and retry. 120 requests per minute per account; 2 at once on the trial, 8 after buying credits. |
| 502 / 504 | UPSTREAM_* | Temporary platform failure. Safe to retry; nothing was charged. |
Every error body is JSON with a stable code and a readable message. The full list is in the API reference.
FAQ
Does this need an Instagram login in n8n?
No. The workflow never signs in to Instagram. It sends a public link and your GetInSaver API key.
Can one workflow handle Instagram and TikTok links?
Yes. Set the service field from the link with an IF or Switch node: instagram.com goes to instagram, tiktok.com to tiktok, x.com to x.
How many credits does a workflow run use?
One credit per returned Instagram, TikTok, X or Pinterest item and two per Story, Highlight or Telegram item. Failed runs use none.
Do failed requests cost credits?
No. Credits are reserved while a request runs and refunded in full when it fails or finds no media. You only pay for items that come back.
Related guides
- Python Instagram and TikTok Downloader API
- Node.js Social Media Downloader API
- Instaloader Alternative API
Updated 2026-10-30. The code on this page is executed by our test suite against the API server before every release.