Scholar Sidekick logo

Scholar Sidekick

0

Resolve, format, export, and verify academic citations (DOI, PMID, PMCID, ISBN, ISSN, arXiv, ADS, WHO IRIS) — plus retraction and open-access checks.

7 skills

resolve-identifier

Resolve a scholarly identifier (DOI/PMID/PMCID/ISBN/ISSN/arXiv/ADS/WHO IRIS) to structured CSL JSON metadata.

# resolveIdentifier Resolves a single bibliographic identifier to canonical CSL JSON metadata via the Scholar Sidekick resolver chain (Crossref → PubMed → DataCite → arXiv → ADS → ISBN → WHO IRIS, with deterministic fallback order). ## When to use - The user provides a single DOI, PMID, PMCID, ISBN, ISSN, arXiv ID, ADS bibcode, or WHO IRIS URL and wants the underlying metadata. - An agent needs structured fields (author list, title, container, year, identifiers) before formatting or exporting. ## Inputs - `identifier` (string, required) — DOI like `10.1038/nphys1170`, PMID like `34812345`, ISBN, etc. Detection is automatic. ## Outputs CSL JSON with at least `title`, `author[]`, `issued`, `container-title`, `DOI`/`PMID`/`PMCID`/`URL` (depending on source). Errors return `{ ok: false, code, error }`. ## Underlying surfaces - **REST**: `POST /api/format` with `text: "<identifier>"` and `output: "json"` returns the resolved item alongside the formatted string. - **MCP tool**: `resolveIdentifier` in [`scholar-sidekick-mcp`](https://github.com/mlava/scholar-sidekick-mcp). ## Example ```bash curl -sS -X POST "https://scholar-sidekick.com/api/format" \ -H "Content-Type: application/json" \ -d '{"text":"10.1038/nphys1170","style":"vancouver","output":"text"}' ``` ## See also - `formatCitation` for rendering, `verifyCitation` for fabrication detection. - [`/llms.txt`](https://scholar-sidekick.com/llms.txt) for the full service description.

scholar-sidekick-api

Resolve scholarly identifiers (DOI, PMID, PMCID, ISBN, arXiv, ISSN, ADS bibcode, WHO IRIS URL) into formatted citations (10,000+ CSL styles) and bibliography exports (BibTeX, RIS, EndNote, CSV…), and check retraction, open-access, and citation-fabrication status. Calls a documented REST API over plain HTTP — no install, no API key needed for the free tier.

# Scholar Sidekick (REST API) — Citations, Retraction & Open-Access Turn a scholarly identifier into a formatted citation, a bibliography file, or an integrity check (retraction / open-access / fabrication), via a documented REST API. **No API key and no install required** — plain HTTPS calls over `curl`. An optional RapidAPI key only raises rate limits. > Prefer the bundled `scholar-sidekick` MCP server instead if it is connected — same > capabilities as native tool calls. This skill is the zero-setup path that works in any > agent that can run `curl`, and needs no `RAPIDAPI_KEY`. ## When to Use - The user has an identifier (DOI, PMID, PMCID, ISBN, arXiv, ISSN, ADS bibcode, WHO IRIS URL) and wants metadata, a formatted citation, or a bibliography file. - "Cite this in APA/Vancouver/Chicago…", "give me a BibTeX/RIS file", "export these refs". - "Has this been retracted?", "is this open access?", "is this citation real / did you make it up?" - Do NOT use to *search* for papers by topic — that's discovery. This assumes you already have an identifier. ## Surfaces — call the API, never scrape the UI The site is built for agents. The contract lives at: - https://scholar-sidekick.com/llms.txt (index of agent surfaces) - https://scholar-sidekick.com/AGENTS.md (REST + MCP guide) - https://scholar-sidekick.com/openapi/openapi.yml (OpenAPI 3.1) Always call the JSON REST API below. Do not drive the website form. ## Authentication & limits Calls to `scholar-sidekick.com/api/*` work **anonymously — there is no first-party API key** — at a rate-limited free tier (~40 format / 10 export requests per window), which is plenty for normal, human-driven agent use. For higher limits, Scholar Sidekick is offered on RapidAPI: subscribe at https://rapidapi.com/scholar-sidekick-scholar-sidekick-api/api/scholar-sidekick and call it through the RapidAPI gateway with your `X-RapidAPI-Key`. Use the anonymous `scholar-sidekick.com` endpoints by default; move to RapidAPI only for volume. ## Quick Reference Base URL: `https://scholar-sidekick.com` | Need | Endpoint | Body | |------|----------|------| | Format a citation | `POST /api/format` | `{text, style, output}` | | Export a bibliography file | `POST /api/export` | `{text, format}` | | Retraction / correction / EoC check | `POST /api/retraction-check` | `{id}` | | Open-access status + best legal URL | `POST /api/oa-check` | `{id}` | | Verify a claimed citation (fabrication) | `POST /api/verify` | `{claimed: {title, doi}}` | | Service health | `GET /api/health` | — | ## Procedure ### Format a citation ```bash curl -sS -X POST "https://scholar-sidekick.com/api/format" \ -H "Content-Type: application/json" \ -d '{"text": "10.1038/nphys1170", "style": "vancouver", "output": "text"}' ``` - `text`: one identifier, or several newline-separated for a batch. Pass verbatim — `PMID:`, `arXiv:`, ISBN hyphens, and `https://doi.org/…` are all tolerated. - `style`: `vancouver` (default), `ama`, `apa`, `ieee`, `cse`, or any CSL style ID (`chicago-author-date`, `harvard-cite-them-right`, `modern-language-association`, `nature`, `bmj`, `the-lancet`, …). - `output`: `text` or `json`. Response: `{ "ok": true, "items": [{ "formatted": "…" }], "text": "…" }`. ### Export a bibliography file ```bash curl -sS -X POST "https://scholar-sidekick.com/api/export" \ -H "Content-Type: application/json" \ -d '{"text": "10.1038/nphys1170\nPMID:30049270", "format": "bibtex"}' \ -o refs.bib ``` - `format`: `bibtex`, `ris`, `csl-json`, `endnote-xml`, `refworks`, `nbib`, `rdf`, `csv`, `txt`. ### Check retraction ```bash curl -sS -X POST "https://scholar-sidekick.com/api/retraction-check" \ -H "Content-Type: application/json" \ -d '{"id": "10.1016/S0140-6736(97)11096-0"}' ``` Returns `{ ok, doi, result: { isRetracted, hasCorrections, hasConcern, notices[], title } }` (Crossref + Retraction Watch). One identifier per call — field is **`id`**. When the work has no DOI (e.g. a book), `result` is `null` and `reason` explains why (`no_doi` / `timeout` / `upstream`). ### Check open access ```bash curl -sS -X POST "https://scholar-sidekick.com/api/oa-check" \ -H "Content-Type: application/json" \ -d '{"id": "10.1371/journal.pone.0173664"}' ``` Returns `{ ok, doi, result: { isOa, oaStatus, bestLocation: {url, hostType, license, version}, locations[] } }` (Unpaywall). One identifier per call — field is **`id`**. ### Verify a claimed citation (catch fabrication) ```bash curl -sS -X POST "https://scholar-sidekick.com/api/verify" \ -H "Content-Type: application/json" \ -d '{"claimed": {"title": "The title exactly as cited", "doi": "10.xxxx/xxxxx"}}' ``` Citation fields go inside a **`claimed`** object: `title` (required) plus an identifier (`doi`, `pmid`, … — recommended) and optional `authors` / `year` / `container`. Returns `{ ok, verdict, confidence, matched }`, verdict ∈ `matched` / `mismatch` / `ambiguous` / `not_found`: - `matched` — the claim agrees with the record at the identifier. - `mismatch` — the identifier resolves but the title doesn't: the dominant AI-fabrication pattern (real DOI + invented title; Topaz et al., Lancet 2026). - `ambiguous` — the identifier resolves to one paper but the claimed title matches a *different* real paper (a wrong-identifier error, not a fabrication). - `not_found` — neither identifier nor title resolves anywhere. Use this for "is this citation real?", not a plain format/resolve. ## Pitfalls - Never scrape the web UI — the JSON API is faster and stable. - Pass identifiers verbatim; don't strip prefixes. - Body fields differ per endpoint: `format`/`export` use `text`; `retraction-check`/`oa-check` use `id` (one identifier per call); `verify` wraps fields in `claimed`. Don't mix them up. - ISBNs have no DOI, so retraction/OA return a "no DOI" result for books. - Don't fabricate a fallback: if a call fails or returns `ok:false`, report that — never invent a citation, retraction status, OA verdict, or a "matched" verdict. ## Verification - `curl -sS https://scholar-sidekick.com/api/health` returns `{ "ok": true, … }`. - A good `/api/format` response has `items[].formatted` non-empty. ## Optional: bundled MCP server (power users) This plugin also ships the `scholar-sidekick` MCP server (tools: `resolveIdentifier`, `formatCitation`, `exportCitation`, `checkRetraction`, `checkOpenAccess`, `verifyCitation`). That path requires a RapidAPI key, so the REST calls above are the zero-setup default: ```bash npx -y scholar-sidekick-mcp@latest # needs RAPIDAPI_KEY in env ```

verify-citation

Verify whether a claimed citation matches the actual paper at its identifier (detects the real-DOI/fake-title fabrication pattern common in LLM hallucinations).

# verifyCitation Cross-checks a _claimed_ citation (title, plus optional authors/year/container and one identifier) against the metadata resolved from that identifier. Catches the dominant fabrication pattern documented by Topaz et al. (Lancet, 2026): a real, resolvable DOI paired with an invented title and authors. `resolveIdentifier` alone never catches this — it returns whatever the registry has for the identifier. `verifyCitation` is the only tool that compares the _claim_ against _reality_. ## When to use - A user pastes a citation from an LLM transcript and asks "is this real?" - An agent is auditing references in a manuscript draft for hallucinations. - A reviewer wants to flag suspected fabricated citations before submission. ## Inputs Wrap the citation fields inside a `claimed` object (one citation per call): - `claimed` (object, required): - `title` (string, required) — the title exactly as cited. - one identifier — `doi`, `pmid`, `pmcid`, `isbn`, `arxiv`, `issn`, `ads`, or `whoIrisUrl`. - `authors` (array, optional) — `[{ "family": "...", "given": "..." }]`; sharpens the verdict. - `year` (number, optional); `container` (string, optional — the journal or book title). - `options` (object, optional) — e.g. `{ "bypassCache": true }`. ## Outputs ```json { "ok": true, "verdict": "matched" | "mismatch" | "not_found" | "ambiguous", "confidence": "high" | "medium" | "low", "matched": { "...": "the resolved CSL item, when one was found" } } ``` - `matched` — the claim agrees with the record at the identifier. - `mismatch` — the identifier resolves but the title does not (the fabrication pattern; flag it clearly). - `ambiguous` — the identifier resolves to one paper but the claimed title matches a _different_ real paper (a wrong-identifier error, not a fabrication). - `not_found` — neither identifier nor title resolves anywhere. Every produced verdict returns `200 OK` — the verdict _is_ the answer, not a failure. 4xx/5xx are reserved for protocol errors. ## Underlying surfaces - **REST**: `POST /api/verify` with `{ "claimed": { … } }`. One citation per call. - **Web UI**: [`/tools/citation-verifier`](https://scholar-sidekick.com/tools/citation-verifier). - **MCP tool**: `verifyCitation` in `scholar-sidekick-mcp` v0.7.0+. ## Example ```bash curl -sS -X POST "https://scholar-sidekick.com/api/verify" \ -H "Content-Type: application/json" \ -d '{"claimed":{"title":"The title exactly as cited","doi":"10.1038/nphys1170","authors":[{"family":"Verlinde"}],"year":2011}}' ``` ## See also - `checkRetraction` for retraction status (different concern — fake vs. retracted). - [`/citation-integrity`](https://scholar-sidekick.com/citation-integrity) for the broader trust surface.

check-open-access

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

# 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, 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.

check-retraction

Check whether a scholarly work has been retracted, corrected, or had an expression of concern raised (via Crossref + Retraction Watch).

# checkRetraction Looks up the live retraction status of an identifier against Crossref's update relationships and the Retraction Watch database. The route resolves any supported identifier to a DOI first, then checks it. Returns retraction / correction / expression-of-concern flags plus the notice records. ## When to use - A user asks "is this paper still valid?" or "has this been retracted?" - An agent is about to cite a paper in a clinical, legal, or academic context where retraction-awareness matters. - A reviewer wants to flag retracted references in a manuscript. ## Inputs - `id` (string, required) — one identifier per call: DOI, PMID, PMCID, arXiv ID, or ADS bibcode. Pass it verbatim (`PMID:` and similar prefixes are tolerated). Books/ISBNs have no DOI, so they return a "no DOI" result. ## Outputs ```json { "ok": true, "doi": "10.1016/s0140-6736(97)11096-0", "resolvedFrom": { "type": "pmid", "value": "9500320" }, "result": { "isRetracted": true, "hasCorrections": false, "hasConcern": false, "notices": [ { "type": "retraction", "label": "Retraction", "doi": "...", "date": "1998-03-06", "source": "crossref" } ], "title": "..." } } ``` - `resolvedFrom` 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/retraction-check` with `{ "id": "…" }`. - **Web UI**: [`/tools/retraction-checker`](https://scholar-sidekick.com/tools/retraction-checker). - **MCP tool**: `checkRetraction`. ## Example ```bash curl -sS -X POST "https://scholar-sidekick.com/api/retraction-check" \ -H "Content-Type: application/json" \ -d '{"id":"10.1016/s0140-6736(97)11096-0"}' ``` ## See also - `verifyCitation` for fabrication detection (different concern — fake vs. retracted). - `checkOpenAccess` for legal-copy lookup.

export-citation

Export resolved citations to a reference-manager file format (RIS, BibTeX, CSL JSON, EndNote XML, RefWorks, NBIB, Zotero RDF, CSV, or plain text).

# exportCitation Resolves identifiers and serialises the resulting items to a bibliography file. Targets reference managers (Zotero, Mendeley, EndNote, RefWorks) and LaTeX workflows (BibTeX/Overleaf). ## When to use - The user wants to import citations into Zotero, Mendeley, EndNote, or a LaTeX project. - An agent needs a `.ris`, `.bib`, or `.json` artifact to attach to a draft. ## Inputs - `text` (string) OR `items` (CSL-JSON[]) — Input identifiers or pre-resolved items. - `format` (string, required) — `ris`, `bibtex`, `csl-json`, `endnote-xml`, `refworks`, `nbib`, `rdf`, `csv`, or `txt`. - `style` (string, optional) — Only used when `format=txt` (selects the formatter style). ## Outputs Plain-text body in the requested format with appropriate `Content-Type` and `Content-Disposition: attachment; filename=...` headers. ## Underlying surfaces - **REST**: `POST /api/export`. - **MCP tool**: `exportCitation`. ## Example ```bash curl -sS -X POST "https://scholar-sidekick.com/api/export" \ -H "Content-Type: application/json" \ -d '{"text":"10.1038/nphys1170\n9780306406157","format":"ris"}' \ -o citations.ris ``` ## See also - `formatCitation` for inline-rendered references. - [`/docs.md#post-apiexport`](https://scholar-sidekick.com/docs.md) for full format reference.

format-citation

Format one or more scholarly identifiers as citations in a chosen style (Vancouver, AMA, APA, IEEE, CSE, or any CSL style ID).

# formatCitation Takes a free-text block of identifiers (one per line, mixed types OK) and returns formatted citations in the requested style. Five builtins ship as plain-text formatters; any other style routes through citeproc-js with a CSL stylesheet. ## When to use - The user pastes a list of DOIs/PMIDs/ISBNs and wants Vancouver/APA/IEEE/etc. references. - An agent needs to render a bibliography for a draft manuscript. ## Inputs - `text` (string, required) — One identifier per line, or free text containing identifiers. - `style` (string, optional) — Builtin: `vancouver` (default), `ama`, `apa`, `ieee`, `cse`. Or any CSL style ID (e.g. `nature`, `lancet`, `chicago-author-date`). - `locale` (string, optional) — CSL locale, e.g. `en-US`, `en-GB`. - `output` (string, optional) — `"text"` (default) or `"html"`. - `footnotes` (boolean, optional) — Render HTML output as footnotes. ## Outputs `{ ok: true, items: [{ ok, formatted, _source }, ...] }`. Mixed success — per-item ok flag lets the agent surface partial failures. ## Underlying surfaces - **REST**: `POST /api/format` (or `/api/format/stream` for NDJSON streaming). - **MCP tool**: `formatCitation`. ## Example ```bash curl -sS -X POST "https://scholar-sidekick.com/api/format" \ -H "Content-Type: application/json" \ -d '{"text":"10.1038/nphys1170\n34812345","style":"apa","output":"text"}' ``` ## See also - `exportCitation` for file-format bibliographies (RIS, BibTeX, etc.). - [`/docs.md`](https://scholar-sidekick.com/docs.md) for full API reference.