Skip to main content

Changelog

Changes to the filter-based request and response surface, newest first. Entries are grouped by the release that shipped them.

Only user-visible changes are listed — new filters, new parameters, and changes to how values are accepted. For the current surface of each entity, see its filter syntax page.


1.6.0 — 12 October 2026​

Existence filters

A family of has_* filters that assert or negate the presence of a field or identifier, rather than matching a value: has_doi, has_pmid, has_pmcid, has_arxiv, has_handle, has_orcid and has_abstract. Available on research products only.

/v4/research-products?filter=has_doi:true

has_grant and has_license already existed and are unchanged; they were reimplemented on the same mechanism. See Existence.

Country groups

Two filters match a whole group of countries in one predicate, expanding at query time into the corresponding set of ISO country codes: authorships.continent and authorships.is_global_south on research products, and continent and is_global_south on projects, organizations and data sources. Persons has neither these nor the existence filters.

/v4/research-products?filter=authorships.continent:europe

Continents follow the UN Statistics Division M49 classification; the global-south grouping follows the UN Finance Center for South-South Cooperation. An unknown continent name is rejected with a 400 that lists the valid names. These two fields are not facetable. See Country groups.

Research products

Projects

  • pid — filter by persistent identifier.

  • project_status — filter by completed, ongoing or planned: /v4/projects?filter=project_status:ongoing

    note

    project_status is a filter only; the project status is not yet returned as a response field.

Request limits

At most 50 pipe-separated values are accepted for a single field. An oversized list is now rejected with a 400 naming the field, where it previously failed as a 500. The limit counts the values you send, so a server-side expansion such as continent:europe — one value that becomes some fifty country codes — is unaffected. See Value limits.


1.5.0 — 28 August 2026​

Data sources

  • endpoints — a new response field listing the data source's harvesting endpoints, such as its OAI-PMH base URL. See Sparse fieldsets.

1.4.0 — 6 July 2026​

The release that introduced V4, the current version of the filter-based API. It replaces the one-parameter-per-field style with a small set of orthogonal meta-parameters.

The unified filter grammar

  • filter — a single parameter using a compact field:value grammar: , for AND across fields, | for OR within a field, ! for negation, and > / < for ranges. This replaces the quoted inline-operator expressions of the parameter-based API, such as type=("publication" OR "dataset"), and makes logicalOperator unnecessary. See Filter syntax.
  • facets and group_by — aggregation counts alongside the records, or on their own with no records. Together these replace includeStats. See Aggregations.
  • select — sparse fieldsets, returning only the response fields you name. This has no equivalent in the parameter-based API. See Sparse fieldsets.
  • sort — comma-chained field:direction directives, replacing sortBy=fieldname ASC|DESC.

Entities

Launched with research products, then extended to projects, organizations, data sources and persons in the same release. Coverage was checked field by field against the parameter-based surface, so every parameter has a filter-based equivalent — see Migration from Parameter-based Queries.

Response models are shared with the parameter-based API and were not changed: the difference between the two is entirely on the request side.