<!-- source: https://docs.redpine.ai/docs/changelog -->
# Changelog

> What changed in the API, the dashboard, the SDKs, the CLI and these docs, newest first.

## 2026-10-16

**Documentation**

* [Collections](/docs/collections) documents the journal listing and catalogue questions. [Assisted search](/docs/assisted-search#long-queries) covers long queries and sub-questions. [Search](/docs/search) and [Preview and unlock](/docs/preview-unlock) list `relevance`, `chunk_index` and `discovery`. [Errors](/docs/errors) adds the credit, billing and key spending cap errors, and [Filtering](/docs/filtering) the `doi_not_in_collection` warning.
* [MCP](/docs/mcp) describes `relevance` as a score only, lists `filterDiagnosis` and `filterSuggestions`, and explains the billing error codes. [SDKs](/docs/sdks) states the default timeouts.

## 2026-10-15

**API**

* Every result on `POST /search/query`, `POST /search/preview` (locked rows included), `POST /search/unlock` and `GET /search/results/{queryId}` carries `relevance`: how well the passage answers the query, from 0 to 1, and is `null` on rows cached before this change. Assisted search keeps its own `judgeScore`. On MCP result rows, `relevance` is the only score field. See [Search](/docs/search#result-object).
* Unlocked MCP result rows carry `chunk_index`, as REST results do.
* The MCP server publishes a `redpine-search` skill through the MCP Skills extension, so a skill-aware agent can fetch a current, versioned search guide straight from the server.
* Searches read far less from disk, which keeps latency steady under load. Rankings on hybrid searches can differ very slightly.

**SDKs**

* The Python and Go SDKs wait up to 120 seconds for assisted search by default, so long queries no longer time out. Other calls still wait 30 seconds, and a timeout you set applies to every call. The TypeScript SDK sets no timeout unless you pass one. See [SDKs](/docs/sdks#configure).
* Assisted search responses expose `caseSummary`, `subQuestions` and each result's `subQuestion` in all three SDKs. The generated clients also include `discovery`, `relevance` and the collection journals listing.

## 2026-10-14

**API**

* `POST /search/assisted` accepts queries up to 16,000 characters, so you can send a whole document such as a case note. A long query is split into up to four sub-questions, each searched and verified on its own; `queryUnderstanding.caseSummary`, `queryUnderstanding.subQuestions` and each result's `subQuestion` show how it was read. Assisted search returns at most one result per article, and asks for clarification only when a query cannot be searched as written. See [Long queries](/docs/assisted-search#long-queries).
* Result `metadata` includes `chunk_index`, the passage's 0-based position in its document, on search, assisted search, unlock and cached results, so you can order or stitch neighbouring passages. Locked preview rows do not carry it.
* An empty search that pins one or more DOIs adds a `doi_not_in_collection` filter warning for the pinned DOIs your key cannot reach in the collection, checked for up to ten DOIs, so you can tell a missing paper from a filter that is too narrow. See [Filtering](/docs/filtering#filtering-by-journal-and-article-identity).
* An API key's spending cap is now enforced when the key is used through MCP sign-in, not only with `X-API-Key`, and a key that hides the balance hides it there too. Paid integration tools count against the cap and are refused before they run if they would exceed it, and sub-cent charges now count. See [Errors](/docs/errors).

**Dashboard**

* A dashboard tab left open across an update reloads itself once if a page fails to load, instead of staying broken.

## 2026-10-08

**API**

* When an MCP search with filters returns nothing, the response can include `filterDiagnosis`: whether any document matches your filters at all, and which condition, if removed, brings documents back. An agent can tell whether to relax the filter or rephrase the query. It costs nothing, and is left out when it cannot help, such as for a filter on identifiers only.
* When an MCP search filtering on `journal` or `publisher` returns nothing, `filterSuggestions` offers the closest names your key can search, with a journal's ISSN to filter on where one is known. `journal` and `publisher` remain exact-match filters.
* The MCP server's instructions and tool descriptions now match its behaviour: `preview` and free tools keep working at zero balance, `cost_to_unlock` appears only on paid previews, and `confirm` takes `result_ids`.

## 2026-10-07

**API**

* Ranking across several collections has a fallback, so fewer searches drop back to retrieval order.

## 2026-10-06

**API**

* Ranking across several collections holds up under heavy concurrent load: searches it cannot take are passed on immediately instead of after a wait, so fewer drop back to retrieval order.
* Searches keep working when the query-embedding service is slow or restarting, by switching to a standby. A search served that way can take a little longer.

**Dashboard**

* The welcome step also asks, optionally, where you heard about Redpine.

## 2026-10-05

**API**

* Questions about the catalogue itself, such as which data sources, publishers or journals your key can reach, sent without filters, are answered from the catalogue at no charge instead of running a billed search. Search, preview and assisted search return the answer in a new `discovery` field with `results` empty. See [Catalogue questions](/docs/collections#catalogue-questions).
* New `GET /search/collections/{name}/journals`, and the MCP tool `list_journals`, list the journals in a collection, free: ranked by h-index with their impact factor, or by topic, filterable by publisher and minimum h-index, with the ISSNs to filter a search on. See [List journals in a collection](/docs/collections#list-journals-in-a-collection).
* Over MCP, an out-of-credits, suspended-billing, exhausted-trial or key spending cap refusal is a normal tool error ending in an `[error_code: ...]` tag, with a purchase link where relevant, instead of a generic internal error. Nothing is charged, and the call can be retried once resolved. A malformed `queryId` returns not found instead of a server error.
* Opening `https://api.redpine.ai/mcp` in a browser shows a setup page with the copy prompt and **Add to Claude** and **Add to ChatGPT**, instead of a Method Not Allowed error. MCP clients are unaffected.
* Search and collection lookups retry a dropped connection to the search index instead of failing with a `500`.
* Fixed a case where a card purchase that needed extra verification could leave automatic top-ups blocked, and duplicate payment notifications can no longer credit an organization twice.

**Dashboard**

* Home's setup card leads with the copy prompt, under **For your agents**. The chat app buttons sit on the right and read **Add to Claude** and **Add to ChatGPT**.
* Home no longer has the Playground, Data Sources, API Keys and Buy credits quick actions. Data Sources and the Playground leave the sidebar and the command menu; the Playground is still at `/org/{orgId}/playground`, where questions about the catalogue get a free catalogue answer instead of "No results", and an organization with one key and one collection has both preselected. Metadata is always included, so the **Include metadata** switch is gone.
* New accounts start with a live API key named Default, and a short welcome step asks for your organization's name, and yours if we do not have it. You can skip it. It also appears when the first thing you do is **Add to Claude**.
* Connecting an assistant from **Add to Claude** or **Add to ChatGPT** is one **Connect** click when you belong to one organization, and the success page names the app you connected.
* You can delete your own account from Settings. The page lists the organizations it affects: one where you are the only owner, and your personal organization, is deactivated for all its members, with its keys revoked and its data kept; from one with another owner you simply leave. Confirm by typing your email.
* Dashboard sessions stay signed in for up to 14 days of inactivity, with a 30-day maximum. Signing out always clears the session, and returning users are signed back in without a redirect loop.
* Adding a card from Home opens a dialog in place, explaining why a card is needed before the card form, and your balance updates as soon as the card is added.
* The Create API key dialog explains in plain language what a key is, and the sandbox switch reads &#x2A;*Sandbox key (for testing)**.
* The sign-in notice links the Terms of Service alongside the API Access Terms and the Privacy Policy.
* The cookie prompt is a centred dialog with **Customize** and **Accept all**; **Accept necessary** inside Customize keeps analytics off. Your choice is shared with docs.redpine.ai, so you decide once.
* Links to app.redpine.ai show the Redpine image and title when pasted into chat or social apps.

**Documentation**

* [Get started](/) is now the docs home page at docs.redpine.ai. Links to `/get-started` keep working and land there.
* Every setup prompt in these docs, including the per-client "let a coding agent handle setup" one, is now the same prompt as Home's Copy prompt.
* Get started has the same Copy prompt menu as Home: copy the setup prompt or open it in Claude Code or Codex, with **Add to Claude** and **Add to ChatGPT** links. The Claude Desktop and ChatGPT steps link the listing as a one-click alternative.
* docs.redpine.ai asks before running analytics, and shares your choice with app.redpine.ai. **Cookie preferences** at the foot of the sidebar reopens it.

## 2026-10-04

**API**

* New organizations no longer get a sandbox key automatically. Create one from the API Keys page when you want it. Sandbox keys that were created automatically have been revoked; sandbox keys you created yourself are unaffected. See [Sandbox](/docs/sandbox).
* An MCP OAuth access token stops working as soon as the API key behind it is revoked, including keys revoked from the dashboard. Before, a `client_credentials` token could keep working for the rest of its hour.

**Dashboard**

* While a sandbox key is selected, the Playground shows an amber banner above the results, tags every result **Sample**, and names the response "Sandbox · sample data, no charge". Live keys are listed first.
* The API Keys page explains what a sandbox key does under its name.
* Switching keys in the Playground cancels the request in flight, so one key's results never appear under another.
* On a phone or tablet, Home's **Open in** menu opens the Claude and ChatGPT apps with the setup prompt filled in.

**Documentation**

* [Sandbox](/docs/sandbox) says sandbox keys are opt-in and how the Playground marks sandbox output.
* [Preview and unlock](/docs/preview-unlock#retrying-a-preview-safely) explains how to retry a preview safely with `Idempotency-Key`, and [Errors](/docs/errors) lists `INVALID_QUERY`, `SEARCH_RATE_LIMITED` and the two idempotency codes.

## 2026-10-03

**Dashboard**

* Home's setup card splits by client. Chat apps (Claude and ChatGPT) link straight to their connector and plugin listings. Coding agents copy a setup prompt that connects over browser sign-in, checks the tools, offers three first questions and asks before any paid unlock.
* Customer-facing wording says "collection" throughout, never "meta-collection".

## 2026-10-02

**Dashboard**

* Home's Copy prompt can open straight in Claude Code or Codex with the setup prompt filled in. If the app is not installed, the prompt is copied instead.
* On Data Sources, a collection that searches several others opens a panel listing what it covers: each collection with its licence type, description and your price per 1,000 tokens, plus any tool integrations it carries.

## 2026-10-01

**API**

* Journal-metric filters are back: `journal_metric.2yr_mean_citedness`, `journal_metric.h_index` and `journal_metric.i10_index` take range operators on search, preview, unlock, assisted search and MCP. Each threshold is resolved to the matching ISSNs from OpenAlex data (snapshot 2026-09-23), and REST responses report the result in `journalMetricExpansions`. See [Filtering](/docs/filtering#journal-metrics).
* New `journal_metric.impact_factor`: an impact factor Redpine computes from OpenAlex citation data with the standard two-year formula. It is not Clarivate's Journal Impact Factor, and a journal without enough articles has no value.
* Each metric has a lowest `gte` and a highest `lte` it accepts on its own. A threshold outside them returns `422 INVALID_FILTER` naming the bound and how to fix it.
* A metric condition can expand to at most 35,000 ISSNs, a request can send at most 70,000 `in`/`not_in` values counting your own lists, and a filter can hold at most 8 `journal_metric` conditions. A filter over any limit returns `422 INVALID_FILTER` naming the limit.
* A condition that matches no journal adds a `journal_metric_matched_nothing` filter warning.
* A filter number that parses as NaN or Infinity returns `422 INVALID_FILTER` naming the field. Before, it returned a `500`.
* `POST /search/preview` accepts an `Idempotency-Key` header, so a retried request returns the original `queryId` instead of running a second search. Reusing a key with a different body returns `422 IDEMPOTENCY_KEY_REUSED`. See [Preview and unlock](/docs/preview-unlock#retrying-a-preview-safely).

**SDKs**

* The Python, TypeScript and Go SDKs return `filters_applied` (`filtersApplied`) on search and preview responses and `figure_count` (`figureCount`) on preview and result rows. Their filter documentation covers the up-front `422` rules, journal metrics including impact factor, and the limits. See [SDKs](/docs/sdks).

**Dashboard**

* Home replaces Get started. It has one setup prompt, quick actions for the Playground, Data Sources, API Keys and, for owners, buying credits, and a heading that changes after your first query. Usage moves to Analytics, which also holds the audit log for owners and admins.
* The organisation switcher moves into the first breadcrumb on every page.
* The playground's filter builder offers impact factor.

**Documentation**

* [Filtering](/docs/filtering) documents journal metrics again: the four fields, what a `0` means, exclusion with `not`, each metric's bounds and the expansion limits.

## 2026-09-30

**Dashboard**

* New members land on a setup page with one prompt their agent reads to connect itself over MCP sign-in, with no API key needed. Pending invitations are shown there too.
* The sidebar is grouped into Build (Data Sources, Playground, API Keys) and Manage (Members, Billing, Audit), with a Docs link. API keys and AI assistants share one page with tabs, and the three-step onboarding dialog is gone.

## 2026-09-29

**API**

* First searches on large collections are faster, with no change in what they return.

## 2026-09-24

**Dashboard**

* Closing the cookie dialog keeps analytics off, and moving a switch no longer saves your choice on its own. Only Save choices, Accept all and Reject all do.
* The sign-in consent line links the API Access Terms and the Privacy Policy.

## 2026-09-23

**API**

* MCP server instructions describe the catalog and list every tool, including `get_balance` and `request_journal`, instead of telling the agent which tool to call first.

**Dashboard**

* A cookie banner asks before any analytics run. Reject all, Customize and Accept all carry equal weight, and Cookie preferences can be reopened from the sign-in page, the user menu and Settings.

## 2026-09-18

**API**

* On a search across several collections, MCP `relevance` is scored after the collections are merged.
* Searches made through a collection's own MCP search tool are counted once in usage. Before, they were counted twice.
* An empty MCP `preview` returns the same message as an empty search, pointing to `request_journal`.

**Dashboard**

* Audit log search rows show only the filters you sent and mark searches that returned nothing with a No results badge. The status filter has a No results option.

## 2026-09-17

**API**

* Redpine's science collection no longer returns preprints.
* Searches across several collections are much faster.
* Queries written in non-Latin scripts, such as Cyrillic, Arabic or Chinese, are matched by meaning alone when keyword matching would drop most of their words. Before, such queries could return unrelated documents.

## 2026-09-16

**API**

* The same search returns the same results, and so the same price, every time it runs.

**Documentation**

* The quickstart now redirects to [Get started](/), and [SDKs](/docs/sdks) has a "Your first request" section: start with a sandbox key, then make the same call in cURL, Python, TypeScript and Go.

## 2026-09-15

**API**

* MCP `confirm` opens with a `receipt` naming what that call unlocked (each result's `id`, `title` and `doi`) with `cost_charged` and `balance_remaining`. `unlocked_count` stays the running total for the `queryId`; confirming results already unlocked within that `queryId` returns an empty receipt and a charge of `0`. See [MCP](/docs/mcp).
* Every MCP result row from `search`, `preview` and `confirm` carries `relevance`, a score for how well the passage answers the query. See [MCP](/docs/mcp#search-results-over-mcp).
* A result's source label within a meta-collection is the same on every surface: search results, collection listings and MCP tools.
* API keys created with `hide_balance` no longer see the organisation's balance in `get_balance`, the `find-tools` status line, the insufficient-credits error on `confirm`, or the `402` body on `/api/v1/search` and `/api/v1/search/unlock`. Costs are still reported.
* `get_balance` and the `find-tools` status line say when a trial ended because credits were added, instead of showing a bare count; `get_balance` returns `trial_ended_reason`.
* An error for a tool that cannot be previewed points to `inspect-tool` to check the price, instead of suggesting a direct call.
* `journalMetricExpansions` is removed from search, preview, unlock and assisted-search responses; `journal_metric` filters have been rejected since 2026-09-14, so it could never carry data.
* `GET /api/v1/search/results/{queryId}` returns the `filterWarnings` an assisted search originally carried.
* Error details returned to clients no longer include raw text from the retrieval service.

**Dashboard**

* The organisation audit log has a **Connections** filter for MCP reconnect events, and the default view and the Recent Activity panel no longer show them, so searches and purchases stay visible. Connection grants and revocations remain in MCP Activity.
* New organisations receive occasional emails to help them get started and to announce new collections. They come from [support@redpine.ai](mailto:support@redpine.ai), and replies reach a person.

**Documentation**

* [Filtering](/docs/filtering) documents which filters are rejected with `422 INVALID_FILTER`, the one-operator-per-condition rule, date formats and the `filtersApplied` echo. [MCP](/docs/mcp) documents the shared result shape of `search`, `preview` and `confirm`, and figure accounting. [Errors](/docs/errors) lists `INVALID_FILTER`.

## 2026-09-14

**API**

* Search filters that cannot be honoured are rejected up front with `422 INVALID_FILTER` naming the field: unknown fields, mixed filter formats, unknown operators, range and equality operators on one condition, invalid dates, unrecognised `article_type` values, `journal_metric.*`, `doc_id`, and fields a collection has no index for. `limit` outside 1–30 is rejected instead of clamped. These errors no longer say "Retry once". See [Filtering](/docs/filtering).
* A query the search service rejects returns `422 INVALID_QUERY`, and a burst of rejected queries returns `429 SEARCH_RATE_LIMITED` with `Retry-After`, instead of a `503`. This applies to REST search, MCP `search` and `preview`, and assisted search.
* Fewer real queries are refused as noise. A repeated character is rejected only when it is the whole query, such as `aaaaaaa`, so a query that merely contains a long run of one letter now goes through. See [Errors](/docs/errors).
* Search, preview and unlock responses echo the filters that were applied as `filtersApplied`.
* Over MCP, `search`, `preview` and `confirm` return the same result rows, including authors, ISSN, keywords, section, article type and open-access status. Direct `search` reports `cost_charged` and `balance_remaining`. Figure delivery reports `images_attached`, `unavailable` and `omitted_over_limit`, which add up to `figure_count`, and each image caption names its result. See [MCP](/docs/mcp).
* Direct MCP `search` returns its rows as structured content instead of Markdown. Clients read `structuredContent`; the "Found N results" header, `score` and `chunk_index` are gone.
* An expired MCP session returns HTTP `404`, so clients reconnect instead of looping on an error. A session in use no longer expires 24 hours after it began.
* MCP `search` is marked as not read-only, because it can charge; `preview` stays read-only.
* Agent-facing text and tool discovery reflect the caller's own catalog.

## 2026-09-11

**API**

* Fixed intermittent `500` errors on search, and slow account and balance responses while searches were running.
* Daily spend alert emails are sent again.

**Dashboard**

* Onboarding, joining an organisation, creating an API key and connecting an MCP client record your acceptance of the version of Redpine's terms you were shown. The policies live at [legal.redpine.ai](https://legal.redpine.ai), and the old in-app policy pages redirect there. Connecting an MCP client no longer accepts the API terms on your organisation's behalf; an admin accepts them in the browser first.

## 2026-09-10

**API**

* Preview results carry `figureCount`. `POST /search/unlock` takes `includeFigures` to return the figure images with the unlocked text, at no extra cost and up to 50 images per call, and `GET /search/results/{queryId}` can fetch them again. Over MCP, `confirm` takes `include_figures`. See [Search](/docs/search).
* MCP tools have readable titles and plainer descriptions.
* Fewer intermittent `503` errors on search.

**SDKs**

* The Python SDK is on PyPI: `pip install redpine-sdk`. See [SDKs](/docs/sdks).

**Documentation**

* [Get started](/) gives the exact setup steps for your client (Claude Code, Codex, Cursor, Claude Desktop, ChatGPT and others) or SDK, and the docs home page is redesigned.

## 2026-09-09

**API**

* `data_provider` is no longer returned in result metadata, and a filter on it returns `422 INVALID_FILTER`.

**Dashboard**

* Playground results show the publisher alongside the journal and publication details, making sources easier to identify.
* You can clear the playground's recent calls for your current organisation.
* Legal documents open in a new tab during sign-in and setup, so checking a policy no longer takes you away from the form you are completing.

## 2026-09-08

**API**

* Search filters out very short fragments, such as isolated headings, so results contain more useful text. See [Search](/docs/search).

**Dashboard**

* The playground's Code tab shows the request with the Python, TypeScript and Go SDKs, the same calls the guides use; cURL stays the raw request. Results is the first tab, and the results panel scrolls on its own. See [SDKs](/docs/sdks).

## 2026-09-07

**API**

* Agents can request a missing journal or publisher with the free `request_journal` MCP tool. Available to organisations with access to a collection.
* `open_access` filters across a meta-collection: a collection that holds only open-access content answers the filter as a whole, and `open_access: false` excludes it with a `filterWarnings` entry. `license` is returned in result metadata but is not a filter. See [Filtering](/docs/filtering).
* Collection listings show exact prices only. A meta-collection whose members all cost the same shows one price rather than a range, and a price that cannot be resolved is reported as unavailable, never as `$0.00`. There are no more estimated per-query costs. See [Collections](/docs/collections).
* Balance and charge amounts over MCP are reported at ledger precision, so a sub-cent charge no longer rounds to `$0.00`.
* People who join through an organisation invite no longer get a separate personal workspace created alongside it.
* Reliability fixes for assisted search and for retrieval connection errors.
* `X-Query-Cost` is what the request was charged. For a billing-exempt organisation it carried an estimate, which read as a charge; it is now `0.000000` whenever nothing was charged (`exempt`, `trial` and `sandbox` modes), on the REST headers and in the MCP billing footer. See [Rate limits and billing headers](/docs/rate-limits).
* A search on a collection that no longer exists answers `404 COLLECTION_NOT_FOUND` instead of `503 QDRANT_UNAVAILABLE`.

**Dashboard**

* Request a journal or publisher from Data Sources and see your organisation's submitted requests.
* The playground is rebuilt around the request: pick a key, choose collections as chips, ask, and send. Results render as reading rows with title, journal, year, DOI and source link and the query terms marked, with the raw response, headers and the request as cURL, Python, TypeScript and Go a tab away. A ledger line shows status, latency, results, tokens, what was charged and the balance, read from the response itself.
* Results render as markdown by default (headings, lists and tables in the chunk text), with a Plain text view that marks the query terms. The ledger line names the billing mode and says "no charge" for exempt, trial and sandbox requests.
* With Include figures on, figures render as thumbnails that open full size with their caption. Figures that were not fetched keep their label, caption and link.
* The documentation pages inside the dashboard are retired. Every old `/docs` link, in the dashboard and on the public site, redirects to the matching page on docs.redpine.ai. The playground moved to `/org/{orgId}/playground` and stays in the sidebar next to API Docs.
* The billing transaction table shows a sub-cent charge as `<$0.01` instead of `$0.00`.

**Documentation**

* This changelog.
* [Filtering](/docs/filtering) documents `open_access` across open-access collections and that `license` is not a filter; [Collections](/docs/collections) documents when `priceRange` is null.
* Each tool on an [integration page](/docs/integrations) has its own anchor, so links from the playground land on the tool.

## 2026-09-04

**CLI**

* New `redpine preview`, `redpine confirm` (alias `unlock`) and `redpine balance`, so the free-preview-then-pay flow works from the terminal. See [Preview and unlock](/docs/preview-unlock).
* Reads `REDPINE_API_KEY` and `REDPINE_BASE_URL`, the same names the SDKs use. `CONNECT_API_KEY` and `CONNECT_SERVER_URL` still work.
* Output is the JSON envelope whenever stdout is not a terminal; `--json` and `--pretty` force either. This is what the README always said and it now holds.
* A tool result flagged as an error renders as the error envelope with a non-zero exit, instead of success.
* `redpine update` verifies the download against the release's `checksums.txt`. A newer release is a notice on stderr, no longer a block on every command.
* `whoami` labels sandbox keys.

## 2026-09-03

**SDKs are public**

* Official clients for [Python, TypeScript and Go](/docs/sdks). TypeScript is on npm as `@redpine-ai/sdk`; Go via the module proxy.
* The SDKs add `preview()` and `unlock()`, and `get_results` returns the preview shape with `locked`, `tokens` and `cost` per row. New typed errors for `402` (insufficient credits) and `410` (expired).
* Every guide on this site now shows the SDK call next to the cURL request.

**API**

* [Preview and unlock](/docs/preview-unlock): `POST /api/v1/search/preview` runs a search for free and returns teaser rows with a price per row; `POST /api/v1/search/unlock` pays for the rows you choose. `GET /api/v1/search/results/{queryId}` returns the same shape. Previews last 7 days, and over MCP a confirm can be retried.
* [Sandbox mode](/docs/sandbox): `sk_test_` keys return synthetic fixtures at no cost, on the same endpoints. Every response carries `X-Billing-Mode`.
* Assisted search falls back to a second model provider when the first is unavailable.
* MCP search results no longer expose the internal retrieval score.
* `last_updated_date` is filterable on the editorial collections. It is the freshness signal there, since editorial articles are revised in place rather than republished. See [Filtering](/docs/filtering).
* Integrations such as media and aviation tools are enabled per organisation, off by default. Turn them on from the Data Sources page in the dashboard.
* Organisations on a billing exemption no longer open every MCP session with a "No balance remaining" notice.
* Every email the platform sends, including the sign-in code and receipts, is readable on a phone without zooming.

**Dashboard**

* API Keys: create a sandbox key, badged so it cannot be mistaken for a live one.
* Data Sources: switch integrations on or off for your organisation, and see whether each data source is granted directly, included with a bundle, or open access.
* Publisher organisations get an editorial theme across the dashboard, with the publisher's logo in the masthead.

**Documentation**

* SDK examples on every guide, and the quickstart installs a client instead of showing raw HTTP.
* The language picker remembers your choice across pages, and always has a tab selected.
* [MCP](/docs/mcp): setup guides per client (Claude Code, Codex, Cursor, Claude Desktop, ChatGPT and others) and the `search`, `preview` and `confirm` tool surface.
* [Which search endpoint](/docs/search-endpoints): a short decision guide between direct, preview and assisted search.
* [Integrations](/docs/integrations) lists the tools available to your organisations when you are signed in.
* The `X-API-Key` header is documented as an alternative to `Authorization: Bearer`. See [Authentication](/docs/authentication).

## 2026-09-02

**API**

* Searches across several collections are merged by relevance rather than by rank alone. Before this, equal-length result lists tied rank for rank and the wrong collection took the top slot in most measured searches. Single-collection searches are unchanged.

## 2026-09-01

**Documentation**

* This site, docs.redpine.ai, is live.
* The [API reference](/docs/api-reference) is generated from the public OpenAPI spec, the same spec the SDKs are built from.
* `/llms.txt` and `/llms-full.txt` serve the docs as Markdown for agents, and any page is available as Markdown by appending `.md` to its URL.

**API**

* Search results are cached reliably, including assisted search, so re-fetching by `queryId` within 7 days works every time.

## 2026-08-31

**API**

* The organisation audit log lists only events that belong to your organisation. Actions taken by Redpine staff from outside the organisation are attributed to "Redpine Staff".
* A meta-collection can bundle integrations alongside collections. Tools included this way appear on the Data Sources page and over MCP.
* A signup through an invite link gets a welcome email that names the invite and what it grants, and lands back on the invite.

## 2026-08-28

**API, Dashboard**

* An invite link can require accepting a terms document before it is claimed. The acceptance is recorded with the claim.
* The post-signup setup commands for Claude Code and Codex are corrected. Both failed on first use before.

## 2026-08-27

**API, Dashboard**

* `isbn`, `open_access`, `chapter_number`, `chapter_title` and `chapter_authors` are indexed filter fields on every collection, and `article_type` accepts `book` and `book-chapter`. See [Filtering](/docs/filtering).
* Invite links: an invite from Redpine is claimed at `app.redpine.ai/redeem/{code}`. It can grant credits, collections and integrations to the workspace you choose, and the page shows what it grants before you claim.
* New accounts get a three-step onboarding on first visit: connect a client, see what you can reach, add a card for premium content. It can be closed and reopened.

## 2026-08-25

**API**

* Search no longer expands query terms from a synonym dictionary by default. Measured on real queries, expansion lowered ranking quality. Where it still applies, an acronym expands only when written the way the dictionary spells it (`PCR`, not `pcr`), and a phrase matches only at word boundaries.
* Over MCP, a search across a meta-collection names the source collection on each result, and the `search-{collection}` tool description lists the sources it covers.

**Dashboard**

* A new visual design across the dashboard: surface hierarchy, rounded controls, one type family.
* An integration's own error message is shown as a tool error in the playground, not as a malformed request.

## 2026-08-23

**API**

* A tool that ran and returned a domain error (no results for that keyword, a rule that said no) now returns `422 TOOL_ERROR` with the tool's message. It was reported as `502`, which behind the CDN lost the message entirely.
* Fixed intermittent `503` responses under bursts of MCP connection attempts.

## 2026-08-20

**API**

* A paid MCP confirm returns `doi`, `pmid`, `pmcid` and `url` on every result that has them, so results can be cited. Editorial content, which has no DOI, is located by `url`.

## 2026-08-19

**API, Dashboard**

* Search runs on a new multilingual embedding model with a normalised metadata schema: `publication_date` is a real date field, and `article_type` and `section` use controlled vocabularies. See [Filtering](/docs/filtering).
* When an MCP search fails, the error says why (a timeout while a large collection warms up, a connection failure) with an `error_code`, instead of a generic "please try again".
* The public OpenAPI spec documents the billing response headers and the assisted-search semantics, and matches the live schemas.
* Billing: one page for balance, adding funds, payment settings and a single activity table with payments and disputes. The old billing routes redirect.

**CLI**

* `redpine search` takes `--filter key=value` (also `!=`, `>=`, comma-separated lists) and `--filter-json` for a full filter document.
* Updated Go toolchain and dependencies.

## 2026-08-18

**API**

* Fixed: `POST /api/v1/search/assisted` returned a validation error for a day, because the per-collection search route captured it.
* Meta-collections support MCP preview and confirm, and a meta-collection can be open to every organisation.

## 2026-08-17

**API**

* Meta-collections: a named collection that spans several publisher, journal or curated collections, searched and billed as one unit. `GET /api/v1/search/collections` lists a meta-collection with its member names, member count and price range; pass its name as `collection` to search every member together. See [Collections](/docs/collections).

## 2026-08-11

**API, Dashboard**

* Articles listed as retracted are excluded from search results on the scholarly collections.
* Signing out revokes the session on the server, not only in the browser.
* MCP connections no longer count toward the organisation's API key limit, which had blocked key creation for organisations with many connected clients.
* Invite or add several people in one submission: the members dialog takes a pasted list, and a bad address is reported beside the successes instead of failing the whole batch.
* A missing display name is filled from Google on sign-in; otherwise the dashboard asks for one.
* Error messages in the dashboard show the API's own message instead of a generic one.

## 2026-08-10

**API, Dashboard**

* Collection names are matched case-insensitively, so any capitalisation of a name resolves to the same collection. Display spelling is unchanged.
* Publisher dashboard for content partners: earnings, tokens served, citations, top content, a geography view, and a live feed of the last hundred citations of your content.
* The organisation audit log records how each sign-in happened (Google, one-time code, passkey) and sign-ins refused by the identity provider.

## 2026-08-07

**API**

* A revoked API key returns `401 API_KEY_REVOKED` rather than `INVALID_API_KEY`. See [Errors](/docs/errors).
* Every search result carries the name of the collection it came from.