BYTETOOLS

OpenAIRE API

Free OpenAIRE Search API with no key: publications, datasets, software and projects linked to EU funding, harvested from thousands of repositories. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the OpenAIRE API?

The OpenAIRE Search API is a free, key-free interface to the OpenAIRE Research Graph, which links publications, datasets, software and research projects harvested from thousands of repositories across Europe and beyond, including funding acknowledgements.

OpenAIRE's distinguishing feature is not its bibliographic coverage but its linkage. It joins outputs to the grants that funded them, to the datasets and software they produced, and to the organisations involved — which is why it underpins EU open-access compliance monitoring. If your question is which papers came out of a particular Horizon Europe project, this is the only free API that answers it directly.

The response format is unusual and worth budgeting time for. It is a JSON transliteration of OpenAIRE's underlying XML, so scalar values arrive wrapped as `{"$": value}` and XML attributes as `@name` keys — the example's `total` is `{"$": 253175}`, not a plain integer. Write a small unwrapping helper before anything else. Deduplication is another thing to understand: records prefixed `doi_dedup___` are merged clusters of the same work found in several repositories, which is usually what you want but means one logical paper can be reached through several identifiers.

Quick facts

Base URL
https://api.openaire.eu/search
Authentication
No API key for the public search endpoints. Registered clients get higher rate limits through an OAuth client credential, but registration is optional.
Rate limit
Reported in `X-RateLimit-Limit` and `X-RateLimit-Used` headers; the anonymous allowance observed here was several thousand requests per hour per IP.
Pricing
Free. The OpenAIRE Research Graph is released under CC BY; individual full texts remain under their own licences.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the OpenAIRE API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Search publications by title

GET https://api.openaire.eu/search/publications?title=graphene&size=1&format=json

curl
curl 'https://api.openaire.eu/search/publications?title=graphene&size=1&format=json'
JavaScript (fetch)
const res = await fetch("https://api.openaire.eu/search/publications?title=graphene&size=1&format=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.openaire.eu/search/publications?title=graphene&size=1&format=json", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "response": {
    "header": {
      "query": {
        "$": "(oaftype exact result) and (resulttypeid exact publication) and (resulttitle exact \"graphene\")"
      },
      "locale": {
        "$": "en_US"
      },
      "size": {
        "$": 1
      },
      "page": {
        "$": 1
      },
      "total": {
        "$": 253175
      },
      "fields": null
    },
    "results": {
      "result": [
        {
          "header": {
            "dri:objIdentifier": {
              "$": "doi_dedup___::5c1f1b8509680d3d3facb7bc9a609c43"
            },
            "dri:dateOfCollection": {
              "$": "2026-07-23T09:51:53.297344746"
            },
            "dri:dateOfTransformation": null
          },
          "metadata": {
            "oaf:entity": {
              "@xsi:schemaLocation": "http://namespace.openaire.eu/oaf https://www.openaire.eu/schema/1.0/oaf-1.0.xsd",
              "oaf:result": {
                "collectedfrom": [
                  {
                    "@name": "Crossref",
                    "@id": "openaire____::081b82f96300b6a6e3d282bad31cb6e2"
                  },
                  {
                    "@name": "Microsoft Academic Graph",
                    "@id": "openaire____::5f532a3fc4f1ea403f37070f59a7a53a"
                  }
                ],
                "originalId": [
                  {
                    "$": "10.1007/978-3-0348-9056-4_3"
                  },
                  {
                    "$": "50|doiboost____|5c1f1b8509680d3d3facb7bc9a609c43"
                  },
                  {
                    "$": "2

Parameters

ParameterTypeRequiredDescription
titlequeryOptionalMatch against publication titles. Combine with other filters to narrow. graphene
sizequeryOptionalResults per page, up to 100 on the search endpoints. 1
pagequeryOptionalOne-based page number. 1
formatqueryOptional`json`, `xml`, `csv` or `tsv`. XML is the native form; JSON is transliterated from it. json
projectIDqueryOptionalGrant identifier, to retrieve everything acknowledging a specific project. 654002
doiqueryOptionalLook up a specific work by DOI. 10.1007/978-3-0348-9056-4_3
fromDateAcceptedqueryOptionalLower bound on acceptance date, ISO format. 2024-01-01

Response fields

response.header.totalobject
Total matches, wrapped as `{"$": n}` like every other scalar in this API.
response.results.result[]array
The matched records. A single result is still nested under this path.
header['dri:objIdentifier']object
OpenAIRE's internal identifier. A `doi_dedup___` prefix marks a deduplicated cluster of the same work.
metadata['oaf:entity']['oaf:result']object
The actual bibliographic record, including titles, creators, subjects and access rights.
collectedfrom[]array
Which upstream sources contributed the record — Crossref, a repository, or several.
originalId[]array
Identifiers the work carries in its source systems, including its DOI.

What you can build with the OpenAIRE API

  • List every publication acknowledging a specific EU grant
  • Check open-access compliance for a funded project's outputs
  • Link a publication to the datasets and software it produced
  • Harvest repository metadata across many institutions in one query
  • Build funder-level bibliometric reports

Common errors and how to fix them

Scalars arrive as objects

The JSON is transliterated from XML.

Fix: Every value is wrapped as `{"$": value}` and attributes appear as `@name`. Write one unwrap helper and apply it recursively.

Single result not in an array

XML-to-JSON conversion collapses one-element lists.

Fix: Normalise `result` to an array before iterating, or you will index into an object.

429

Rate limit exceeded.

Fix: Watch `X-RateLimit-Used` against `X-RateLimit-Limit`. Registering for client credentials raises the allowance.

Duplicate-looking records

The same work exists in several repositories.

Fix: Prefer the `doi_dedup___` cluster identifiers, which represent the merged work rather than one repository's copy.

OpenAIRE API — frequently asked questions

Is the OpenAIRE API free?

Yes, no key or registration is needed for the public search endpoints, and the Research Graph is published under CC BY. Registering for client credentials is optional and only raises the rate limit.

Why does every value look like {"$": ...}?

The JSON output is a mechanical transliteration of OpenAIRE's XML records, so text nodes become `$` keys and XML attributes become `@`-prefixed keys. It is consistent, so a single recursive unwrapping function handles the whole response.

How do I find all outputs from a specific EU project?

Query the publications or datasets endpoint with `projectID` set to the grant number. That funding linkage is OpenAIRE's main advantage over general bibliographic APIs.

How does OpenAIRE differ from Crossref or OpenAlex?

Crossref holds what publishers deposit and OpenAlex builds a broad global graph. OpenAIRE harvests institutional and subject repositories, deduplicates across them, and adds the funding and project links that European open-science reporting requires.

Tools that pair with this API

OpenAIRE is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.