BYTETOOLS

ORCID API

Free ORCID public API with no key: researcher profiles, publications, affiliations and funding by persistent researcher identifier. Tested curl example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-20

What is the ORCID API?

The ORCID public API is free and key-free for reading public researcher records, providing names, affiliations, education, publications and funding linked to a persistent ORCID identifier.

ORCID solves author disambiguation — the problem that 'J. Smith' could be any of hundreds of researchers. Each researcher has a persistent identifier that follows them across institutions and name changes, and publishers increasingly require it.

The public API returns whatever the researcher has chosen to make public, which varies enormously. Some records are rich with every publication and affiliation; many are near-empty. Always code for the sparse case rather than assuming a full profile.

Quick facts

Base URL
https://pub.orcid.org/v3.0
Authentication
Public records need no key for basic reads. The member API and write access require OAuth credentials.
Rate limit
24 requests per second, with burst allowances.
Pricing
Free for public data. Member API access is a paid membership.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the ORCID 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 a researcher's public profile

GET https://pub.orcid.org/v3.0/0000-0002-1825-0097/person

curl
curl 'https://pub.orcid.org/v3.0/0000-0002-1825-0097/person' \
  -H 'Accept: application/json'
JavaScript (fetch)
const res = await fetch("https://pub.orcid.org/v3.0/0000-0002-1825-0097/person", {
  headers: {
    "Accept": "application/json",
  },
});
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

headers = {
    "Accept": "application/json",
}

res = requests.get("https://pub.orcid.org/v3.0/0000-0002-1825-0097/person", headers=headers, timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "last-modified-date": {
    "value": 1494016313820
  },
  "name": {
    "created-date": {
      "value": 1460757617078
    },
    "last-modified-date": {
      "value": 1504850007188
    },
    "given-names": {
      "value": "Josiah"
    },
    "family-name": {
      "value": "Carberry"
    },
    "credit-name": null,
    "source": null,
    "visibility": "public",
    "path": "0000-0002-1825-0097"
  },
  "other-names": {
    "last-modified-date": {
      "value": 1462157547720
    },
    "other-name": [
      {
        "created-date": {
          "value": 1462157351411
        },
        "last-modified-date": {
          "value": 1462157547720
        },
        "source": {
          "source-orcid": {
            "uri": "https://orcid.org/0000-0002-1825-0097",
            "path": "0000-0002-1825-0097",
            "host": "orcid.org"
          },
          "source-client-id": null,
          "source-name": {
            "value": "Josiah Carberry"
          },
          "assertion-origin-orcid": null,
          "assertion-origin-client-id": null,
          "assertion-origin-name": null
        },
        "content": "Josiah Stinkney Carberry",
        "visibility": "public",
        "path": "/0000-0002-1825-0097/other-names/732317",
        "put-code": 732317,
        "display-index": 3
      },
      {
        "created-date": {
          "value": 1446663146889
        },
        "last-modified-date": {
          "value": 1462157547720
        },
        "source": {
          "source-orcid": {
            "uri": "https://orcid.org/0000-0002-1825-0097",
            "path

Parameters

ParameterTypeRequiredDescription
<orcid-id>/personpathOptionalName, biography and external identifiers. 0000-0002-1825-0097/person
<orcid-id>/workspathOptionalPublications listed on the record. works
<orcid-id>/employmentspathOptionalInstitutional affiliations. employments
AcceptheaderRequiredSet to application/json; the default is XML. application/json

Response fields

name.given-names.valuestring
Given name.
name.family-name.valuestring
Family name.
biography.contentstring
Researcher biography, when public.
external-identifiersobject
Linked identifiers such as Scopus or ResearcherID.
researcher-urlsobject
Personal and institutional links.
last-modified-date.valueinteger
Last update as a Unix timestamp in milliseconds.

What you can build with the ORCID API

  • Disambiguate authors in a publication database
  • Auto-populate a researcher profile from their ORCID
  • Verify institutional affiliations
  • Link publications to persistent author identifiers

Common errors and how to fix them

XML instead of JSON

XML is the default representation.

Fix: Send `Accept: application/json` on every request.

Mostly empty record

The researcher has kept fields private, or never filled them in.

Fix: Public visibility is entirely the researcher's choice — code for sparse records.

404

Invalid ORCID identifier.

Fix: IDs are 16 digits in four hyphenated groups, and the final character can be an X.

ORCID API — frequently asked questions

Is the ORCID API free?

Yes, reading public records requires no API key. The member API, which offers richer data and write access, requires a paid membership.

What problem does ORCID solve?

Author disambiguation. Names are ambiguous and change; an ORCID identifier is persistent and follows a researcher across institutions, which is why publishers increasingly require one.

Why is the record I fetched almost empty?

Researchers control what is public. Many records contain only a name. Always handle sparse profiles rather than assuming complete data.

Why am I getting XML?

XML is the default. Send `Accept: application/json` to get JSON instead.

Tools that pair with this API

ORCID 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.