Changelog
What changed, dated, in the order it happened.
Refused calls on the Requests page
New
- A call refused because of the account is now listed under "Refused, not charged" on the Requests page, for 30 days: too few credits (`insufficient_credits`), too many at once (`concurrency_limit`), or too many that found nothing in an hour (`not_found_limit`). Each row has its time, endpoint, key and request id. The same refusal for the same key and endpoint within a minute is one row, with the number of calls. Before, a refused call was not listed anywhere.
- When calls were refused in the last 7 days, the Requests page says how many and why, and the Overview's "Not enough credits" notice links to them. None was charged.
Automatic top-ups, if you turn them on
New
- On the billing page you can turn on an automatic top-up. When your balance falls below $10 of credits, it buys the pack you chose, at its published price, with the card you saved at Stripe's checkout. At most three in 24 hours, and each one sends a receipt. The credits arrive when the payment does, usually within half an hour.
- Off stops it at once. A refused payment turns it off, and we email you.
Changed
- The terms say so, under "What we charge" and "Ending it". A top-up shows in Link as a subscription with no monthly fee, so the site now says "no plans" where it said "no subscription".
A free converter for Google Maps place IDs
New
- `/tools/google-maps-place-id` turns a place ID that starts with `ChIJ`, the `0x…:0x…` id of a Maps link, or a CID into the others, with a link that opens the place. It runs in your browser, and nothing is sent anywhere. The place ID it gives is the one `google-maps/place` takes.
Fewer calls refused while a source is struggling
Improved
- When the only source of an option fails several times in a row, we stop asking it for a minute. In that minute, one call every 5 seconds is still tried, and an answer ends the pause at once. Before, every call in the minute was refused with "try again in a minute". A refused call is still not charged.
A LinkedIn comment's link goes back in, and a call in a short pause says to try again
Fixed
- A LinkedIn comment's `url`, and an activity's `comment_url`, keep the comment in the link (`commentUrn`, and `replyUrn` for a reply). So the link goes back in as `comment_url`, for its replies or its reactions, as the docs say. From 2026-10-08 the links lost it.
- When an option of an endpoint fails several times in a row, we stop asking for it for a minute. A call with that option in that minute now says to try again in a minute. It said that the option was not available, which read as if it were gone. The code is still `upstream_unavailable`, and nothing is charged.
Every free tool on one page, and each platform's objects on their own
New
- `/tools` lists the four free tools, which read when a post was made from its link.
Changed
- Each platform's response objects have a page of their own, at `/docs/schema/google-maps`, `/docs/schema/linkedin` and so on, and in the sidebar under the platform. `/docs/schema` keeps what is the same everywhere and lists every object. One page held all of them, and was the heaviest page of the site. A link to an object on the old page still finds it.
- A tool's breadcrumb leads to `/tools`, and a platform page's to the home page.
- The privacy notice no longer says that we pass a removal request on to others. What we do is unchanged: we delete what we hold about you, stop serving it, and tell you when it is done.
Improved
- The site's three typefaces weigh 83 kB, from 176 kB: each keeps only the characters and the weights the site uses. Every page looks exactly as it did.
- The status page shows our nightly test of an endpoint that has fewer than 50 calls in 30 days: whether it answered, and how long it took. Before, such a row showed only dashes, and most rows did.
A LinkedIn person who does not exist, and an endpoint that cannot be served
Fixed
- A LinkedIn call about a person who does not exist answers 404 `profile_not_found`, and costs nothing. For a name that matches no one, `linkedin/activity` and the other LinkedIn calls about a person could fail with `upstream_unavailable`.
- An endpoint that cannot be served at the moment says so before you call it: `available: false` in `/v1/endpoints`, "unavailable" in `/v1/status` and on the status page, a notice on its docs page, and in its MCP tool. `instagram/hashtag` said "operational" while its calls failed. They were not charged, and they are not now.
The emailed link signs you in at once
Improved
- A sign-in or sign-up link, opened in the browser that asked for it, goes straight to the dashboard. Opened anywhere else, such as on a phone, it still asks you to press the button, so a mail scanner that opens links cannot use it up.
- The billing page shows "Payment received" first, above the balance, after a purchase.
- The overview's "Buy credits" button has a line of its own under the low-balance note.
Each endpoint's success rate and answer time, and the options that cannot be served
{ "endpoint": "/v1/linkedin/profile", "state": "operational", "credits": 11, "success_rate": 99.9, "p50_ms": 3886, "p95_ms": 7689, "calls_30d": 31514 }New
- `/v1/status` gives each endpoint's last 30 days: `success_rate`, `p50_ms` and `p95_ms`, which are null below 50 calls, and `calls_30d`, with `measured_at`, when they were read.
- Each endpoint's docs page says how fast it answers, at the median and for 95 of 100 calls, over the last 30 days, from 50 calls.
- `/v1/endpoints` lists `unavailable_options` on an endpoint where one way to call it cannot be served at the moment, such as one value of `type`. Its docs page and its MCP tool name them too. The rest of the endpoint works, and a call with such an option is not charged.
Fixed
- The demo of `linkedin/jobs` gave postings of 3 October as fetched on 12 October: it joined an old second page to a new first page. It now joins only the pages the first one leads to.
Empty answers, told apart, and agents on the dashboard
New
- An agent's request for a key to your account shows on the dashboard while it is open: a note on the overview, and "Agents" in the menu with how many wait. You can approve it there with the code the agent shows you. Before, only the link in the email opened it, and that link can end before the request does.
Changed
- Instagram's image and video links in every answer use one host, `scontent.cdninstagram.com`, as the demo's have since 11 October. The same picture now has the same link, whichever call returned it.
Improved
- The LinkedIn people search says how long a page takes: about 3 seconds, or about 5 with Sales Navigator, and now and then up to 25.
- When the only source for a call fails within a few seconds, it is asked once more before you get an error. Two LinkedIn ad searches got an error on 12 October for one such failure.
- The dashboard works better with a screen reader. A copy says "Copied", or that it failed, aloud; a failed copy also says so on screen, as a new key is shown once. Each table has a caption and a header for every column. A key's rename button is named "Rename". A form's button says what it is doing, "Approving…" for Approve, not "Saving…" for everything.
- An account an agent started has no trial credits, and the dashboard no longer talks about them.
Fixed
- The same for Google Maps reviews, photos and posts: an answer without its list fails and is refunded. A place with no posts still answers an empty list.
- A search of TikTok's Ad Library is kept for 3 hours, from 24. TikTok's image links in it stop working about 6 hours after they are fetched, so a kept answer gave links that no longer worked.
- The docs say how long a media link works: Instagram and TikTok sign theirs, and they stop working within days, or hours for TikTok. Each such field says it, and so does "The data" in Responses.
- The email about an agent's request says how long its link works. For an address not yet confirmed it said 15 minutes, for a link that works for 24 hours.
- When no source can answer a call, the error no longer says the call ran out of time. Most such failures take a second or two, and the message said "in time" for all of them.
- A search for Instagram accounts that matches nothing answers an empty list. It answered an error.
- An answer that came back from a source without its list was read as an empty page, and charged. It is now a failure: it is refunded, it is not cached, and the next source is asked. A list that is really empty is still an empty page.
The status page says how each endpoint is now
Changed
- An endpoint's state on the status page is judged on its last 24 hours, where it had 50 calls in that time. It was judged on 30 days, so one bad day kept an endpoint "Degraded" for a month after it recovered. The 30 days' success rate is still shown beside it.
Bank debits, closed accounts, the low-balance email, and the API's last odd answers
Fixed
- A purchase paid by bank debit stays in the billing page's receipts as "processing" until the bank pays, which can take a few days. It left the list after 31 minutes.
- Signing in, or signing up, with the address of a closed account sends an email that says the account is closed and how to open it again. It said there was no account, and offered to create one.
- A path with a slash at the end, such as `/v1/status/`, answers as the same path without it: JSON, with a request id. It answered with a plain-text redirect.
- `GET /v1` carries an `x-request-id`, as every other answer does.
- A username for Instagram, TikTok or X may start with an @, and the docs now say so. They said "without the leading @", though the API always accepted one.
- A low-balance line set above the balance you have sends its email at once. No call could cross it, so it never sent one.
- The billing page says when calls stop: when a call costs more than the balance, not at zero.
Agent sign-ups, the usage page, and the docs
Fixed
- An agent whose name is longer than 32 characters now gets its key. The key's name is the agent's, shortened to fit the 40 characters a key name may have, and ends in "(agent)". Until now every check failed for a day, while its person was told "Approved".
- Approving an agent on an account that already has 10 active keys says so at once, before the code is checked, and the request waits while you revoke one.
- A call answered "not found" from the cache now reads in the usage log as the first such call does: refunded, at no cost. It was counted as "failed and charged" on the usage page. Past rows are corrected.
- The docs: the demo is captured every week, not every month; the limits page names the hourly limit on calls that find nothing; the quickstart names the "API keys" page and the "Confirm and sign in" button.
Improved
- A credit badge copies as "7–33 credits", with its space, and the status page's rows copy with a space between their cells.
- The pricing page describes its packs as structured data, each an offer at its price.
The API's edges
Fixed
- A `500` now carries an `x-request-id` header, the same id as its body's `request_id`, as every other answer does.
- A method other than `GET` on a path that is no endpoint, such as `PUT /v1/nothing/here`, answers `404` `unknown_endpoint`. It answered `405`, as if the path existed.
- `?demo=1` or `?demo=yes` answers `400` `invalid_parameter`, saying the value is `true`. It answered `missing_api_key`.
Improved
- `GET /v1/openapi.json` and `GET /v1/errors` are kept five minutes at the edge: they change only with a release.
Instagram account search gives names and links
Changed
- `instagram/search` returns `instagram_search_result`: each account's `username`, `name` and `url`. It returned whole accounts, but its source now answers from a search index with no counts, and every call failed. Call `instagram/profile` with a username for the whole account. A page still costs 3 credits.
Google Maps reviews come whole again
Fixed
- A page of `google-maps/reviews` gave one review instead of the whole page, and its next page gave none. Every review carries its place's `place_id`, and that id was read as the review's own, so all of a place's reviews counted as one. Each review now counts by its `review_id`.
Your trial is yours, and confirmation emails keep coming
Fixed
- If someone else's agent asked for an account with your address before you signed up, you got no trial credits. Signing up on the site now gives you the 2,000 credits, as it says.
- The day's budget for confirmation emails was one budget for everyone, so a single network could use it up. Each network now has its own share.
A call that finds nothing answers again from the cache
Changed
- A call for something that does not exist, such as an account that is not there, still costs nothing. Its answer is now kept for 6 hours, or the endpoint's cache window if that is shorter, so the same call answers at once.
- An account can make 1,000 calls an hour that find nothing, or 50 before it buys credits. Past that, the next call gets `not_found_limit` (HTTP 429) with a `Retry-After`. A failure on our side never counts.
The price in the endpoint list is the usual call's
Changed
- `GET /v1/endpoints` and `GET /v1/status` give `x/posts` as 13 credits, an account's posts, with `credits_by` saying 3 for `community_url`. `linkedin/posts` is 7, a person's posts or a search, and 3 for `company_url`. Both said 3 before, the cheaper call. No call costs more or less than it did.
Nobody on one network can keep you from signing in
Changed
- One inbox gets at most five emails an hour from one network, and ten from all networks together. Before, it was five from everyone, so a stranger asking five times an hour for your address kept you out of every browser you had not signed in from.
- A request we refuse sends no email, so it no longer counts toward the inbox's limit. It still counts toward the limit of the network that made it.
Every week
Above are the latest 20 entries. Each week, with all of its entries, has its own page.
- 2–8 November 2026Refused calls on the Requests page · Automatic top-ups, if you turn them on · and 4 more
- 26 October – 1 November 2026A LinkedIn person who does not exist, and an endpoint that cannot be served · The emailed link signs you in at once
- 12–18 October 2026Each endpoint's success rate and answer time, and the options that cannot be served · Empty answers, told apart, and agents on the dashboard
- 5–11 October 2026The status page says how each endpoint is now · Bank debits, closed accounts, the low-balance email, and the API's last odd answers · and 22 more
- 28 September – 4 October 2026The OpenAPI spec covers every path, and MCP refuses what it cannot use · Sessions end after 90 days, and a sign-in closes the other links · and 23 more
- 21–27 September 2026A demo that always answers the same, and jobs that finish · Comparisons, guides and a clearer price list · and 6 more
- 14–20 September 2026Async jobs, signed webhooks and an MCP server · Eighteen endpoints, one schema