Nih APIpmc.ncbi.nlm.nih.gov ↗
Access full-text biomedical research articles, citations, similar articles, and journal data from PubMed Central via 6 structured endpoints.
What is the Nih API?
The PMC API provides access to PubMed Central's repository of full-text biomedical research through 6 endpoints covering article search, full content retrieval, citation lookup, similar article discovery, and journal browsing. The get_article endpoint returns structured body sections, author affiliations, and reference lists by PMC ID, while search_articles supports the full PubMed query syntax for targeted literature searches.
curl -X GET 'https://api.parse.bot/scraper/1f817882-9876-4757-9c3e-ddfadc58f9b2/search_articles?sort=relevance&limit=5&query=CRISPR+gene+editing&offset=0' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace pmc-ncbi-nlm-nih-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: PMC SDK — search articles, drill into full text, explore citations."""
from parse_apis.pubmed_central_pmc_api import PMC, Sort, ArticleNotFound
client = PMC()
# Search for recent CRISPR research articles, sorted by date.
for article in client.articles.search(query="CRISPR gene editing", sort=Sort.DATE, limit=3):
print(article.title, article.journal, article.pub_date)
# Drill into the first result for full content.
hit = client.articles.search(query="telemedicine trust", limit=1).first()
if hit:
full = hit.details()
print(full.title, full.abstract[:120])
for author in full.authors[:2]:
print(author.name, author.affiliations)
# Explore citation network of a known article.
article = client.articles.get(pmcid="PMC4728819")
for citing in article.citations(limit=3):
print(citing.pmcid, citing.title, citing.journal)
# Find similar articles via PubMed's neighbor algorithm.
for sim in article.similar(limit=3):
print(sim.pmcid, sim.title, sim.pub_date)
# Search journals and list articles from one.
journal = client.journals.search(query="vaccine", limit=1).first()
if journal:
print(journal.name, journal.publisher)
for art in client.journal(journal.name).articles(limit=2):
print(art.pmcid, art.title)
# Typed error handling for a missing article.
try:
client.articles.get(pmcid="PMC0000000")
except ArticleNotFound as exc:
print(f"not found: {exc.pmcid}")
print("exercised: articles.search / articles.get / citations / similar / journals.search / journal.articles")
Full-text search over PubMed Central articles by keyword. Supports PubMed query syntax including Boolean operators and field qualifiers. Returns paginated article summaries with identifiers, titles, authors, journals, and publication dates. Sort by relevance (default) or date.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results |
| limit | integer | Number of results to return (max 100) |
| queryrequired | string | Search keywords (supports PubMed query syntax including Boolean operators and field qualifiers) |
| offset | integer | Offset for pagination |
{
"type": "object",
"fields": {
"total": "integer total count of matching articles",
"articles": "array of article summary objects with pmcid, pmid, doi, title, authors, journal, pub_date, url"
},
"sample": {
"data": {
"total": 3909319,
"articles": [
{
"doi": "10.1159/000547553",
"url": "https://pmc.ncbi.nlm.nih.gov/articles/PMC12503546/",
"pmid": "41064558",
"pmcid": "PMC12503546",
"title": "Exploring the Role of Physical Activity in Individuals with Comorbid Cancer and Dementia: A Scoping Review.",
"authors": [
"Mclaughlin M",
"Sanal-Hayes NEM"
],
"journal": "Dement Geriatr Cogn Dis Extra",
"pub_date": "2025 Jan-Dec"
}
]
},
"status": "success"
}
}About the Nih API
Article Search and Retrieval
The search_articles endpoint accepts a query parameter using standard PubMed query syntax — Boolean operators, field tags like [Author] or [MeSH Terms], and date filters all work. Results are paginated via offset and limit (up to 100 per request), sortable by relevance or date. Each result object includes pmcid, pmid, doi, title, authors, journal, pub_date, and a direct url. The total field gives the full count of matching records, useful for building pagination UIs.
Full Article Content
get_article takes a pmcid (with or without the PMC prefix) and returns the complete structured article: a sections object mapping section headings (e.g. "Introduction", "Methods", "Results") to their text, the full abstract, an authors array with each author's name and affiliations, and a references array of citation strings. This is the endpoint to use when you need the actual text of a paper, not just its metadata.
Citations and Related Articles
get_article_citations returns up to 50 articles in PMC that cite a given paper, including each citing article's pmcid, title, journal, and pub_date. get_similar_articles uses PubMed's related-article algorithm and filters results to articles available in PMC full text, returning the same summary fields. Both endpoints accept PMC IDs with or without the PMC prefix.
Journal Discovery
list_journals searches the NLM catalog by keyword and returns matching journals with their name, issn, and publisher. Omitting the query parameter returns recently indexed journals. Once you have a journal name, get_journal_articles retrieves its PMC-available articles sorted by publication date, with offset and limit for pagination.
The Nih API is a managed, monitored endpoint for pmc.ncbi.nlm.nih.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when pmc.ncbi.nlm.nih.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official pmc.ncbi.nlm.nih.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a literature review tool that searches PMC by topic and retrieves full article sections via
get_article - Map citation networks by repeatedly calling
get_article_citationsacross a seed set of PMC IDs - Surface related reading recommendations using
get_similar_articlesalongside an article viewer - Index a journal's entire PMC archive using
get_journal_articleswith pagination for downstream search - Extract author affiliation data from
get_articleto analyze institutional research output - Monitor new publications in a specific journal by querying
get_journal_articlessorted by date - Cross-reference DOIs and PMIDs from
search_articlesresults against other bibliographic databases
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does NCBI offer an official developer API for PubMed Central?+
What does `get_article` return beyond the abstract?+
get_article returns a sections object that maps named section headings — such as Introduction, Methods, Results, and Discussion — to their full text content. It also returns an authors array with per-author name and affiliations, and a references array of citation strings. The response covers the complete article structure, not just the abstract.How many citing articles does `get_article_citations` return?+
total integer indicating the full count of citing articles in PMC. If an article has more than 50 citing papers, the total will reflect that, but the current citing_articles array is capped at 50. You can fork this API on Parse and revise the endpoint to add pagination support for larger citation sets.Does the API expose MeSH term data or keyword tags for articles?+
get_article and search_articles responses cover titles, authors, abstracts, full sections, and references but do not return MeSH headings or author-supplied keywords as discrete fields. You can fork the API on Parse and revise it to add an endpoint that surfaces those fields.Does `search_articles` support date-range filtering?+
query parameter accepts full PubMed query syntax, which includes date range filters using field tags such as 2020:2024[pdat]. There is no separate date parameter, but any valid PubMed search string — including date, author, journal, and MeSH filters — can be passed as the query value.