BYTETOOLS

Europe PMC API

Free Europe PMC API with no key: search 40M+ life science publications and abstracts, with full text where open access, citations and preprints. Tested.

No API key requiredCORS enabledHTTPSFree tier

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

What is the Europe PMC API?

Europe PMC is a free, key-free API for searching more than 40 million life science publications — abstracts, full text where openly licensed, preprints, patents and clinical guidelines — from PubMed, PMC and other sources.

Europe PMC aggregates PubMed alongside preprint servers, patents and clinical guidelines, which makes its coverage broader than PubMed alone. It is run by EMBL-EBI and funded by a consortium of European research funders.

Unlike NCBI's two-step search-then-fetch pattern, Europe PMC returns actual records directly from a single search request, which makes simple integrations considerably less work.

Quick facts

Base URL
https://www.ebi.ac.uk/europepmc/webservices/rest
Authentication
No API key required.
Rate limit
No published hard limit; the maintainers ask for reasonable use and a contact email in the User-Agent.
Pricing
Free. Open access content is reusable under its own licence.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Europe PMC API

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

1. Search life science literature

GET https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=malaria&format=json&pageSize=1

curl
curl 'https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=malaria&format=json&pageSize=1'
JavaScript (fetch)
const res = await fetch("https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=malaria&format=json&pageSize=1");
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://www.ebi.ac.uk/europepmc/webservices/rest/search?query=malaria&format=json&pageSize=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "version": "6.9",
  "hitCount": 283884,
  "nextCursorMark": "AoIIQG/5dCg1NjExNjU0Mg==",
  "nextPageUrl": "https://www.ebi.ac.uk/europepmc/webservices/rest/search?query=malaria&cursorMark=AoIIQG/5dCg1NjExNjU0Mg==&resultType=lite&pageSize=1&format=json",
  "request": {
    "queryString": "malaria",
    "resultType": "lite",
    "cursorMark": "*",
    "pageSize": 1,
    "sort": "",
    "synonym": false
  },
  "resultList": {
    "result": [
      {
        "id": "42575118",
        "source": "MED",
        "pmid": "42575118",
        "doi": "10.1016/j.langlo.2026.103984",
        "title": "Long-term mortality and risk of chronic kidney disease in children following severe malaria complicated by acute kidney injury: a prospective observational study.",
        "authorString": "Mellencamp KA, Namazzi R, Batte A, Kazinga C, Liepmann CD, Goings MJ, Opoka RO, Datta D, Ren J, Kalyesubula R, Bangirana P, Goldstein SL, John CC, Conroy AL.",
        "journalTitle": "Lancet Glob Health",
        "pubYear": "2027",
        "journalIssn": "2214-109x",
        "pageInfo": "103984",
        "pubType": "journal article",
        "isOpenAccess": "N",
        "inEPMC": "N",
        "inPMC": "N",
        "hasPDF": "N",
        "hasBook": "N",
        "hasSuppl": "N",
        "citedByCount": 0,
        "hasReferences": "N",
        "hasTextMinedTerms": "N",
        "hasDbCrossReferences": "N",
        "hasLabsLinks": "N",
        "hasTMAccessionNumbers": "N",
        "firstIndexDate": "2026-08-13",
        "firstPublicationDate": "2027-05-19"
      }
    ]
  }
}

Parameters

ParameterTypeRequiredDescription
querystringRequiredSearch query, supporting field syntax. malaria
formatstringOptionaljson, xml or dc. Default is XML. json
pageSizeintegerOptionalResults per page, max 1000. 25
cursorMarkstringOptionalDeep pagination cursor from the previous response. *
resultTypestringOptionalidlist, lite or core for increasing detail. core

Response fields

hitCountinteger
Total matching publications.
nextCursorMarkstring
Cursor for the next page — use for deep pagination.
resultList.result[].id / pmid / doistring
Identifiers across systems.
resultList.result[].titlestring
Publication title.
resultList.result[].authorStringstring
Authors as a single string.
resultList.result[].isOpenAccessstring
Y or N — whether full text is freely available.
resultList.result[].citedByCountinteger
Citation count.

What you can build with the Europe PMC API

  • Build a biomedical literature search across more than PubMed
  • Find open access full text for research papers
  • Include preprints in a literature review workflow
  • Track citations for a research group

Common errors and how to fix them

XML instead of JSON

XML is the default format.

Fix: Always pass format=json.

Deep paging fails past 1,000

Offset-based paging is capped.

Fix: Use cursorMark=* and follow nextCursorMark for large result sets.

Full text unavailable

Only open access content has retrievable full text.

Fix: Check isOpenAccess before requesting the fullTextXML endpoint.

Europe PMC API — frequently asked questions

Is Europe PMC free?

Yes, completely free with no API key. It is run by EMBL-EBI and funded by European research funders.

How does it differ from PubMed's API?

Coverage is broader — it includes preprints, patents and clinical guidelines alongside PubMed — and it returns records directly from a search rather than requiring NCBI's two-step search-then-fetch pattern.

Can I get full text?

For open access articles, yes, via the fullTextXML endpoint. Check the isOpenAccess field first; subscription content returns metadata only.

How do I page through many results?

Use cursorMark=* and follow nextCursorMark. Offset paging is capped at around 1,000 results.

Tools that pair with this API

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