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
title_and_abstract.search— searches title and abstract in a single predicate:/v4/research-products?filter=title_and_abstract.search:climate
Projects
pid— filter by persistent identifier.project_status— filter bycompleted,ongoingorplanned:/v4/projects?filter=project_status:ongoingnoteproject_statusis 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 compactfield:valuegrammar:,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 astype=("publication" OR "dataset"), and makeslogicalOperatorunnecessary. See Filter syntax.facetsandgroup_by— aggregation counts alongside the records, or on their own with no records. Together these replaceincludeStats. 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-chainedfield:directiondirectives, replacingsortBy=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.