DEV Community

Alex Spinov
Alex Spinov

Posted on

Crossref Has a Free API — Look Up Any DOI and Get Full Metadata (No Key)

Every research paper has a DOI. But did you know you can resolve ANY DOI to get full metadata through a free API?

Crossref manages 150M+ DOIs and provides a completely free, no-key API to query them all.

What Is Crossref?

Crossref is the DOI registration agency for scholarly content. Their API lets you:

  • Resolve any DOI to full metadata
  • Search across 150M+ works
  • Get citation counts and funding info
  • No API key needed

Quick Start

import requests

doi = "10.1038/s41586-021-03819-2"
response = requests.get(f"https://api.crossref.org/works/{doi}")
work = response.json()["message"]

print(f"Title: {work['title'][0]}")
print(f"Journal: {work['container-title'][0]}")
print(f"Citations: {work['is-referenced-by-count']}")
print(f"Authors: {len(work['author'])} authors")
Enter fullscreen mode Exit fullscreen mode

Search Papers by Topic

response = requests.get("https://api.crossref.org/works", params={
    "query": "CRISPR gene editing",
    "rows": 5,
    "sort": "is-referenced-by-count",
    "order": "desc",
    "mailto": "your@email.com"
})

for work in response.json()["message"]["items"]:
    title = work["title"][0] if work.get("title") else "No title"
    cites = work.get("is-referenced-by-count", 0)
    print(f"{title} ({cites:,} citations)")
Enter fullscreen mode Exit fullscreen mode

Find Funding Information

doi = "10.1038/s41586-021-03819-2"
response = requests.get(f"https://api.crossref.org/works/{doi}")
work = response.json()["message"]

for funder in work.get("funder", []):
    print(f"Funder: {funder.get('name', 'Unknown')}")
    print(f"  Awards: {', '.join(funder.get('award', ['N/A']))}")
Enter fullscreen mode Exit fullscreen mode

Crossref vs Other APIs

Feature Crossref OpenAlex Semantic Scholar CORE
Focus DOI metadata Academic works CS papers Full text
Records 150M+ 250M+ 200M+ 260M+
Key needed No No Yes (free) Yes (free)
Funding data Yes Partial No No

Pro Tips

  1. Add mailto=your@email.com for faster responses (polite pool)
  2. Rate limit: 50 req/sec with mailto
  3. Use filter for precise queries by ISSN, funder, date
  4. Combine with OpenAlex for author disambiguation

See also: OpenAlex | CORE | Semantic Scholar | PubMed

More API tools on GitHub.\n\n---\n\n## More Free Research APIs\n\nThis is part of my series on free APIs for researchers and data scientists:\n\n- OpenAlex API — 250M+ Academic Works\n- CORE API — 260M+ Scientific Papers\n- Crossref API — DOI Metadata for 150M+ Papers\n- Unpaywall API — Find Free Paper Versions\n- Europe PMC — 40M+ Biomedical Papers\n- World Bank API — GDP & Economic Data\n- ORCID API — 18M+ Researcher Profiles\n- DBLP API — 6M+ CS Publications\n- NASA APIs — 20+ Free Space Data APIs\n- FRED API — 800K+ US Economic Time Series\n- All 30+ Research APIs Mapped\n\n*Tools: Academic Research Toolkit on GitHub*

Top comments (0)