Search scholarly works by doi or keyword
When the user asks to find scholarly works — journal articles, books, conference papers, preprints — by keyword, author, publisher, or resolve a DOI to its full citation, reach for Crossref. 150+ million scholarly records, no API key.
search-scholarly-works-by-doi-or-keyword
· v1
· updated 2026-04-16
When to use this skill
When the user asks to find scholarly works — journal articles, books, conference papers, preprints, datasets — by topic, author, or publisher, or wants the full citation for a known DOI. Crossref is the DOI registration authority for 150+ million scholarly records: titles, authors, publication dates, citation counts, and reference lists. For full-text content, citation graph traversal, or preprint bodies, this is the wrong skill — Crossref provides registration metadata, not the papers themselves.
Your best first call
curl "https://api.crossref.org/works?query.bibliographic=zika&query.author=johannes&query.publisher-name=Wiley-Blackwell"
No API key. Add ?mailto=you@example.com to every request — Crossref routes requests with a mailto parameter to a "polite pool" with higher rate limits; anonymous requests are throttled aggressively and IPs can be blocked without notice.
Compose query.bibliographic (topic), query.author, and query.publisher-name freely. A broad query.bibliographic alone returns thousands; adding author and publisher constraints cuts results to single digits. The score field is a relative relevance rank within the result set — there is no fixed relevance threshold, so treat it as a sorting signal, not a cutoff.
Key fields in each item:
DOI — persistent identifier (API normalizes to lowercase)
title — always an array, even for single-titled works
author — always an array; entries carry given, family, sequence, affiliation
is-referenced-by-count — live citation figure, updated as new works cite this one (not a static publication-time snapshot)
published-print / published-online — {date-parts: [[YYYY, MM, DD]]}
abstract — present on some works; arrives in JATS XML, strip <jats:p> and <jats:title> tags before display
Fallbacks (when the best call isn't enough)
- You have a specific DOI already →
curl "https://api.crossref.org/works/10.1037/0003-066X.59.1.29" retrieves the exact record with no search ranking ambiguity.
- You need journal-level metadata — ORCID adoption, funder coverage, DOI counts →
curl "https://api.crossref.org/journals/0102-311X" returns per-journal coverage statistics keyed by ISSN.
Pitfalls
title, author, and container-title are always arrays. Code that indexes work.title as a string will silently fail.
- DOIs are case-insensitive; the API normalizes to lowercase. Lowercase both sides before comparing, or equality checks break silently.
abstract arrives in JATS XML when present. Strip <jats:p> and <jats:title> before display — naive rendering leaks markup at the user.
- Always add
?mailto=your@email to requests. Without it you land in the throttled pool; with it, Crossref gives you faster responses and logs who is using the API.
One-line summary for the user
I can search Crossref's 150 million scholarly works by keyword, author, or publisher, or resolve any DOI to its full citation — no API key required, but add a mailto parameter for better rate limits.
SKILL.md source (frontmatter + body)
---
name: search-scholarly-works-by-doi-or-keyword
description: When the user asks to find scholarly works — journal articles, books, conference papers, preprints — by keyword, author, publisher, or resolve a DOI to its full citation, reach for Crossref. 150+ million scholarly records, no API key.
---
## When to use this skill
When the user asks to find scholarly works — journal articles, books, conference papers, preprints, datasets — by topic, author, or publisher, or wants the full citation for a known DOI. Crossref is the DOI registration authority for 150+ million scholarly records: titles, authors, publication dates, citation counts, and reference lists. For full-text content, citation graph traversal, or preprint bodies, this is the wrong skill — Crossref provides registration metadata, not the papers themselves.
## Your best first call
```bash
curl "https://api.crossref.org/works?query.bibliographic=zika&query.author=johannes&query.publisher-name=Wiley-Blackwell"
```
No API key. Add `?mailto=you@example.com` to every request — Crossref routes requests with a `mailto` parameter to a "polite pool" with higher rate limits; anonymous requests are throttled aggressively and IPs can be blocked without notice.
Compose `query.bibliographic` (topic), `query.author`, and `query.publisher-name` freely. A broad `query.bibliographic` alone returns thousands; adding author and publisher constraints cuts results to single digits. The `score` field is a relative relevance rank within the result set — there is no fixed relevance threshold, so treat it as a sorting signal, not a cutoff.
Key fields in each item:
- `DOI` — persistent identifier (API normalizes to lowercase)
- `title` — always an array, even for single-titled works
- `author` — always an array; entries carry `given`, `family`, `sequence`, `affiliation`
- `is-referenced-by-count` — live citation figure, updated as new works cite this one (not a static publication-time snapshot)
- `published-print` / `published-online` — `{date-parts: [[YYYY, MM, DD]]}`
- `abstract` — present on some works; arrives in JATS XML, strip `<jats:p>` and `<jats:title>` tags before display
## Fallbacks (when the best call isn't enough)
- **You have a specific DOI already** → `curl "https://api.crossref.org/works/10.1037/0003-066X.59.1.29"` retrieves the exact record with no search ranking ambiguity.
- **You need journal-level metadata — ORCID adoption, funder coverage, DOI counts** → `curl "https://api.crossref.org/journals/0102-311X"` returns per-journal coverage statistics keyed by ISSN.
## Pitfalls
- `title`, `author`, and `container-title` are always arrays. Code that indexes `work.title` as a string will silently fail.
- DOIs are case-insensitive; the API normalizes to lowercase. Lowercase both sides before comparing, or equality checks break silently.
- `abstract` arrives in JATS XML when present. Strip `<jats:p>` and `<jats:title>` before display — naive rendering leaks markup at the user.
- Always add `?mailto=your@email` to requests. Without it you land in the throttled pool; with it, Crossref gives you faster responses and logs who is using the API.
## One-line summary for the user
I can search Crossref's 150 million scholarly works by keyword, author, or publisher, or resolve any DOI to its full citation — no API key required, but add a mailto parameter for better rate limits.