# PubMed

> Search PubMed, the U.S. National Library of Medicine's index of over 40 million biomedical citations, through NCBI's official E-utilities API. Search with PubMed's own query language and date filters, pull full records with abstracts, authors, affiliations, MeSH terms and funding, or short citation summaries. Follow an article's links to similar papers, to the papers citing it, to its own references, to the free full text in PubMed Central, and on into NCBI's gene, protein and structure databases. Also matches an existing bibliography to PMIDs, corrects query spellings, and counts a topic's matches across every NCBI database. No account needed.

App · Research & Academia · 16 actions. Web page: https://docs.lodol.com/docs/integrations/pubmed

## Actions

### Check query spelling

Ask PubMed to correct the spelling of a search term against its own index. Run it before Search articles so a typo in a drug or gene name returns the right papers instead of none.

**Inputs**

- Search query (`query`, text, required): The query to check.

**Outputs**

- `changed` (true/false)
- `corrected_query` (text)
- `query` (text)
- `replacements` (list)

**Example output**

```json
{
  "changed": true,
  "corrected_query": "asthma or allergies",
  "query": "asthmaa OR alergies",
  "replacements": [
    "asthma",
    "allergies"
  ]
}
```

### Count matches across NCBI

Count how many records match one query in every NCBI database at once: PubMed, PubMed Central, the gene, protein and structure databases, and the rest. Use it to see where a topic lives before deciding which database to search.

**Inputs**

- Search query (`query`, text, required): The query to count.

**Outputs**

- `databases` (list)
- `pubmed_count` (number)
- `query` (text)
- `total_count` (number)

**Example output**

```json
{
  "databases": [
    {
      "count": 244761,
      "database": "pubmed",
      "menu_name": "PubMed",
      "status": "Ok"
    },
    {
      "count": 475198,
      "database": "pmc",
      "menu_name": "PubMed Central",
      "status": "Ok"
    }
  ],
  "pubmed_count": 244761,
  "query": "asthma",
  "total_count": 719959
}
```

### Find similar articles

List the articles PubMed considers most similar to the ones you give it (the same set behind the 'Similar articles' panel on a PubMed page). Results carry PubMed's own relatedness score, highest first, so this is the way to grow a reading list from one good paper.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.
- Group results by article (`per_article`, true/false): Off (the default) pools the results for every ID into one ranked list. On keeps them separate, so you can tell which input article each result came from.
- Number of results (`max_results`, number): How many similar articles to return (1–10000). Defaults to 50. From 1 to 10000.

**Outputs**

- `by_article` (list)
- `database` (text)
- `link_name` (text)
- `result_count` (number)
- `results` (list)
- `source_pmids` (list)

**Example output**

```json
{
  "by_article": [
    {
      "links": [
        {
          "database": "pubmed",
          "link_name": "pubmed_pubmed",
          "records": [
            {
              "id": "25728500",
              "pmid": "25728500",
              "score": 50349498
            }
          ]
        }
      ],
      "source_pmids": [
        "25315507"
      ]
    }
  ],
  "database": "pubmed",
  "link_name": "pubmed_pubmed",
  "result_count": 2,
  "results": [
    {
      "id": "25728500",
      "pmid": "25728500",
      "score": 50349498
    },
    {
      "id": "24651067",
      "pmid": "24651067",
      "score": 45116026
    }
  ],
  "source_pmids": [
    "25315507"
  ]
}
```

### Get article references

List the works in an article's own reference list that are themselves in PubMed (the other direction from Get citing articles). Use it to walk backwards from a review to the papers it was built on.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.
- Group results by article (`per_article`, true/false): Off (the default) pools the results for every ID into one ranked list. On keeps them separate, so you can tell which input article each result came from.
- Number of results (`max_results`, number): How many references to return (1–10000). Defaults to 50. From 1 to 10000.

**Outputs**

- `by_article` (list)
- `database` (text)
- `link_name` (text)
- `result_count` (number)
- `results` (list)
- `source_pmids` (list)

**Example output**

```json
{
  "by_article": [
    {
      "links": [
        {
          "database": "pubmed",
          "link_name": "pubmed_pubmed_refs",
          "records": [
            {
              "id": "33077678",
              "pmid": "33077678",
              "score": null
            }
          ]
        }
      ],
      "source_pmids": [
        "33301246"
      ]
    }
  ],
  "database": "pubmed",
  "link_name": "pubmed_pubmed_refs",
  "result_count": 2,
  "results": [
    {
      "id": "33077678",
      "pmid": "33077678",
      "score": null
    },
    {
      "id": "33053279",
      "pmid": "33053279",
      "score": null
    }
  ],
  "source_pmids": [
    "33301246"
  ]
}
```

### Get article summaries

Fetch short citation summaries (title, authors, journal, dates, DOI and PMC ID) for one or more articles. Smaller and faster than Get articles when you only need to list or cite the results rather than read them.

**Inputs**

- PubMed IDs (`pmids`, list): The articles to summarise, by PMID. Leave empty if you are reading a saved set instead. Up to 200 per step.
- Saved set: web environment (`web_env`, text): Read a set saved by Save articles for later (or by a search with 'Save results for later' switched on) instead of listing IDs here. Paste the web environment it returned.
- Saved set: query key (`query_key`, text): The query key returned alongside the web environment.
- Number of results (`max_results`, number): How many summaries from a saved set to return (1–10000). Defaults to 20. From 1 to 10000.
- Skip the first (`start`, number): How many results to skip before returning any, for paging through a large set. Defaults to 0. At least 0.

**Outputs**

- `not_found` (list)
- `requested_pmids` (list)
- `result_count` (number)
- `summaries` (list)

**Example output**

```json
{
  "not_found": [],
  "requested_pmids": [
    "25315507"
  ],
  "result_count": 1,
  "summaries": [
    {
      "article_ids": {
        "doi": "10.1111/febs.13110",
        "pubmed": "25315507"
      },
      "authors": [
        "Ma Y",
        "Zhang L",
        "Huang X"
      ],
      "doi": "10.1111/febs.13110",
      "epub_date": "2014 Nov 7",
      "has_abstract": true,
      "issn": "1742-464X",
      "issue": "23",
      "journal": "The FEBS journal",
      "journal_abbreviation": "FEBS J",
      "languages": [
        "eng"
      ],
      "last_author": "Huang X",
      "pages": "5186-93",
      "pmc_id": null,
      "pmid": "25315507",
      "pub_date": "2014 Dec",
      "publication_types": [
        "Journal Article",
        "Review"
      ],
      "record_status": "PubMed - indexed for MEDLINE",
      "sort_pub_date": "2014/12/01 00:00",
      "title": "Genome modification by CRISPR/Cas9.",
      "url": "https://pubmed.ncbi.nlm.nih.gov/25315507/",
      "volume": "281"
    }
  ]
}
```

### Get article text

Fetch PubMed records as plain text in one of NCBI's citation formats: the readable citation-and-abstract view, the tagged MEDLINE format reference managers import, or a bare list of PMIDs. Use it to hand a citation straight to a document, an email or a reference manager.

**Inputs**

- PubMed IDs (`pmids`, list): The articles to render, by PMID. Leave empty if you are reading a saved set instead. Up to 200 per step.
- Format (`text_format`, text): Which text view to return. Defaults to the readable abstract. One of: `abstract` (Abstract (readable citation and abstract)), `medline` (MEDLINE (tagged format for reference managers)), `uilist` (PMID list (just the ID numbers)).
- Saved set: web environment (`web_env`, text): Read a set saved by Save articles for later (or by a search with 'Save results for later' switched on) instead of listing IDs here. Paste the web environment it returned.
- Saved set: query key (`query_key`, text): The query key returned alongside the web environment.
- Number of results (`max_results`, number): How many records from a saved set to return (1–10000). Defaults to 20. From 1 to 10000.
- Skip the first (`start`, number): How many results to skip before returning any, for paging through a large set. Defaults to 0. At least 0.

**Outputs**

- `format` (text)
- `requested_count` (number)
- `requested_pmids` (list)
- `text` (text)

**Example output**

```json
{
  "format": "abstract",
  "requested_count": 1,
  "requested_pmids": [
    "25315507"
  ],
  "text": "1. FEBS J. 2014 Dec;281(23):5186-93. doi: 10.1111/febs.13110.\n\nGenome modification by CRISPR/Cas9.\n\nMa Y, Zhang L, Huang X."
}
```

### Get articles

Fetch the full PubMed record for one or more articles: title, abstract (with its labelled sections kept separate), every author and their affiliations, journal, volume, pages and dates, MeSH terms, keywords, funding, and the DOI and PMC ID. Give PMIDs, or the handle from a saved set.

**Inputs**

- PubMed IDs (`pmids`, list): The articles to fetch, by PMID. Leave empty if you are reading a saved set instead. Up to 200 per step.
- Saved set: web environment (`web_env`, text): Read a set saved by Save articles for later (or by a search with 'Save results for later' switched on) instead of listing IDs here. Paste the web environment it returned.
- Saved set: query key (`query_key`, text): The query key returned alongside the web environment.
- Number of results (`max_results`, number): How many records from a saved set to return (1–10000). Defaults to 20. From 1 to 10000.
- Skip the first (`start`, number): How many results to skip before returning any, for paging through a large set. Defaults to 0. At least 0.

**Outputs**

- `articles` (list)
- `not_found` (list)
- `requested_pmids` (list)
- `result_count` (number)

**Example output**

```json
{
  "articles": [
    {
      "abstract": "Clustered regularly interspaced short palindromic repeats (CRISPR)-CRISPR-associated protein (Cas)9-mediated genome modification enables us to edit the genomes of a variety of organisms rapidly and efficiently.",
      "abstract_sections": [
        {
          "label": "",
          "text": "Clustered regularly interspaced short palindromic repeats (CRISPR)-CRISPR-associated protein (Cas)9-mediated genome modification enables us to edit the genomes of a variety of organisms rapidly and efficiently."
        }
      ],
      "article_ids": {
        "doi": "10.1111/febs.13110",
        "pubmed": "25315507"
      },
      "authors": [
        {
          "affiliations": [
            "Institute of Laboratory Animal Science, Chinese Academy of Medical Sciences, Beijing, China."
          ],
          "collective_name": null,
          "fore_name": "Yuanwu",
          "initials": "Y",
          "last_name": "Ma",
          "name": "Yuanwu Ma",
          "orcid": null
        },
        {
          "affiliations": [],
          "collective_name": null,
          "fore_name": "Lianfeng",
          "initials": "L",
          "last_name": "Zhang",
          "name": "Lianfeng Zhang",
          "orcid": null
        }
      ],
      "chemicals": [
        "CRISPR-Associated Proteins"
      ],
      "doi": "10.1111/febs.13110",
      "grants": [],
      "history": {
        "medline": "2015-01-27",
        "pubmed": "2014-10-16"
      },
      "journal": {
        "iso_abbreviation": "FEBS J",
        "issn": "1742-4658",
        "issue": "23",
        "published": {
          "day": null,
          "month": "Dec",
          "text": "2014 Dec",
          "year": "2014"
        },
        "title": "The FEBS journal",
        "volume": "281"
      },
      "keywords": [
        "CRISPR",
        "Cas9",
        "genome editing"
      ],
      "languages": [
        "eng"
      ],
      "mesh_terms": [
        {
          "major_topic": false,
          "qualifiers": [
            {
              "major_topic": true,
              "term": "physiology",
              "ui": "Q000502"
            }
          ],
          "term": "CRISPR-Associated Proteins",
          "ui": "D064130"
        }
      ],
      "pages": "5186-93",
      "pmc_id": null,
      "pmid": "25315507",
      "publication_status": "ppublish",
      "publication_types": [
        "Journal Article",
        "Review"
      ],
      "record_type": "article",
      "title": "Genome modification by CRISPR/Cas9.",
      "url": "https://pubmed.ncbi.nlm.nih.gov/25315507/"
    }
  ],
  "not_found": [],
  "requested_pmids": [
    "25315507"
  ],
  "result_count": 1
}
```

### Get available links

List which kinds of link each article actually has, before following one. Answers 'is there a free full text, is this cited anywhere, is there a gene record' in a single call, so a workflow can branch instead of guessing.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.

**Outputs**

- `articles` (list)
- `requested_pmids` (list)

**Example output**

```json
{
  "articles": [
    {
      "links": [
        {
          "database": "pubmed",
          "label": "Similar articles",
          "link_name": "pubmed_pubmed"
        },
        {
          "database": "pmc",
          "label": "Cited in PMC",
          "link_name": "pubmed_pmc_refs"
        }
      ],
      "pmid": "25315507"
    }
  ],
  "requested_pmids": [
    "25315507"
  ]
}
```

### Get citing articles

List the later articles that cite the ones you give it (PubMed's 'Cited by' set). Coverage comes from PubMed Central's reference data, so it counts citing articles that are in PMC rather than every citation in existence.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.
- Group results by article (`per_article`, true/false): Off (the default) pools the results for every ID into one ranked list. On keeps them separate, so you can tell which input article each result came from.
- Number of results (`max_results`, number): How many citing articles to return (1–10000). Defaults to 50. From 1 to 10000.

**Outputs**

- `by_article` (list)
- `database` (text)
- `link_name` (text)
- `result_count` (number)
- `results` (list)
- `source_pmids` (list)

**Example output**

```json
{
  "by_article": [
    {
      "links": [
        {
          "database": "pubmed",
          "link_name": "pubmed_pubmed_citedin",
          "records": [
            {
              "id": "42098563",
              "pmid": "42098563",
              "score": null
            }
          ]
        }
      ],
      "source_pmids": [
        "25315507"
      ]
    }
  ],
  "database": "pubmed",
  "link_name": "pubmed_pubmed_citedin",
  "result_count": 2,
  "results": [
    {
      "id": "42098563",
      "pmid": "42098563",
      "score": null
    },
    {
      "id": "42053836",
      "pmid": "42053836",
      "score": null
    }
  ],
  "source_pmids": [
    "25315507"
  ]
}
```

### Get database details

Describe one NCBI database: how many records it holds, when it was last updated, every field a search can be restricted to, and every link type that leads out of it. Run it on pubmed to see what each field tag ([TIAB], [MH], [DP] …) actually indexes.

**Inputs**

- Database (`database`, text, required): Which NCBI database to describe.

**Outputs**

- `database` (object)

**Example output**

```json
{
  "database": {
    "build": "Build260819-0500m.1",
    "description": "PubMed bibliographic record",
    "last_update": "2026/08/19 06:11",
    "links": [
      {
        "description": "Free full-text articles in PMC",
        "menu": "PMC Links",
        "name": "pubmed_pmc",
        "target_database": "pmc"
      }
    ],
    "menu_name": "PubMed",
    "name": "pubmed",
    "record_count": 41032540,
    "search_fields": [
      {
        "description": "Free text associated with Abstract/Title",
        "full_name": "Title/Abstract",
        "hidden": false,
        "is_date": false,
        "is_numerical": false,
        "name": "TIAB"
      }
    ]
  }
}
```

### Get full-text links

Get the outside URLs where each article can actually be read: the publisher's page, and optionally every other resource NCBI knows about. Each link says who provides it and whether it is free, so a workflow can send readers straight to an open-access copy.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.
- Which links (`scope`, text): How wide to cast. Defaults to the publisher's full-text link only. One of: `prlinks` (Publisher's full text only), `llinks` (All outside resources), `llinkslib` (All outside resources, including libraries).

**Outputs**

- `articles` (list)
- `requested_pmids` (list)
- `scope` (text)

**Example output**

```json
{
  "articles": [
    {
      "links": [
        {
          "attributes": [
            "free resource"
          ],
          "categories": [
            "Full Text Sources"
          ],
          "free": true,
          "provider": "Wiley",
          "subject_types": [],
          "url": "https://onlinelibrary.wiley.com/doi/10.1111/febs.13110"
        }
      ],
      "pmid": "25315507"
    }
  ],
  "requested_pmids": [
    "25315507"
  ],
  "scope": "prlinks"
}
```

### Get linked records

Follow an article's links out of PubMed into any other NCBI database: the PubMed Central full text, the genes and proteins it studies, the structures, the clinical-trial and MeSH records. Pick the target database, and optionally the exact link type from Get available links.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.
- Target database (`database`, text, required): Which NCBI database to follow the links into: for example pmc for the free full text, or gene.
- Link type (`link_name`, text): Pick one exact link instead of every link into the target database. Leave empty for all of them.
- Group results by article (`per_article`, true/false): Off (the default) pools the results for every ID into one ranked list. On keeps them separate, so you can tell which input article each result came from.
- Number of results (`max_results`, number): How many linked records to return (1–10000). Defaults to 50. From 1 to 10000.
- Filter the linked records (`term`, text): An Entrez query applied to the linked records after the links are followed. Only works when the target database is PubMed.
- Which date to filter on (`date_type`, text): Which date the filters below apply to. Only works when the target database is PubMed. One of: `pdat` (Publication date), `edat` (Date added to PubMed), `mdat` (Date the record was last modified).
- Published from (`published_from`, date): Only include linked records from this date onwards.
- Published to (`published_to`, date): Only include linked records up to this date.
- Published in the last (days) (`within_last_days`, number): A rolling window instead of fixed dates. Use this or the from/to dates, not both. From 1 to 36500.

**Outputs**

- `by_article` (list)
- `database` (text)
- `link_name` (text)
- `result_count` (number)
- `results` (list)
- `source_pmids` (list)

**Example output**

```json
{
  "by_article": [
    {
      "links": [
        {
          "database": "pmc",
          "link_name": "pubmed_pmc",
          "records": [
            {
              "id": "7745181",
              "score": null
            }
          ]
        }
      ],
      "source_pmids": [
        "33301246"
      ]
    }
  ],
  "database": "pmc",
  "link_name": "pubmed_pmc",
  "result_count": 1,
  "results": [
    {
      "id": "7745181",
      "score": null
    }
  ],
  "source_pmids": [
    "33301246"
  ]
}
```

### List NCBI databases

List every NCBI database reachable through this integration. These are the names Get linked records and Get database details take.

**Inputs**: None.

**Outputs**

- `databases` (list)
- `result_count` (number)

**Example output**

```json
{
  "databases": [
    "pubmed",
    "pmc",
    "gene",
    "protein",
    "mesh"
  ],
  "result_count": 5
}
```

### Match citations to PMIDs

Look up the PMID for citations you already have. Give the journal, year, volume, first page and first author for each reference and PubMed returns the article it matches (the way to turn a bibliography or a reference list into PubMed records in one call).

**Inputs**

- Citations (`citations`, list, required): One entry per reference. The journal title is required; year, volume, first page and author narrow the match. 'key' is your own label, echoed back on the result so you can line answers up with inputs.

**Outputs**

- `citations` (list)
- `matched_count` (number)
- `unmatched_count` (number)

**Example output**

```json
{
  "citations": [
    {
      "author": "palmenberg ac",
      "first_page": "182",
      "journal": "science",
      "key": "ref1",
      "pmid": "3026048",
      "status": "found",
      "url": "https://pubmed.ncbi.nlm.nih.gov/3026048/",
      "volume": "235",
      "year": "1987"
    }
  ],
  "matched_count": 1,
  "unmatched_count": 0
}
```

### Save articles for later

Park a list of PMIDs on NCBI's own servers and get a handle back. Hand that handle to Get articles, Get article summaries or Get article text instead of passing the IDs again, and pass it back in here to add more IDs to the same set. Handles expire after about eight hours of no use.

**Inputs**

- PubMed IDs (`pmids`, list, required): The articles to act on, by PMID. A pubmed.ncbi.nlm.nih.gov link or a 'PMID:' prefix works too. Up to 200 per step.
- Add to an existing set (`web_env`, text): The web environment from an earlier save, to add these IDs to that set as a new query key. Leave empty to start a new set.

**Outputs**

- `query_key` (text)
- `saved_count` (number)
- `saved_pmids` (list)
- `web_env` (text)

**Example output**

```json
{
  "query_key": "1",
  "saved_count": 2,
  "saved_pmids": [
    "25315507",
    "33301246"
  ],
  "web_env": "MCID_6a866a20139ff8b1c50a4459"
}
```

### Search articles

Search PubMed's 40 million citations and return the matching PMIDs, newest or most relevant first. The query is PubMed's own search language, so field tags like [Title/Abstract] and the AND, OR and NOT operators work exactly as they do on pubmed.ncbi.nlm.nih.gov. Feed the PMIDs into Get articles or Get article summaries to read the records.

**Inputs**

- Search query (`query`, text, required): What to search for. Plain words search everywhere; add field tags to narrow it.
- Search only in (`search_field`, text): Restrict the whole query to one PubMed field. Leave empty to search everything, or use field tags inside the query for finer control.
- Sort by (`sort_by`, text): How to order the results. Defaults to best match. One of: `relevance` (Best match (relevance)), `pub_date` (Publication date (newest first)), `Author` (First author), `JournalName` (Journal name).
- Which date to filter on (`date_type`, text): Which of PubMed's dates the date filters below apply to. Defaults to the publication date. One of: `pdat` (Publication date), `edat` (Date added to PubMed), `mdat` (Date the record was last modified).
- Published from (`published_from`, date): Only include articles from this date onwards. Use with 'Published to'.
- Published to (`published_to`, date): Only include articles up to this date. Use with 'Published from'.
- Published in the last (days) (`within_last_days`, number): A rolling window instead of fixed dates: 7 for the past week, 30 for the past month. Use this or the from/to dates, not both. From 1 to 36500.
- Number of results (`max_results`, number): How many PMIDs to return (1–10000). Defaults to 20. From 1 to 10000.
- Skip the first (`start`, number): How many results to skip before returning any, for paging through a large set. Defaults to 0. At least 0.
- Save results for later (`save_to_history`, true/false): Keep the whole result set on NCBI's servers and return a handle to it, so a later step can read it without passing thousands of IDs around.

**Outputs**

- `pmids` (list)
- `query_key` (text)
- `query_translation` (text)
- `result_count` (number)
- `start_index` (number)
- `total_count` (number)
- `warnings` (object)
- `web_env` (text)

**Example output**

```json
{
  "pmids": [
    "25315507",
    "31295471",
    "33301246"
  ],
  "query_key": null,
  "query_translation": "\"clustered regularly interspaced short palindromic repeats\"[MeSH Terms] OR \"crispr\"[All Fields]",
  "result_count": 3,
  "start_index": 0,
  "total_count": 25146,
  "warnings": {},
  "web_env": null
}
```
