BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://api.opencitations.net/index/v1/references/10.1186/1756-8722-6-59'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200 (truncated)
[
  {
    "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

ParameterTypeRequiredDescription
references/<doi>pathOptionalWhat this DOI cites. references/10.1186/1756-8722-6-59
citations/<doi>pathOptionalWhat cites this DOI. citations/10.1186/...
citation-count/<doi>pathOptionalJust the citation count. citation-count/10.1186/...
metadata/<doi>pathOptionalBibliographic 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

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.