Skill Tracer
Skills › Scientific Agent Skills › paper-lookup › opencitations.md

opencitations.md

143 lines · skills/paper-lookup/references/opencitations.md at 5f2bc03

Open on GitHub
1# OpenCitations
2
3Open citation data (who cites whom) as open lists of citing/cited PIDs. Use it when you
4need an openly licensed citation edge, a count you can cite, or an Open Citation
5Identifier (OCI). It is not a paper search and it does not return titles on the Index
6endpoints.
7
8For a literature search use PubMed, OpenAlex, or Semantic Scholar. For a citation
9*graph with titles and abstracts*, start with Semantic Scholar or OpenAlex and treat
10OpenCitations as the open-data check. Europe PMC `/citations` is the biomedical
11alternative when you already have a `{source}/{id}` pair.
13All figures below verified 2026-09-10.

OpenCitations

Open citation data (who cites whom) as open lists of citing/cited PIDs. Use it when you need an openly licensed citation edge, a count you can cite, or an Open Citation Identifier (OCI). It is not a paper search and it does not return titles on the Index endpoints.

For a literature search use PubMed, OpenAlex, or Semantic Scholar. For a citation graph with titles and abstracts, start with Semantic Scholar or OpenAlex and treat OpenCitations as the open-data check. Europe PMC /citations is the biomedical alternative when you already have a {source}/{id} pair.

All figures below verified 2026-09-10.

Raw lines 1 to 14
15## Base URLs
17```
18https://api.opencitations.net/index/v2 # citation edges and counts
19https://api.opencitations.net/meta/v1 # bibliographic metadata for a PID
20```
22Index v2 is current (v2.2.0, 2025-04-15). Meta lives at **v1** — `meta/v2/...`
23is HTTP 404.

Base URLs

https://api.opencitations.net/index/v2    # citation edges and counts
https://api.opencitations.net/meta/v1     # bibliographic metadata for a PID

Index v2 is current (v2.2.0, 2025-04-15). Meta lives at v1 — meta/v2/... is HTTP 404.

Raw lines 15 to 24
25## Authentication
27Optional. Public calls work without a token. For heavier use, request an access
28token from OpenCitations and send `Authorization: <token>`. Do not add a new
29`.env` key for this; proceed without one.

Authentication

Optional. Public calls work without a token. For heavier use, request an access token from OpenCitations and send Authorization: <token>. Do not add a new .env key for this; proceed without one.

Raw lines 25 to 30
31## Rate Limits
33The Index API documents **180 requests/minute per IP**. Serialize requests. Call `/citation-count` before
34`/citations` — the list endpoint returns **every** incoming citation in one
35body, with no page parameter.

Rate Limits

The Index API documents 180 requests/minute per IP. Serialize requests. Call /citation-count before /citations — the list endpoint returns every incoming citation in one body, with no page parameter.

Raw lines 31 to 36
37## Identifier prefix (required)
39Index v2 accepts `doi:`, `pmid:`, `omid:`, `issn:`, and `isbn:`; for papers prefer the first three. A bare DOI is HTTP 400:
41```
42GET /index/v2/citation-count/10.1038/nature12373
43 -> 400 the value '10.1038/nature12373' is not valid for parameter 'id'
44 Example: /index/v2/citation-count/doi:10.1108/jd-12-2013-0166
46GET /index/v2/citation-count/doi:10.1038/nature12373
47 -> 200 [{"count": "1806"}]
48```

Identifier prefix (required)

Index v2 accepts doi:, pmid:, omid:, issn:, and isbn:; for papers prefer the first three. A bare DOI is HTTP 400:

GET /index/v2/citation-count/10.1038/nature12373
  -> 400  the value '10.1038/nature12373' is not valid for parameter 'id'
          Example: /index/v2/citation-count/doi:10.1108/jd-12-2013-0166

GET /index/v2/citation-count/doi:10.1038/nature12373
  -> 200  [{"count": "1806"}]
Raw lines 37 to 49
50## Key Endpoints

Key Endpoints

Raw lines 50 to 51
52### 1. Incoming citation count
54```
55GET /index/v2/citation-count/{id}
56```
58Always a one-element JSON array. `count` is a **string**, not an integer.
60| Query | HTTP | Body |
61|---|---|---|
62| `doi:10.1038/nature12373` | 200 | `[{"count": "1806"}]` |
63| `pmid:23803767` | 200 | `[{"count": "94"}]` |
64| `doi:10.9999/not-a-real-doi` | 200 | `[{"count": "0"}]` |
66A missing work is HTTP 200 with `"0"`, not 404. Do not treat 200 as "this DOI
67is in the index."

1. Incoming citation count

GET /index/v2/citation-count/{id}

Always a one-element JSON array. count is a string, not an integer.

QueryHTTPBody
doi:10.1038/nature12373200[{"count": "1806"}]
pmid:23803767200[{"count": "94"}]
doi:10.9999/not-a-real-doi200[{"count": "0"}]

A missing work is HTTP 200 with "0", not 404. Do not treat 200 as "this DOI is in the index."

Raw lines 52 to 68
69### 2. Outgoing reference count
71```
72GET /index/v2/reference-count/{id}
73```
75Same shape as citation-count.

2. Outgoing reference count

GET /index/v2/reference-count/{id}

Same shape as citation-count.

Raw lines 69 to 76
77### 3. Incoming citations / outgoing references
79```
80GET /index/v2/citations/{id}
81GET /index/v2/references/{id}
82```
84Each item:
86| Field | Meaning |
87|---|---|
88| `oci` | Open Citation Identifier (`citingOmidsuffix-citedOmidsuffix`) |
89| `citing` / `cited` | Space-separated PIDs, each prefixed (`doi:`, `pmid:`, `omid:`, `openalex:`) |
90| `creation` | ISO date of the citing work |
91| `timespan` | XSD duration (`P6Y0M1D`) between cited and citing publication |
92| `journal_sc` / `author_sc` | `"yes"` / `"no"` self-citation flags |
94Verified on `doi:10.1038/nature12373` `/references`: 30 rows. First `citing` is
95`omid:br/06120344846 doi:10.1038/nature12373 openalex:W2159974629 pmid:23903748`.
96Parse the `doi:` token out; do not take the whole string as one DOI.
98Verified on `doi:10.1186/1756-8722-6-59` `/citations`: 217 rows in one response.
99For `nature12373` the count is 1806 — do not pull that list unless the user
100asked for the full set.

3. Incoming citations / outgoing references

GET /index/v2/citations/{id}
GET /index/v2/references/{id}

Each item:

FieldMeaning
ociOpen Citation Identifier (citingOmidsuffix-citedOmidsuffix)
citing / citedSpace-separated PIDs, each prefixed (doi:, pmid:, omid:, openalex:)
creationISO date of the citing work
timespanXSD duration (P6Y0M1D) between cited and citing publication
journal_sc / author_sc"yes" / "no" self-citation flags

Verified on doi:10.1038/nature12373 /references: 30 rows. First citing is omid:br/06120344846 doi:10.1038/nature12373 openalex:W2159974629 pmid:23903748. Parse the doi: token out; do not take the whole string as one DOI.

Verified on doi:10.1186/1756-8722-6-59 /citations: 217 rows in one response. For nature12373 the count is 1806 — do not pull that list unless the user asked for the full set.

Raw lines 77 to 101
102### 4. One citation by OCI
104```
105GET /index/v2/citation/{oci}
106```
108`oci` is the two-number form without an `oci:` prefix.

4. One citation by OCI

GET /index/v2/citation/{oci}

oci is the two-number form without an oci: prefix.

Raw lines 102 to 109
110### 5. Metadata (titles, authors)
112```
113GET /meta/v1/metadata/{id}
114```
116Same `doi:` / `pmid:` / `omid:` prefix. Returns `id` (space-separated PIDs),
117`title`, `author` (semicolon-separated, may include ORCID + OMID). Use this
118when you have an edge from Index and need a human-readable label.

5. Metadata (titles, authors)

GET /meta/v1/metadata/{id}

Same doi: / pmid: / omid: prefix. Returns id (space-separated PIDs), title, author (semicolon-separated, may include ORCID + OMID). Use this when you have an edge from Index and need a human-readable label.

Raw lines 110 to 119
120## Typical Workflow
1221. You have a DOI or PMID.
1232. `citation-count` first. If `"0"`, say OpenCitations has no incoming citations
124 — not that the paper is uncited everywhere.
1253. For a short list, `/references` or `/citations`. Extract the `doi:` token
126 from each `citing`/`cited` string.
1274. Resolve titles with Meta, Crossref, or Semantic Scholar. Do not invent them
128 from the OCI.

Typical Workflow

  1. You have a DOI or PMID.
  2. citation-count first. If "0", say OpenCitations has no incoming citations — not that the paper is uncited everywhere.
  3. For a short list, /references or /citations. Extract the doi: token from each citing/cited string.
  4. Resolve titles with Meta, Crossref, or Semantic Scholar. Do not invent them from the OCI.
Raw lines 120 to 129
130## Failure Modes
132| What you did | What happens | What to do |
133|---|---|---|
134| Bare DOI, no `doi:` prefix | HTTP 400 | Prefix the scheme |
135| Unknown DOI | HTTP 200, `count: "0"` | Report a gap; try Semantic Scholar |
136| Parsed `citing` as one DOI | You store `omid:br/… doi:10.… pmid:…` | Split on spaces; keep the `doi:` value |
137| `/citations` on a highly cited work | Multi-megabyte JSON, no pagination | Count first; bound the pull |
138| `meta/v2/...` | HTTP 404 HTML | Use `meta/v1` |

Failure Modes

What you didWhat happensWhat to do
Bare DOI, no doi: prefixHTTP 400Prefix the scheme
Unknown DOIHTTP 200, count: "0"Report a gap; try Semantic Scholar
Parsed citing as one DOIYou store omid:br/… doi:10.… pmid:…Split on spaces; keep the doi: value
/citations on a highly cited workMulti-megabyte JSON, no paginationCount first; bound the pull
meta/v2/...HTTP 404 HTMLUse meta/v1
Raw lines 130 to 139
140## Official sources reviewed 2026-09-30
142- https://api.opencitations.net/index/v2
143- https://api.opencitations.net/meta/v1

Official sources reviewed 2026-09-30

  • https://api.opencitations.net/index/v2
  • https://api.opencitations.net/meta/v1
Raw lines 140 to 143