# Check Open Access

> Check whether a scholarly work is openly accessible and return the best legal free URL, license, and version (via Unpaywall).

- Skill: `mlava/check-open-access` (Agent Skill)
- Install (CLI): `npx skillmds@latest add mlava/check-open-access`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mlava/check-open-access/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: mlava (https://skillmd.com/u/mlava)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/mlava/check-open-access

---


# 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

```json
{
  "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

- **REST**: `POST /api/oa-check` with `{ "id": "…" }`.
- **Web UI**: [`/tools/open-access-checker`](https://scholar-sidekick.com/tools/open-access-checker).
- **MCP tool**: `checkOpenAccess`.

## Example

```bash
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.

