Skill Tracer
Skills › Scientific Agent Skills › paper-lookup › crossref.md

crossref.md

188 lines · skills/paper-lookup/references/crossref.md at 5f2bc03

Open on GitHub
1# Crossref API
2
3Crossref is the DOI registration agency for scholarly content. It provides metadata for 150M+ works including journal articles, books, conference papers, datasets, and preprints.
4

Crossref API

Crossref is the DOI registration agency for scholarly content. It provides metadata for 150M+ works including journal articles, books, conference papers, datasets, and preprints.

Raw lines 1 to 4
5## Base URL
6
7```
8https://api.crossref.org
9```

Base URL

https://api.crossref.org
Raw lines 5 to 10
11## Authentication
13None required. Add `mailto=you@example.com` to get into the **polite pool** (higher list and single-record limits).

Authentication

None required. Add mailto=you@example.com to get into the polite pool (higher list and single-record limits).

Raw lines 11 to 14
15## Rate Limits
17| Pool | Single record | List/search | Concurrency |
18|------|---------------|-------------|-------------|
19| Public (no mailto) | 5 req/sec | 1 req/sec | 1 |
20| Polite (with mailto) | 10 req/sec | 3 req/sec | 3 |
22These limits took effect 2025-12-01. Inspect rate-limit headers and honor `Retry-After`; HTTP 429 is a throttle, not an empty search.

Rate Limits

PoolSingle recordList/searchConcurrency
Public (no mailto)5 req/sec1 req/sec1
Polite (with mailto)10 req/sec3 req/sec3

These limits took effect 2025-12-01. Inspect rate-limit headers and honor Retry-After; HTTP 429 is a throttle, not an empty search.

Raw lines 15 to 23
24## Key Endpoints

Key Endpoints

Raw lines 24 to 25
26### 1. Search works
28```
29GET /works?query={text}&rows={n}&mailto=you@example.com
30```
32| Parameter | Default | Description |
33|-----------|---------|-------------|
34| `query` | -- | Free-text search across all fields |
35| `query.author` | -- | Search author names |
36| `query.bibliographic` | -- | Search titles, authors, ISSNs, years |
37| `query.affiliation` | -- | Search affiliations |
38| `query.container-title` | -- | Search journal names |
39| `filter` | -- | Comma-separated `name:value` pairs |
40| `sort` | `score` | `score`, `published`, `issued`, `deposited`, `updated`, `is-referenced-by-count`, `references-count` |
41| `order` | `desc` | `asc` or `desc` |
42| `rows` | 20 | Results per page (max 1000) |
43| `offset` | 0 | Skip N results (max 10,000) |
44| `cursor` | -- | Use `*` for cursor-based deep pagination |
45| `select` | -- | Comma-separated field names to return |
46| `facet` | -- | Facet counts, e.g. `type-name:10` |
47| `sample` | -- | Return N random items (max 100) |
49**Example:**
50```
51https://api.crossref.org/works?query=CRISPR+gene+therapy&filter=from-pub-date:2024-01-01,type:journal-article,has-abstract:true&rows=5&sort=published&order=desc&mailto=you@example.com
52```

1. Search works

GET /works?query={text}&rows={n}&mailto=you@example.com
ParameterDefaultDescription
query--Free-text search across all fields
query.author--Search author names
query.bibliographic--Search titles, authors, ISSNs, years
query.affiliation--Search affiliations
query.container-title--Search journal names
filter--Comma-separated name:value pairs
sortscorescore, published, issued, deposited, updated, is-referenced-by-count, references-count
orderdescasc or desc
rows20Results per page (max 1000)
offset0Skip N results (max 10,000)
cursor--Use * for cursor-based deep pagination
select--Comma-separated field names to return
facet--Facet counts, e.g. type-name:10
sample--Return N random items (max 100)

Example:

https://api.crossref.org/works?query=CRISPR+gene+therapy&filter=from-pub-date:2024-01-01,type:journal-article,has-abstract:true&rows=5&sort=published&order=desc&mailto=you@example.com
Raw lines 26 to 53
54### 2. Get work by DOI
56```
57GET /works/{doi}?mailto=you@example.com
58```
60URL-encode the DOI: `10.1038/nature12373` becomes `10.1038%2Fnature12373`
62**Example:**
63```
64https://api.crossref.org/works/10.1038%2Fnature12373?mailto=you@example.com
65```

2. Get work by DOI

GET /works/{doi}?mailto=you@example.com

URL-encode the DOI: 10.1038/nature12373 becomes 10.1038%2Fnature12373

Example:

https://api.crossref.org/works/10.1038%2Fnature12373?mailto=you@example.com
Raw lines 54 to 66
67### 3. Journals
69```
70GET /journals?query={name}&rows={n}
71GET /journals/{issn}
72GET /journals/{issn}/works?query={text}&rows={n}
73```

3. Journals

GET /journals?query={name}&rows={n}
GET /journals/{issn}
GET /journals/{issn}/works?query={text}&rows={n}
Raw lines 67 to 74
75### 4. Funders
77```
78GET /funders?query={name}
79GET /funders/{id}
80GET /funders/{id}/works?rows={n}
81```
83Funder IDs are from the Funder Registry (e.g., `100000001` for NSF).

4. Funders

GET /funders?query={name}
GET /funders/{id}
GET /funders/{id}/works?rows={n}

Funder IDs are from the Funder Registry (e.g., 100000001 for NSF).

Raw lines 75 to 84
85### 5. Members (publishers)
87```
88GET /members?query={name}
89GET /members/{id}/works?rows={n}
90```

5. Members (publishers)

GET /members?query={name}
GET /members/{id}/works?rows={n}
Raw lines 85 to 91
92## Key Filters
94### Date filters (accept `YYYY`, `YYYY-MM`, `YYYY-MM-DD`)
95| Filter | Description |
96|--------|-------------|
97| `from-pub-date` / `until-pub-date` | Publication date |
98| `from-print-pub-date` / `until-print-pub-date` | Print publication date |
99| `from-online-pub-date` / `until-online-pub-date` | Online publication date |
100| `from-posted-date` / `until-posted-date` | Posted date (preprints) |

Date filters (accept YYYY, YYYY-MM, YYYY-MM-DD)

FilterDescription
from-pub-date / until-pub-datePublication date
from-print-pub-date / until-print-pub-datePrint publication date
from-online-pub-date / until-online-pub-dateOnline publication date
from-posted-date / until-posted-datePosted date (preprints)
Raw lines 94 to 101
102### Boolean filters
103| Filter | Description |
104|--------|-------------|
105| `has-abstract` | Has an abstract |
106| `has-orcid` | Has ORCID IDs |
107| `has-funder` | Has funder info |
108| `has-full-text` | Has full-text links |
109| `has-references` | Has reference list |
110| `has-license` | Has license info |

Boolean filters

FilterDescription
has-abstractHas an abstract
has-orcidHas ORCID IDs
has-funderHas funder info
has-full-textHas full-text links
has-referencesHas reference list
has-licenseHas license info
Raw lines 102 to 111
112### Value filters
113| Filter | Description |
114|--------|-------------|
115| `type` | `journal-article`, `posted-content`, `book-chapter`, `proceedings-article`, etc. |
116| `issn` | Journal ISSN |
117| `doi` | Specific DOI |
118| `orcid` | Contributor ORCID |
119| `funder` | Funder Registry ID |
120| `member` | Crossref member ID |
121| `prefix` | DOI prefix |
122| `license.url` | License URL |
123| `update-type` | `correction`, `retraction` |
125**Syntax:** `filter=name1:value1,name2:value2`

Value filters

FilterDescription
typejournal-article, posted-content, book-chapter, proceedings-article, etc.
issnJournal ISSN
doiSpecific DOI
orcidContributor ORCID
funderFunder Registry ID
memberCrossref member ID
prefixDOI prefix
license.urlLicense URL
update-typecorrection, retraction

Syntax: filter=name1:value1,name2:value2

Raw lines 112 to 126
127## Pagination
129### Offset-based (max 10,000)
130```
131/works?query=cancer&rows=100&offset=200
132```

Offset-based (max 10,000)

/works?query=cancer&rows=100&offset=200
Raw lines 129 to 133
134### Cursor-based (unlimited)
1351. First request: `?cursor=*&rows=100`
1362. Response includes `next-cursor`
1373. Next request: `?cursor={next-cursor-value}&rows=100`
1384. Stop when `message.items` is shorter than requested `rows` (or empty). A cursor can remain present on the last page; its presence alone does not mean more records.
1395. Cursors expire after 5 minutes

Cursor-based (unlimited)

  1. First request: ?cursor=*&rows=100
  2. Response includes next-cursor
  3. Next request: ?cursor={next-cursor-value}&rows=100
  4. Stop when message.items is shorter than requested rows (or empty). A cursor can remain present on the last page; its presence alone does not mean more records.
  5. Cursors expire after 5 minutes
Raw lines 134 to 140
141## Response Format

Response Format

Raw lines 141 to 142
143### List response
144```json
146 "status": "ok",
147 "message-type": "work-list",
148 "message": {
149 "total-results": 2779116,
150 "items-per-page": 20,
151 "next-cursor": "...",
152 "items": [...]
153 }
155```

List response

{
  "status": "ok",
  "message-type": "work-list",
  "message": {
    "total-results": 2779116,
    "items-per-page": 20,
    "next-cursor": "...",
    "items": [...]
  }
}
Raw lines 143 to 156
157### Work object (key fields)
158```json
160 "DOI": "10.1038/nature12373",
161 "title": ["Nanometre-scale thermometry in a living cell"],
162 "author": [{"given": "G.", "family": "Kucsko", "sequence": "first"}],
163 "publisher": "Springer Science and Business Media LLC",
164 "type": "journal-article",
165 "published": {"date-parts": [[2013, 7, 31]]},
166 "container-title": ["Nature"],
167 "ISSN": ["0028-0836", "1476-4687"],
168 "volume": "500",
169 "issue": "7460",
170 "page": "54-58",
171 "is-referenced-by-count": 1745,
172 "references-count": 30,
173 "abstract": "<p>Abstract text with HTML tags...</p>",
174 "license": [{"URL": "...", "content-version": "vor"}],
175 "link": [{"URL": "...", "content-type": "application/pdf"}],
176 "reference": [{"key": "...", "doi-asserted-by": "crossref", "DOI": "..."}],
177 "subject": ["Multidisciplinary"],
178 "language": "en"
180```
182Note: `title` and `container-title` are arrays. `published.date-parts` is `[[year, month, day]]`. Abstract may contain HTML tags.

Work object (key fields)

{
  "DOI": "10.1038/nature12373",
  "title": ["Nanometre-scale thermometry in a living cell"],
  "author": [{"given": "G.", "family": "Kucsko", "sequence": "first"}],
  "publisher": "Springer Science and Business Media LLC",
  "type": "journal-article",
  "published": {"date-parts": [[2013, 7, 31]]},
  "container-title": ["Nature"],
  "ISSN": ["0028-0836", "1476-4687"],
  "volume": "500",
  "issue": "7460",
  "page": "54-58",
  "is-referenced-by-count": 1745,
  "references-count": 30,
  "abstract": "<p>Abstract text with HTML tags...</p>",
  "license": [{"URL": "...", "content-version": "vor"}],
  "link": [{"URL": "...", "content-type": "application/pdf"}],
  "reference": [{"key": "...", "doi-asserted-by": "crossref", "DOI": "..."}],
  "subject": ["Multidisciplinary"],
  "language": "en"
}

Note: title and container-title are arrays. published.date-parts is [[year, month, day]]. Abstract may contain HTML tags.

Raw lines 157 to 183
184## Official sources reviewed 2026-09-30
186- https://www.crossref.org/documentation/retrieve-metadata/rest-api/
187- https://github.com/CrossRef/rest-api-doc
188- https://www.crossref.org/blog/announcing-changes-to-rest-api-rate-limits/

Official sources reviewed 2026-09-30

  • https://www.crossref.org/documentation/retrieve-metadata/rest-api/
  • https://github.com/CrossRef/rest-api-doc
  • https://www.crossref.org/blog/announcing-changes-to-rest-api-rate-limits/
Raw lines 184 to 188