Changelog
What changed in the IGAPI Instagram API and on this site, newest first. Is it working right now? See the status page.
2.2.0
A new look, a status page, this changelog, a form to request an API key, and a lifetime limit for plans.
Added
- A status page (
/status): whether the API is up, the uptime of the last 30 days, the average response time and the last incident. It works without JavaScript and refreshes itself once a minute. GET /api/healthhas new fields after the existing ones:state,uptime30d,uptimeSince,avgLatencyMs,lastIncidentandupdatedAt. The existing fields are unchanged.- This changelog (
/changelog): what changed in each release. - A “Request an API key” form on the home page,
/pricingand/docs: your e-mail, the plan and what you will use it for. We answer within 24 hours. - A support e-mail address in the footer of every page, with links to the status page and this changelog.
- A fourth plan limit next to per minute, per day and per month: requests in total per key, which never resets. Past it the answer is
429 plan_limit_exceededwith"window": "total".
Changed
- The Free plan is 1,000 requests in total per key (once, not every month), to try every endpoint before you buy. The Mega plan allows 350 requests a minute.
- One design for the whole site: the IBM Plex Sans font served by the site itself, 16 px body text, and the same colours and buttons on every page in the dark and the light theme.
- The header reads API · Docs · Pricing · Free tools. The Instagram viewer and the six downloaders are under Free tools; on phones the menu starts with the developer links.
- The Buy and “Get a free key” buttons open the request form with their plan chosen. The Telegram link is still there, under the form.
Fixed
- Text that was too faint, mostly in the light theme: every text now has a contrast of at least 4.5:1 (3:1 for large text, field edges and focus rings) in both themes.
- A visible focus ring on every link, button and field when you use the keyboard.
2.1.1
One header and footer for the whole site, a tab bar for the downloaders, and a clear rule for requests without an API key.
Added
- One header, phone menu and footer on every public page: the API, the docs, pricing and the free tools are always in the same place.
- A tab bar above the box on the six downloader pages and the Instagram viewer, to switch between video, reels, story, highlights, photo and profile picture.
- The Instagram viewer (
/tools.html) links all six downloaders and answers the most common questions. - A rule for requests without an API key, shown on
/docsand/pricing: answered as before, limited per IP address to the Trial plan’s limits, or refused with401 api_key_required.
Changed
- A request answered
503 no_sessions(no Instagram account of ours was free at that moment) is no longer counted against your plan. - The site’s own lookup tools use a short-lived session cookie instead of an API key; the Legal page explains it.
- Error answers of
/api/proxy-imageand/api/downloadnow include amessagefield. The other fields are unchanged. - A page address with a trailing slash or capital letters redirects (
301) to its one canonical address. - Clearer page titles and headings, and texts that speak as “we”.
Fixed
- The phone menu keeps the keyboard focus inside while it is open and the page behind it cannot be reached.
- Small layout fixes on phones: placeholders at 360 px wide and the end of the docs sidebar.
2.1.0
Pricing, the plans endpoint, six downloader pages, a new name and logo, and faster pages.
Added
GET /api/plans: the public plans with their limits and prices. No key needed, not counted.- A pricing page (
/pricing) with the plans, their limits and how to get a key. - Six downloader pages (video, reels, photo and carousel, story, highlights, profile picture) and a Legal page with the terms, privacy and removal requests.
- One smart box on the tools: paste a username or any Instagram link (post, reel, story, highlight or profile).
- Maintenance mode: the data endpoints answer
503 maintenancewithRetry-After: 300, and/api/healthshows"maintenance": true. - Cross-origin requests (CORS) from listed web sites, off by default.
- A new logo, icons and link preview image.
- Search-ready pages: canonical addresses, link previews, structured data,
robots.txtandsitemap.xml.
Changed
- The main address is https://igapi.online. The previous address keeps answering every
/api/*request, without a redirect. - Fonts are served by the site itself and the styles load with the page, so pages appear faster, most of all on phones.
- The product is called IGAPI everywhere.
Fixed
- Every input error answered
400is free: a malformedmax_idis now refused before your key is charged. X-API-Key-Statusis on every data-endpoint answer to a request that sent a key, also on a400or the maintenance503.- Usernames made only of dots, or with two dots in a row, are refused with
400 invalid_usernamebefore Instagram is asked. - A real 404 page, and
.htmladdresses redirect to the clean one. - An Instagram highlight share link (
instagram.com/s/…) opens that highlight. - A strict Content-Security-Policy on every public page.
2.0.0
API keys with plans and limits, a download endpoint, and full API documentation.
Added
- Plans for API keys: limits per minute, per day and per month (UTC). Past a limit the answer is
429 plan_limit_exceededwith the plan, the window,retryAfterMs,resetAtandRetry-After. - A Trial plan with 50 requests a day.
GET /api/download: saves an Instagram photo or video as a file, with a clean file name.- The
X-API-Key-Statusresponse header, andGET /api/healthwith your key to check it without spending a request. posts_viewableandstories_viewablein/api/userinfo.- Stories and highlights in the lookup tools, a download button on every item, and “Download all”.
- API documentation at
/docs: every endpoint with examples, the error codes and a live playground.
Changed
- An unknown or revoked key is served like a request without a key, with
X-API-Key-Status: invalid. - A username longer than 30 characters or a malformed link is refused with
400before any request is spent. - An unknown
/api/path answers JSON (404). - When one of our own Instagram accounts fails, the answer is
503, never401or403(those are about your key or a private profile).
Fixed
- An expired Instagram media link in
/api/downloadanswersLink expired(403,404or410) so you know to fetch the post again; other upstream errors answer502. - Downloads report which files failed.
- More stable under sustained load: memory use no longer grows with every request.