GetInSaver Developers
A woman watching a video on her smartphone
Guide · Downloader website

Video Downloader API for Your Own Website

A downloader website needs three parts: a page with a paste box, a small backend that keeps your API key secret, and a downloader API that turns the link into files. This page gives you the backend and the API; or we build and launch the whole branded site for a fixed price.

Request path of a downloader website: visitor pastes a link, your backend keeps the key, GetInSaver API resolves it, your page shows the files

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

How the pieces fit

  1. The visitor pastes a link on your page, which POSTs {"link": "..."} to your backend.
  2. Your backend picks the service ID from the link and calls POST https://developers.getinsaver.com/v1/resolve with your key.
  3. It returns the items to the page, which shows the video or photos with download buttons.

A complete backend in one file

Node.js 18+, no packages. It maps Instagram, Stories, Highlights, TikTok, X, Pinterest and Telegram links to service IDs and never sends the key to the browser.

// server.mjs, Node.js 18+, no packages: the backend of your own downloader page.
// The browser posts a link to /api/download; only this server ever sees GIS_KEY.
import { createServer } from "node:http";

const API_URL = "https://developers.getinsaver.com/v1/resolve";
const HOSTS = { "instagram.com": "instagram", "tiktok.com": "tiktok", "x.com": "x", "twitter.com": "x", "pinterest.com": "pinterest", "pin.it": "pinterest", "t.me": "telegram" };

function serviceFor(link) {
  const url = new URL(link);
  const host = url.hostname.replace(/^(www|m|vm|vt)\./, "");
  if (host === "instagram.com" && url.pathname.startsWith("/stories/highlights/")) return "instagram-highlight";
  if (host === "instagram.com" && url.pathname.startsWith("/stories/")) return "instagram-story";
  return HOSTS[host];
}

createServer(async (req, res) => {
  const reply = (status, body) => { res.writeHead(status, { "Content-Type": "application/json" }); res.end(JSON.stringify(body)); };
  if (req.method !== "POST" || req.url !== "/api/download") return reply(404, { error: "Not found" });
  let raw = "";
  for await (const chunk of req) { raw += chunk; if (raw.length > 4096) return reply(413, { error: "Too large" }); }
  let service, link;
  try { link = JSON.parse(raw).link; service = serviceFor(link); } catch { service = null; }
  if (!service) return reply(400, { error: "Paste a public Instagram, TikTok, X, Pinterest or Telegram link." });
  try {
    const response = await fetch(API_URL, {
      method: "POST",
      headers: { Authorization: `Bearer ${process.env.GIS_KEY}`, "Content-Type": "application/json" },
      body: JSON.stringify({ service, url: link, max_results: 10 }),
      signal: AbortSignal.timeout(130_000)
    });
    const data = await response.json();
    if (!response.ok) return reply(response.status, { error: data.message, code: data.code });
    reply(200, { items: data.items, author: data.metadata?.author ?? null });
  } catch {
    reply(502, { error: "The downloader did not answer. Try again in a moment." });
  }
}).listen(Number(process.env.PORT || 3000));

Run it with GIS_KEY=gis_live_... node server.mjs behind your web server, and point your page's form at /api/download. Put your own rate limit per visitor in front of it, so one visitor cannot spend your credits.

What each download costs you

1 credit per returned Instagram, TikTok, X or Pinterest item and 2 per Story, Highlight or Telegram item. Links that fail cost nothing. Prepaid packs start at $19; see pricing for the price per 1,000 results.

Or we build the site for you

PackageWhat you getDeliveryPrice
API ConnectConnect one GetInSaver API service to an existing website.2–3 business days$149
Launch SiteA branded, single-service downloader website ready to launch.3–5 business days$199
Multi-tool SiteA polished multi-service starter product with dedicated SEO pages.5–7 business days$299
Full PlatformA complete branded platform with every supported GetInSaver service.7–10 business days$599

See website packages

Errors your page should show

HTTPCodeWhat to do
402INSUFFICIENT_CREDITSTop up, or lower max_results: a request reserves max_results × credits per result first.
422UPSTREAM_REJECTEDThe post is private, deleted, expired or login-only. Show the message to your user; nothing was charged.
429RATE_LIMITED / CONCURRENCY_LIMITWait for Retry-After seconds and retry. 120 requests per minute per account; 2 at once on the trial, 8 after buying credits.
502 / 504UPSTREAM_*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

Can visitors call the API directly from the browser?

No. The key would be public and anyone could spend your credits. Always go through a backend like the one above.

Which platforms can my site support?

Instagram posts, Reels, Stories and Highlights, TikTok, X/Twitter, Pinterest and public Telegram channel posts, all through the same request.

What do the website packages include?

Each package on the website setup page lists what it includes, its delivery time and its bug-fix window. Ask us before ordering if you need something that is not listed, such as hosting.

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.

Updated 2026-10-30. The code on this page is executed by our test suite against the API server before every release.

Make your first call in five minutes.

20 free credits when you verify your email. No card needed.

Create a free account