checkOpenAccess
Resolves an identifier to a DOI, then looks up its open-access status via Unpaywall. Returns the best legal full-text location (preferring publisher copies, then repository copies), the licence, and the version (preprint, accepted, or published).
When to use
- A user asks "is there a free copy?" or "where can I read this without a paywall?"
- An agent is preparing a reading list and wants to surface freely-readable links.
- A library or syllabus tool wants to filter recommendations by accessibility.
Inputs
id (string, required) — one identifier per call: DOI (including shortDOI aliases like 10/aabbe), PMID, PMCID, arXiv ID, ISBN, or ADS bibcode. Pass it verbatim. Items with no DOI return a "no DOI" result.
Outputs
{
"ok": true,
"doi": "10.1371/journal.pone.0173664",
"result": {
"isOa": true,
"oaStatus": "gold" | "green" | "hybrid" | "bronze" | "closed",
"title": "...",
"bestLocation": {
"url": "https://...",
"hostType": "publisher" | "repository",
"license": "cc-by" | null,
"version": "publishedVersion" | "acceptedVersion" | "submittedVersion" | null
},
"locations": [{ "url": "https://...", "hostType": "...", "license": null, "version": null }]
}
}
resolvedFrom ({ type, value }) is present only when the input was not already a DOI.
- When no DOI can be found,
result is null and reason is one of no_doi / timeout / upstream.
Underlying surfaces
Example
curl -sS -X POST "https://scholar-sidekick.com/api/oa-check" \
-H "Content-Type: application/json" \
-d '{"id":"10.1371/journal.pone.0173664"}'
See also
resolveIdentifier for full metadata.
checkRetraction for retraction-awareness on the same identifier.
1---2name: check-open-access3description: Check whether a scholarly work is openly accessible and return the best legal free URL, license, and version (via Unpaywall).4---56# checkOpenAccess78Resolves an identifier to a DOI, then looks up its open-access status via Unpaywall. Returns the best legal full-text location (preferring publisher copies, then repository copies), the licence, and the version (preprint, accepted, or published).910## When to use1112- A user asks "is there a free copy?" or "where can I read this without a paywall?"13- An agent is preparing a reading list and wants to surface freely-readable links.14- A library or syllabus tool wants to filter recommendations by accessibility.1516## Inputs1718- `id` (string, required) — one identifier per call: DOI (including shortDOI aliases like `10/aabbe`), PMID, PMCID, arXiv ID, ISBN, or ADS bibcode. Pass it verbatim. Items with no DOI return a "no DOI" result.1920## Outputs2122```json23{24 "ok": true,25 "doi": "10.1371/journal.pone.0173664",26 "result": {27 "isOa": true,28 "oaStatus": "gold" | "green" | "hybrid" | "bronze" | "closed",29 "title": "...",30 "bestLocation": {31 "url": "https://...",32 "hostType": "publisher" | "repository",33 "license": "cc-by" | null,34 "version": "publishedVersion" | "acceptedVersion" | "submittedVersion" | null35 },36 "locations": [{ "url": "https://...", "hostType": "...", "license": null, "version": null }]37 }38}39```4041- `resolvedFrom` (`{ type, value }`) is present only when the input was not already a DOI.42- When no DOI can be found, `result` is `null` and `reason` is one of `no_doi` / `timeout` / `upstream`.4344## Underlying surfaces4546- **REST**: `POST /api/oa-check` with `{ "id": "…" }`.47- **Web UI**: [`/tools/open-access-checker`](https://scholar-sidekick.com/tools/open-access-checker).48- **MCP tool**: `checkOpenAccess`.4950## Example5152```bash53curl -sS -X POST "https://scholar-sidekick.com/api/oa-check" \54 -H "Content-Type: application/json" \55 -d '{"id":"10.1371/journal.pone.0173664"}'56```5758## See also5960- `resolveIdentifier` for full metadata.61- `checkRetraction` for retraction-awareness on the same identifier.