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 23, 2026
Breaking: three platforms withdrawn. Their endpoints are out of the catalogue, the reference and the MCP tools, and calls to them return an error. Failed calls cost nothing. The API now covers 22 platforms; every current endpoint is in Endpoint pricing.
October 18, 2026
Running out of credits gives you a checkout link. An INSUFFICIENT_CREDITS error (HTTP 402) now carries error.top_up_url, which opens the checkout for the smallest credit pack that covers what the call was short, already tied to your account. The same link ends error.message, so a script or AI agent that shows the message shows the link too. The message used to say "Top up at /pricing", a page that did not know who you were. See Errors.
One email the first time your account runs out of credits. The first time a call is refused for credits, the account's email address gets one message with the same checkout link, so a script that keeps failing in the background does not go unnoticed. It is sent once per account, never again, and never delays the 402.
Docs: price tables corrected. The price tables in Pagination and the recipes still showed prices from before October 5, double what calls cost. They are now built from the same spec the API charges from, and a test fails the build if they drift. What calls are charged did not change.
October 14, 2026
How-to guides. How-to guides cover one job each that most data APIs do not document, with the endpoint, cURL, Python and Node.js code, a real response and the price: the TikTok videos a user liked, LinkedIn company employees, a YouTube channel's business email, Reddit comment search, Xiaohongshu (RedNote) search and more. Each endpoint's reference page links the guides that use it.
Every docs and API page as Markdown. Pages under /docs, /social-media-api and /mcp answer a request sent with Accept: text/markdown with a Markdown version of the same page, and the HTML names it in a Link: <…>; rel="alternate"; type="text/markdown" header. Adding .md to the URL works too. An endpoint page is about 4 KB as Markdown, against more than 1 MB as HTML, which is what an AI agent reading the docs wants.
Docs: a shared-cache answer costs 2 credits. Caching and Credits still said 5, the price before October 5. The charge itself has been 2 since then.
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/linkedin/search/hashtag is switched off. It 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.
October 8, 2026
16 more platforms. Bluesky, Truth Social, Snapchat, Telegram, Twitch, Kick, Rumble, Kwai, Douyin, Xiaohongshu (RedNote), Quora, TikTok Shop, Weibo, Zhihu, Substack and Nextdoor are now on the API, with the same key, response envelope and credit balance. Their endpoints and prices are in Endpoint pricing, and each platform has its own page, such as Bluesky.
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.
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.
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. For example, a metered list called without limit now holds the price of one page instead of the top of its range. What a call is charged did not change. dry_run=1 quotes the same hold.
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/youtube/video/comments,/v1/youtube/video/comment/replies,/v1/twitter/user/tweets,/v1/twitter/tweet/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/tiktok/post/commentsis 20–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
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.
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 social media data, 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.