# crossref > Works response: ```json { "status": "ok", "message-type": "work-list", "message": { "total-results": 12345, "items": [ { "DOI": "10.1038/nature12373", "title": ["Paper Title"], "author": [ { "given": "John", "family": "Smith", "ORCID": "https://orcid.org/0000-0001-2345-6789" } ], "container-title": ["Nature"], "published": { "date-parts": [[2024, 3, 15]] }, "type": "journal-article", "is-referenced-by-count": 42, "references-count": 35, "abstract": "Abstract text...", "URL": ... - Author: Stephen Zweibel - Repository: CUNY-AI-Lab/agent-studio - Version: 20260106204321 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/CUNY-AI-Lab/agent-studio - Web: https://mule.run/skillshub/@@CUNY-AI-Lab/agent-studio~crossref:20260106204321 --- --- name: crossref description: DOI registry with 150M+ scholarly works. Get citation counts, reference lists, and publisher metadata. Resolve DOIs to full metadata, find papers citing a specific work. Example queries: 'get metadata for this DOI', 'what papers cite this article', 'find references in this paper'. No auth required. --- # CrossRef API ## Overview The official DOI registry with metadata for 150M+ scholarly works. **No authentication required.** Excellent for: DOI resolution, citation counts, reference lists, publisher metadata. ## Base URL ``` https://api.crossref.org ``` ## Polite Pool (Recommended) Add email to `User-Agent` or `mailto` query param for faster rate limits: ``` ?mailto=your@email.com ``` ## Endpoints ### Search Works ``` GET /works?query={search}&rows={limit} ``` **Parameters:** - `query` - Free text search - `query.title` - Search titles only - `query.author` - Search authors only - `rows` - Results per page (max 1000) - `offset` - Pagination offset - `sort` - Sort field: `relevance`, `published`, `is-referenced-by-count` - `order` - `asc` or `desc` ### Filter Syntax ``` ?filter=from-pub-date:2024,type:journal-article ?filter=has-abstract:true ?filter=is-oa:true ?filter=publisher-name:Elsevier ``` ### Get Work by DOI ``` GET /works/{doi} ``` Example: `/works/10.1038/nature12373` ### Get References (Citations Made) ``` GET /works/{doi} ``` Response includes `reference` array with papers this work cites. ### Get Citations (Cited By) ``` GET /works?filter=references:{doi} ``` Find all works that cite a specific DOI. ### Search Journals ``` GET /journals?query={name} GET /journals/{issn} GET /journals/{issn}/works ``` ### Search Funders ``` GET /funders?query={name} GET /funders/{funder_id}/works ``` ## Response Format Works response: ```json { "status": "ok", "message-type": "work-list", "message": { "total-results": 12345, "items": [ { "DOI": "10.1038/nature12373", "title": ["Paper Title"], "author": [ { "given": "John", "family": "Smith", "ORCID": "https://orcid.org/0000-0001-2345-6789" } ], "container-title": ["Nature"], "published": { "date-parts": [[2024, 3, 15]] }, "type": "journal-article", "is-referenced-by-count": 42, "references-count": 35, "abstract": "Abstract text...", "URL": "http://dx.doi.org/10.1038/nature12373", "license": [...], "reference": [ { "DOI": "10.1000/example", "key": "ref1", "unstructured": "..." } ] } ] } } ``` ## Example Code ### Search for papers ```javascript const query = encodeURIComponent('machine learning'); const res = await fetch(`https://api.crossref.org/works?query=${query}&rows=10`); const { message } = await res.json(); log(`Found ${message['total-results']} results`); return message.items.map(w => ({ doi: w.DOI, title: w.title?.[0] || 'Untitled', authors: w.author?.map(a => `${a.given} ${a.family}`).join(', '), journal: w['container-title']?.[0], year: w.published?.['date-parts']?.[0]?.[0], citations: w['is-referenced-by-count'], type: w.type })); ``` ### Get paper by DOI ```javascript const doi = '10.1038/nature12373'; const res = await fetch(`https://api.crossref.org/works/${doi}`); const { message } = await res.json(); return { title: message.title?.[0], abstract: message.abstract, citations: message['is-referenced-by-count'], references: message['references-count'] }; ``` ### Get reference list (papers cited by a work) ```javascript const doi = '10.1038/nature12373'; const res = await fetch(`https://api.crossref.org/works/${doi}`); const { message } = await res.json(); return message.reference?.map(r => ({ doi: r.DOI, text: r.unstructured || r['article-title'] })) || []; ``` ### Find papers citing a DOI ```javascript const doi = '10.1038/nature12373'; const res = await fetch(`https://api.crossref.org/works?filter=references:${doi}&rows=25`); const { message } = await res.json(); log(`Found ${message['total-results']} citing papers`); return message.items.map(w => ({ doi: w.DOI, title: w.title?.[0], year: w.published?.['date-parts']?.[0]?.[0] })); ``` ### Filter by date and type ```javascript const res = await fetch('https://api.crossref.org/works?filter=from-pub-date:2024,type:journal-article&rows=25'); const { message } = await res.json(); ``` ## Rate Limits - Without email: ~50 requests/second burst, lower sustained - With email (polite pool): Higher priority, better reliability - Add `?mailto=email@example.com` to requests ## Work Types - `journal-article` - Journal papers - `book` - Books - `book-chapter` - Book chapters - `proceedings-article` - Conference papers - `dataset` - Datasets - `preprint` - Preprints ## Common Use Cases - Resolve DOI to full metadata - Get citation counts - Find a paper's references - Find papers that cite a specific work - Search by author, title, or topic - Filter by date, type, or open access