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
free first-party key (ssk_…, from /account) or RapidAPI key only raises rate limits.
Prefer the scholar-sidekick-mcp skill instead if your host already has the Scholar
Sidekick MCP server connected — same capabilities as native tool calls. This skill is the
zero-setup path that works in any agent that can run curl.
When to Use
- The user has an identifier (DOI, PMID, PMCID, ISBN, arXiv, ISSN, ADS bibcode, WHO IRIS URL; shortDOI aliases like
10/aabbe accepted) 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?"
- "Audit my bibliography", "check all these references at once", "which of these are fake or retracted?" — a whole reference list or
.bib / .ris / CSL-JSON file.
- Do NOT use to search for papers by topic — that's discovery (see the
arxiv skill). 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:
Always call the JSON REST API below. Do not drive the website form.
Authentication & limits
Calls to scholar-sidekick.com/api/* work anonymously — no key required — at a
rate-limited free tier that is plenty for normal, human-driven agent use. For higher
limits, create a free first-party API key (prefixed ssk_) at
https://scholar-sidekick.com/account and send it as Authorization: Bearer ssk_….
Scholar Sidekick is also offered on RapidAPI for paid/managed tiers: 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. Default to the anonymous
scholar-sidekick.com endpoints; add a Bearer ssk_… key for higher limits, or move to
RapidAPI for paid 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}} |
| Audit a whole bibliography (batch verify + retraction) |
POST /api/audit |
{bibliography: "…"} or {claims: […]} |
| Service health |
GET /api/health |
— |
Procedure
Format a citation
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. A shortDOI alias (10/aabbe, from shortdoi.org) is accepted anywhere a DOI is, and expanded to the full DOI before resolving.
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
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
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
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)
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.
Audit a whole bibliography (batch fabrication + retraction check)
curl -sS -X POST "https://scholar-sidekick.com/api/audit" \
-H "Content-Type: application/json" \
-d '{"bibliography":"@article{ligo, title={Observation of Gravitational Waves from a Binary Black Hole Merger}, doi={10.1103/PhysRevLett.116.061102}}\n@article{fab, title={A Completely Invented Title That Does Not Match The Paper}, doi={10.1016/j.neuroscience.2023.02.008}}"}'
The batch counterpart to /api/verify. Send EITHER bibliography (raw BibTeX / RIS /
CSL-JSON text; format auto-detected, override with format) OR claims (an array of
{title + one identifier} objects) — not both. Optional options.checks defaults to
["retraction"]; pass [] to skip the retraction lookup. Max 25 entries per call
(excess dropped and reported via truncated). Returns
{ ok, format, entries[], parseErrors[], truncated, summary } — each entry carries the
same verdict / confidence semantics as /api/verify plus a
retraction: { checked, doi, isRetracted, hasCorrections, hasConcern, notices } block, and
summary = { total, matched, mismatch, ambiguous, not_found, errored, retracted }.
One bad entry becomes status: "error" without failing the batch (a total outage returns
502). This audits citation identity — it does not check whether each source
supports the claim it is cited for.
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; audit takes bibliography (raw text) or claims (array), never both. 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: MCP server (power users)
Scholar Sidekick is also an MCP server (tools: resolveIdentifier, formatCitation,
exportCitation, checkRetraction, checkOpenAccess, verifyCitation,
auditBibliography). That path
requires connecting the server in an MCP host, so the REST calls above are the
zero-setup default. The MCP server works anonymously (no key required). See the
companion scholar-sidekick-mcp skill, or:
npx -y scholar-sidekick-mcp@latest # anonymous; optional SCHOLAR_API_KEY/RAPIDAPI_KEY raise limits
1---2name: scholar-sidekick-api-23description: Resolve scholarly identifiers (DOI including shortDOI aliases, 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 — for one citation or a whole bibliography at once. Calls a documented REST API over plain HTTP — no install, no API key needed for the free tier. Use when the user has a DOI, PMID, PMCID, ISBN, arXiv ID, ISSN, ADS bibcode, or WHO IRIS URL and asks to format a citation, build or export a bibliography, check whether a paper is retracted, open-access, or a fabricated citation, or audit every reference in a .bib/.ris/CSL-JSON bibliography.4license: MIT5---67# Scholar Sidekick (REST API) — Citations, Retraction & Open-Access89Turn a scholarly identifier into a formatted citation, a bibliography file, or an10integrity check (retraction / open-access / fabrication), via a documented REST API.11**No API key and no install required** — plain HTTPS calls over `curl`. An optional12free first-party key (`ssk_…`, from /account) or RapidAPI key only raises rate limits.1314> Prefer the `scholar-sidekick-mcp` skill instead if your host already has the Scholar15> Sidekick MCP server connected — same capabilities as native tool calls. This skill is the16> zero-setup path that works in any agent that can run `curl`.1718## When to Use19- The user has an identifier (DOI, PMID, PMCID, ISBN, arXiv, ISSN, ADS bibcode, WHO IRIS URL; shortDOI aliases like `10/aabbe` accepted) and wants metadata, a formatted citation, or a bibliography file.20- "Cite this in APA/Vancouver/Chicago…", "give me a BibTeX/RIS file", "export these refs".21- "Has this been retracted?", "is this open access?", "is this citation real / did you make it up?"22- "Audit my bibliography", "check all these references at once", "which of these are fake or retracted?" — a whole reference list or `.bib` / `.ris` / CSL-JSON file.23- Do NOT use to *search* for papers by topic — that's discovery (see the `arxiv` skill). This assumes you already have an identifier.2425## Surfaces — call the API, never scrape the UI26The site is built for agents. The contract lives at:27- https://scholar-sidekick.com/llms.txt (index of agent surfaces)28- https://scholar-sidekick.com/AGENTS.md (REST + MCP guide)29- https://scholar-sidekick.com/openapi/openapi.yml (OpenAPI 3.1)3031Always call the JSON REST API below. Do not drive the website form.3233## Authentication & limits34Calls to `scholar-sidekick.com/api/*` work **anonymously — no key required** — at a35rate-limited free tier that is plenty for normal, human-driven agent use. For higher36limits, create a free first-party API key (prefixed `ssk_`) at37https://scholar-sidekick.com/account and send it as `Authorization: Bearer ssk_…`.38Scholar Sidekick is also offered on RapidAPI for paid/managed tiers: subscribe at39https://rapidapi.com/scholar-sidekick-scholar-sidekick-api/api/scholar-sidekick and call40it through the RapidAPI gateway with your `X-RapidAPI-Key`. Default to the anonymous41`scholar-sidekick.com` endpoints; add a `Bearer ssk_…` key for higher limits, or move to42RapidAPI for paid volume.4344## Quick Reference45Base URL: `https://scholar-sidekick.com`4647| Need | Endpoint | Body |48|------|----------|------|49| Format a citation | `POST /api/format` | `{text, style, output}` |50| Export a bibliography file | `POST /api/export` | `{text, format}` |51| Retraction / correction / EoC check | `POST /api/retraction-check` | `{id}` |52| Open-access status + best legal URL | `POST /api/oa-check` | `{id}` |53| Verify a claimed citation (fabrication) | `POST /api/verify` | `{claimed: {title, doi}}` |54| Audit a whole bibliography (batch verify + retraction) | `POST /api/audit` | `{bibliography: "…"}` or `{claims: […]}` |55| Service health | `GET /api/health` | — |5657## Procedure5859### Format a citation60```bash61curl -sS -X POST "https://scholar-sidekick.com/api/format" \62 -H "Content-Type: application/json" \63 -d '{"text": "10.1038/nphys1170", "style": "vancouver", "output": "text"}'64```65- `text`: one identifier, or several newline-separated for a batch. Pass verbatim — `PMID:`, `arXiv:`, ISBN hyphens, and `https://doi.org/…` are all tolerated. A shortDOI alias (`10/aabbe`, from shortdoi.org) is accepted anywhere a DOI is, and expanded to the full DOI before resolving.66- `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`, …).67- `output`: `text` or `json`.68Response: `{ "ok": true, "items": [{ "formatted": "…" }], "text": "…" }`.6970### Export a bibliography file71```bash72curl -sS -X POST "https://scholar-sidekick.com/api/export" \73 -H "Content-Type: application/json" \74 -d '{"text": "10.1038/nphys1170\nPMID:30049270", "format": "bibtex"}' \75 -o refs.bib76```77- `format`: `bibtex`, `ris`, `csl-json`, `endnote-xml`, `refworks`, `nbib`, `rdf`, `csv`, `txt`.7879### Check retraction80```bash81curl -sS -X POST "https://scholar-sidekick.com/api/retraction-check" \82 -H "Content-Type: application/json" \83 -d '{"id": "10.1016/S0140-6736(97)11096-0"}'84```85Returns `{ ok, doi, result: { isRetracted, hasCorrections, hasConcern, notices[], title } }`86(Crossref + Retraction Watch). One identifier per call — field is **`id`**. When the work has87no DOI (e.g. a book), `result` is `null` and `reason` explains why (`no_doi` / `timeout` / `upstream`).8889### Check open access90```bash91curl -sS -X POST "https://scholar-sidekick.com/api/oa-check" \92 -H "Content-Type: application/json" \93 -d '{"id": "10.1371/journal.pone.0173664"}'94```95Returns `{ ok, doi, result: { isOa, oaStatus, bestLocation: {url, hostType, license, version}, locations[] } }`96(Unpaywall). One identifier per call — field is **`id`**.9798### Verify a claimed citation (catch fabrication)99```bash100curl -sS -X POST "https://scholar-sidekick.com/api/verify" \101 -H "Content-Type: application/json" \102 -d '{"claimed": {"title": "The title exactly as cited", "doi": "10.xxxx/xxxxx"}}'103```104Citation fields go inside a **`claimed`** object: `title` (required) plus an identifier105(`doi`, `pmid`, … — recommended) and optional `authors` / `year` / `container`. Returns106`{ ok, verdict, confidence, matched }`, verdict ∈ `matched` / `mismatch` / `ambiguous` /107`not_found`:108- `matched` — the claim agrees with the record at the identifier.109- `mismatch` — the identifier resolves but the title doesn't: the dominant AI-fabrication110 pattern (real DOI + invented title; Topaz et al., Lancet 2026).111- `ambiguous` — the identifier resolves to one paper but the claimed title matches a *different*112 real paper (a wrong-identifier error, not a fabrication).113- `not_found` — neither identifier nor title resolves anywhere.114115Use this for "is this citation real?", not a plain format/resolve.116117### Audit a whole bibliography (batch fabrication + retraction check)118```bash119curl -sS -X POST "https://scholar-sidekick.com/api/audit" \120 -H "Content-Type: application/json" \121 -d '{"bibliography":"@article{ligo, title={Observation of Gravitational Waves from a Binary Black Hole Merger}, doi={10.1103/PhysRevLett.116.061102}}\n@article{fab, title={A Completely Invented Title That Does Not Match The Paper}, doi={10.1016/j.neuroscience.2023.02.008}}"}'122```123The batch counterpart to `/api/verify`. Send EITHER `bibliography` (raw BibTeX / RIS /124CSL-JSON text; format auto-detected, override with `format`) OR `claims` (an array of125`{title + one identifier}` objects) — not both. Optional `options.checks` defaults to126`["retraction"]`; pass `[]` to skip the retraction lookup. Max 25 entries per call127(excess dropped and reported via `truncated`). Returns128`{ ok, format, entries[], parseErrors[], truncated, summary }` — each entry carries the129same `verdict` / `confidence` semantics as `/api/verify` plus a130`retraction: { checked, doi, isRetracted, hasCorrections, hasConcern, notices }` block, and131`summary = { total, matched, mismatch, ambiguous, not_found, errored, retracted }`.132One bad entry becomes `status: "error"` without failing the batch (a total outage returns133`502`). This audits citation *identity* — it does **not** check whether each source134supports the claim it is cited for.135136## Pitfalls137- Never scrape the web UI — the JSON API is faster and stable.138- Pass identifiers verbatim; don't strip prefixes.139- Body fields differ per endpoint: `format`/`export` use `text`; `retraction-check`/`oa-check` use `id` (one identifier per call); `verify` wraps fields in `claimed`; `audit` takes `bibliography` (raw text) or `claims` (array), never both. Don't mix them up.140- ISBNs have no DOI, so retraction/OA return a "no DOI" result for books.141- 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.142143## Verification144- `curl -sS https://scholar-sidekick.com/api/health` returns `{ "ok": true, … }`.145- A good `/api/format` response has `items[].formatted` non-empty.146147## Optional: MCP server (power users)148Scholar Sidekick is also an MCP server (tools: `resolveIdentifier`, `formatCitation`,149`exportCitation`, `checkRetraction`, `checkOpenAccess`, `verifyCitation`,150`auditBibliography`). That path151requires connecting the server in an MCP host, so the REST calls above are the152zero-setup default. The MCP server works anonymously (no key required). See the153companion `scholar-sidekick-mcp` skill, or:154```bash155npx -y scholar-sidekick-mcp@latest # anonymous; optional SCHOLAR_API_KEY/RAPIDAPI_KEY raise limits156```