Back to Claude Scientific Skills

Unpaywall API

scientific-skills/paper-lookup/references/unpaywall.md

2.38.03.7 KB
Original Source

Unpaywall API

Unpaywall tells you whether a legal, free copy of a scholarly article exists. Given a DOI, it returns open access status, PDF links, and location details.

Base URL

https://api.unpaywall.org/v2

Authentication

No API key. You must include your email address as a query parameter: [email protected]

Important: Use a real email address. Unpaywall rejects placeholder emails like [email protected] with HTTP 422.

Rate Limits

100,000 calls per day. For heavier use, download the database snapshot.

Key Endpoints

1. DOI Lookup

GET /v2/{doi}[email protected]

Example:

https://api.unpaywall.org/v2/10.1038/[email protected]

2. Search (unreliable)

GET /v2/search?query={text}&[email protected]

Warning: The search endpoint has been returning HTTP 500 errors as of March 2026. It may be deprecated or intermittently broken. Use DOI lookups instead -- find papers via PubMed/OpenAlex/Semantic Scholar first, then check OA status per-DOI.

ParameterDescription
querySearch text. Supports quoted phrases, OR, - negation
is_oatrue or false -- filter by OA status
pagePage number (1-indexed), 50 results per page

Response Format

DOI Lookup response

json
{
  "doi": "10.1038/nature12373",
  "doi_url": "https://doi.org/10.1038/nature12373",
  "title": "Nanometre-scale thermometry in a living cell",
  "year": 2013,
  "published_date": "2013-07-31",
  "genre": "journal-article",
  "publisher": "Springer Nature",
  "is_oa": true,
  "oa_status": "green",
  "best_oa_location": {
    "url": "https://dash.harvard.edu/bitstream/1/...",
    "url_for_pdf": "https://dash.harvard.edu/bitstream/1/...pdf",
    "url_for_landing_page": "https://dash.harvard.edu/handle/...",
    "host_type": "repository",
    "version": "acceptedVersion",
    "license": "cc-by",
    "is_best": true,
    "oa_date": "2016-01-01"
  },
  "first_oa_location": {...},
  "oa_locations": [...],
  "has_repository_copy": true,
  "journal_name": "Nature",
  "journal_issns": "0028-0836,1476-4687",
  "journal_issn_l": "0028-0836",
  "journal_is_oa": false,
  "journal_is_in_doaj": false,
  "z_authors": [
    {"raw_author_name": "G. Kucsko", "author_position": "first"},
    {"raw_author_name": "P. C. Maurer", "author_position": "middle"}
  ]
}

OA Status values

StatusMeaning
goldPublished in a fully OA journal
hybridOA in a subscription journal (publisher-hosted)
bronzeFree to read on publisher site but no OA license
greenAvailable via a repository (e.g., institutional, preprint)
closedNo free legal copy found

OA Location fields

FieldDescription
urlBest URL (PDF if available, else landing page)
url_for_pdfDirect PDF URL (null if no PDF)
url_for_landing_pageLanding page URL
host_typepublisher or repository
versionsubmittedVersion, acceptedVersion, publishedVersion
licensee.g., cc-by, cc-by-nc, implied-oa, or null
is_bestWhether this is the best_oa_location
oa_dateWhen first available at this location

Search response

json
{
  "results": [
    {
      "response": {...},
      "score": 42.5,
      "snippet": "...text with <b>highlighted</b> matches..."
    }
  ]
}

Typical Workflow

  1. You have a DOI from PubMed, Crossref, or another source
  2. Call Unpaywall with the DOI
  3. Check is_oa -- if true, use best_oa_location.url_for_pdf for the free PDF
  4. Check oa_status to understand what kind of OA it is
  5. If closed, oa_locations will be empty -- the article requires a subscription