OpenCitations API
Free OpenCitations API with no key: open citation data linking DOIs — who cites whom, with timespans. An open alternative to proprietary citation indexes. Tested.
Endpoint tested and returned HTTP 200 on 2026-08-20
What is the OpenCitations API?
OpenCitations is a free, key-free API providing open citation data — which publications cite which others, identified by DOI, with the timespan between them — as an open alternative to proprietary citation databases.
Citation data has historically been locked inside expensive commercial products like Web of Science and Scopus. OpenCitations publishes it as open data under a CC0 waiver, which is a genuinely significant thing for open scholarship.
The API is DOI-centric and symmetrical: `/references/{doi}` gives what a paper cites, `/citations/{doi}` gives what cites it. Between them you can walk a citation graph in either direction without a subscription.
Quick facts
- Base URL
https://api.opencitations.net/index/v1- Authentication
- No API key required. A free token raises rate limits for heavy use.
- Rate limit
- No published hard limit for reasonable use; heavy consumers should request a token.
- Pricing
- Free. Citation data is released under a CC0 public domain waiver.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the OpenCitations API
Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.
1. Fetch the references of a paper
GET https://api.opencitations.net/index/v1/references/10.1186/1756-8722-6-59
curl 'https://api.opencitations.net/index/v1/references/10.1186/1756-8722-6-59'const res = await fetch("https://api.opencitations.net/index/v1/references/10.1186/1756-8722-6-59");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.opencitations.net/index/v1/references/10.1186/1756-8722-6-59", timeout=20)
res.raise_for_status()
print(res.json())[
{
"oci": "06190834283-06703097368",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1016/s0006-291x(02)02643-8",
"creation": "2013-08-19",
"timespan": "P10Y8M",
"journal_sc": "no",
"author_sc": "no"
},
{
"oci": "06190834283-062501781527",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1182/blood.v120.21.187.187",
"creation": "2013-08-19",
"timespan": "P0Y9M3D",
"journal_sc": "no",
"author_sc": "no"
},
{
"oci": "06190834283-0614089124",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1002/ajh.23433",
"creation": "2013-08-19",
"timespan": "P0Y4M22D",
"journal_sc": "no",
"author_sc": "no"
},
{
"oci": "06190834283-06901809082",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1182/blood-2011-10-386417",
"creation": "2013-08-19",
"timespan": "P1Y6M17D",
"journal_sc": "no",
"author_sc": "no"
},
{
"oci": "06190834283-0625078255",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1074/jbc.274.14.9587",
"creation": "2013-08-19",
"timespan": "P14Y4M",
"journal_sc": "no",
"author_sc": "no"
},
{
"oci": "06190834283-062101350134",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1016/0014-5793(94)00783-7",
"creation": "2013-08-19",
"timespan": "P18Y11M28D",
"journal_sc": "no",
"author_sc": "no"
},
{
"oci": "06190834283-06150171289",
"citing": "10.1186/1756-8722-6-59",
"cited": "10.1002/eji.1830231210",
"creation": "2013-08-19",
"timespan": "P19Y8M",
"journal_sc": "no"Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
references/<doi> | path | Optional | What this DOI cites. references/10.1186/1756-8722-6-59 |
citations/<doi> | path | Optional | What cites this DOI. citations/10.1186/... |
citation-count/<doi> | path | Optional | Just the citation count. citation-count/10.1186/... |
metadata/<doi> | path | Optional | Bibliographic metadata for a DOI. metadata/10.1186/... |
Response fields
ocistring- Open Citation Identifier for this citation link.
citingstring- DOI of the citing publication.
citedstring- DOI of the cited publication.
creationstring- Date the citing work was published.
timespanstring- ISO 8601 duration between cited and citing publication.
journal_sc / author_scstring- Whether it is a journal or author self-citation.
What you can build with the OpenCitations API
- Build citation network visualisations without a subscription
- Calculate citation counts from open data
- Analyse self-citation rates in a field
- Support open bibliometrics research
Common errors and how to fix them
Empty array
No citation data indexed for that DOI.
Fix: Coverage is good but not complete — it depends on publishers depositing open references.
Slow responses
Highly cited papers return large arrays.
Fix: Use /citation-count when you only need the number.
Old URL 404s
The service moved to api.opencitations.net.
Fix: Use the api. subdomain; older opencitations.net/index paths redirect.
OpenCitations API — frequently asked questions
Is OpenCitations free?
Yes, free with no API key, and the citation data is released under a CC0 public domain waiver.
Why does open citation data matter?
Citation indexes have historically been proprietary and expensive. OpenCitations makes the underlying who-cites-whom data freely available, which enables bibliometrics research without a subscription.
Is coverage complete?
No. It depends on publishers depositing open reference lists with Crossref. Coverage is substantial and growing but not universal, so counts may be lower than commercial indexes.
How do I just get a citation count?
Use /citation-count/{doi}, which returns the number without the full array — much faster for highly cited papers.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
OpenCitations is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.