Changelog
Every change to the InsightSocial API that affects what you send, what comes back, or what a call costs. Newest first.
Changes that affect your integration are listed here with the date they took effect. Anything that changes what a call costs is marked Billing.
October 14, 2026
Date filters on 112 more endpoints. Lists of posts and comments across the platforms now take until (on or before) and, where they did not have it already, since (on or after), as YYYY-MM-DD or an ISO 8601 timestamp. On lists that are not in date order they filter each page and the walk continues, and a page is charged even when every row on it was filtered out. See Pagination.
GET /v1/instagram/post/likers sets data.truncated to true when fewer likers come back than the post has likes. It was null.
GET /v1/linkedin/search/hashtag is switched off. Its data source has returned no posts for any hashtag since at least October 3, so every call came back as a free, empty result that read as "nobody posts under this tag". Calls answer 503 ENDPOINT_UNAVAILABLE with Retry-After: 3600 and are never charged, and the endpoint is out of the catalogue until it works again. GET /v1/linkedin/search/posts with query=#hiring returns recent posts that carry the tag.
GET /v1/instagram/post/likers says how many likers it returns. Its description said about the first 100. In our tests a post with a few hundred likes came back whole, and bigger posts returned about 1,000 to 2,000 likers in one call however many likes they had; an older post returned fewer. The call itself did not change. See Get the accounts that liked an Instagram post.
October 5, 2026
Billing: every endpoint costs half what it did. A standard call is 10 credits (was 20), and a 100-credit call is now 50. Metered endpoints halve at both ends of their range, and so does what a metered call holds. An answer served from the shared cache costs 2 credits (was 5). The free plan's 500 credits a month now cover 50 standard calls instead of 25. The 10 free calls a new account gets now cover calls priced at up to 100 credits, which is the same set of endpoints as before. Failed calls, empty results, dry_run=1 and Idempotency-Key replays are still free. Credits you already hold are worth twice as many calls. Every current price is in Endpoint pricing.
Changelog entries below this one quote the prices of their own date.
October 4, 2026
New: a hosted MCP server at https://api.insightsocial.app/mcp. Claude (desktop, claude.ai, Cowork), ChatGPT and any MCP client that supports sign-in connect by URL: add a connector, sign in to InsightSocial and click Allow, with no key to paste. Each app gets its own key, listed under Connected apps on API keys, where you can disconnect it. Clients that cannot sign in send an API key as a Bearer token. The hosted server has the same tools as the local one plus quote_endpoint and send_feedback, and call_endpoint is marked as spending credits so clients ask first. See MCP.
The CLI signs in through your browser. npx -y insightsocial init (or insightsocial login) opens a sign-in page and prints a short code: type it on the page and click Allow, and the CLI prints which account it signed into. login --api-key still takes a key you already have.
GET /v1/instagram/music/trending is switched off. Its data source failed most calls, often after a minute's wait. Calls answer 503 ENDPOINT_UNAVAILABLE with Retry-After: 3600 and are never charged, and the endpoint is out of the catalogue until it works again. GET /v1/instagram/search/music still finds tracks by name.
Breaking: a LinkedIn person has one id everywhere, the member URN. author.id on a LinkedIn person is now the URN (ACoAA…) on every endpoint that has one: profiles, search, similar, reactors, and the authors of posts. It used to be the vanity slug on profiles and a numeric member id on posts and reactors, so the same person had different ids. The slug is in username (it was sometimes the URN there), the numeric id in ext.member_id on profiles and ext.author_member_id on posts and comments. Comment authors have no URN at the source, so their author.id is null and listed in unavailable; join on username. On /v1/linkedin/search/people/by-url, where the source gives no URN, id stays the slug. Companies keep their numeric id.
Breaking: GET /v1/tiktok/profile/region returns a record, not a profile. The source sent the handle as the profile's id. data is now { region, username, display_name, followers, … , url } with no id and no author wrapper, and the endpoint is marked beta.
LinkedIn companies have one id everywhere. /v1/linkedin/search/companies and /v1/linkedin/company/also-viewed now return the numeric company id in author.id (for example "1035"), the same id /v1/linkedin/company returns and /v1/linkedin/company/posts takes as company_id. The slug ("microsoft") stays in author.username.
X replies to a retweet no longer include the original tweet as a reply. A row whose id equals its post_id was the post itself; it is dropped, so the page holds replies only.
GET /v1/instagram/user/embed is switched off. Its data source answers not-found for every profile. Calls answer 503 ENDPOINT_UNAVAILABLE with Retry-After: 3600 and are never charged, and the endpoint is out of the catalogue until it works again.
Retry-After on UPSTREAM_ERROR and UPSTREAM_INVALID is now at least 30 seconds (was 5), longer when the platform asks for more. By the time you see one we have already retried, so 5 seconds met the same outage.
Reddit comment trees: data.truncated is null instead of false when we cannot tell whether Reddit left branches out, and true when the tree reaches Reddit's depth limit. A thread was served 329 of its 602 comments while saying false.
Billing: a metered call holds what it can cost, not the top of the range. The hold before a call is now worked out from the parameters you send. GET /v1/threads/user/posts without limit holds 20 credits (was 3,300); /v1/instagram/search/reels without include holds 20 (was 1,300). What a call is charged did not change. dry_run=1 quotes the same hold.
Billing: GET /v1/facebook/adlibrary/company/ads is metered, 100–700 credits. It takes a new include=audience, which adds EU reach and age, gender and location targeting to each ad that ran in the EU, for up to 20 credits per ad. Without include a page costs 100 credits, as before.
The previous response shape is no longer served. InsightSocial-Version: legacy is ignored and /v1/openapi-legacy.json is gone. No key was still using it.
Breaking: every key now gets schema 2. One response shape per entity on every platform; analysis fields (computed, labels, relevance) are gone, cursors are v2c.…, and analysis parameters answer 400 UNSUPPORTED_PARAMETER. Everything that changed is on Schema 2.
Billing: lower ceilings under schema 2. A metered call no longer holds credits for labels, which schema 2 does not produce, so the ceiling held at the start of a call dropped on 24 endpoints. What a call is charged did not change: it was already what the call used.
- Now one price, 20 credits a call:
GET /v1/tiktok/profile/videos,/v1/tiktok/video/comment/replies,/v1/tiktok/search/hashtag,/v1/instagram/post/comment/replies,/v1/youtube/video/comments,/v1/youtube/video/comment/replies,/v1/twitter/user/tweets,/v1/twitter/tweet/replies,/v1/facebook/post/comments,/v1/facebook/post/comment/repliesand/v1/reddit/subreddit. - Now one price, 100 credits a call:
GET /v1/reddit/post/comments. - Still metered, with a lower top: for example
GET /v1/instagram/search/reelsis 20–1,300 (was 20–1,380),/v1/tiktok/post/comments20–60 and/v1/twitter/search/tweets20–100.
GET /v1/tiktok/search/users goes the other way, to 20–2,620, because its old ceiling was below what a call can use. Every current price is in Endpoint pricing.
October 1, 2026
Billing: two price ranges changed.
| Endpoint | Before | Now |
|---|---|---|
GET /v1/instagram/search/reels | 20–180 | 20–1,380. include=creator adds 40 credits per creator looked up, held up front and refunded for creators not looked up |
GET /v1/instagram/similar | 100 | 100–4,000. A call with no limit, or limit of 50 or less, still costs 100 |
Both are metered: the top of the range is held when the call starts and you are charged what it used. See Endpoint pricing.
Both ranges have changed since. GET /v1/instagram/search/reels is 20–1,300 under schema 2 (see October 4). GET /v1/instagram/similar is 100–1,700: include=profile fills the top 20 accounts unless you pass limit (1 to 80).
New endpoint. GET /v1/tiktok/similar returns accounts similar to a TikTok creator, 100 credits a call.
September 26, 2026
Billing: repeat calls are now charged. Repeating a call you had already paid for used to be free for a while afterwards. A repeat is now charged like the first call, because it can return newer data. Store responses you need again on your side. Retries with the same Idempotency-Key still cost 0 and come back with charge_reason: "replay". owned is no longer a charge_reason; you will still see it on Activity Log rows from before this date. See Credits.
Required inputs on three Instagram endpoints. The reference listed no required parameters for these, but they cannot answer without one:
| Endpoint | Required |
|---|---|
GET /v1/instagram/basic-profile | userId |
GET /v1/instagram/highlight/detail | id |
GET /v1/instagram/comment | one of comment_url or post_url |
The whole reference on one page. /docs/api-reference.md lists every endpoint with its path, a one-line description and its required parameters. Give it to an AI assistant along with your key. See AI agents.
September 24, 2026
Not-found errors no longer read like outages. A 404 sometimes ended with an extra sentence saying the endpoint was temporarily unavailable. It now says only that nothing exists at that identifier, and that you were not charged.
September 23, 2026
The API is live at https://api.insightsocial.app/v1. Public data from Instagram, TikTok, Facebook, LinkedIn, Twitter/X, Threads, YouTube, Reddit and Pinterest, authenticated with one x-api-key header and paid from the same credit balance as InsightSocial exports. Every account gets 10 free calls. Start with the Quickstart, or run a call without code in the Explorer.
Pagination on every list endpoint. List responses return a pagination block (next_cursor, has_more, page_size) next to data. See Pagination.