BYTETOOLS

CERN Open Data API

Free CERN Open Data Portal API with no key: search and retrieve records for LHC datasets, software, configuration files and documentation from CMS, ATLAS, LHCb and ALICE.

No API key requiredHTTPSFree tier

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

What is the CERN Open Data API?

The CERN Open Data Portal API is a free, key-free REST interface to the portal's records: real and simulated collision datasets from the LHC experiments, plus the software, configuration and documentation needed to analyse them. Search results include faceted aggregations by experiment, category and availability.

CERN publishes its LHC collision data — petabytes of it — under CC0, and this API is the catalogue. Each record describes a dataset with its experiment, collision energy, run period, file list and the exact software release needed to read it, because analysing this data means reproducing a decade-old computing environment as much as it means physics. The portal now indexes over 80,000 records.

The search endpoint returns aggregations before results, and they are the most useful part for exploration: the example's `availability` buckets show 52,482 records online, 19,615 partial and four available on demand, which tells you immediately how much of the archive you can fetch over HTTP. Rate limiting is explicit and tight — the response carried `X-RateLimit-Limit: 60` with a `Retry-After` of 60 seconds — so this is an API to page politely rather than crawl. Actual data files are served from EOS and CernVM-FS rather than through this API; the record simply tells you where they live.

Quick facts

Base URL
https://opendata.cern.ch/api
Authentication
No API key or account. CERN Open Data records and the datasets they describe are released under CC0, with a citation requested for publications.
Rate limit
60 requests per minute per IP, reported in `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`, with `Retry-After` on exhaustion.
Pricing
Free. Data and metadata are CC0.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the CERN Open Data API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Search the portal catalogue, returning one record with facets

GET https://opendata.cern.ch/api/records/?size=1

curl
curl 'https://opendata.cern.ch/api/records/?size=1'
JavaScript (fetch)
const res = await fetch("https://opendata.cern.ch/api/records/?size=1");
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://opendata.cern.ch/api/records/?size=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "aggregations": {
    "availability": {
      "buckets": [
        {
          "doc_count": 52482,
          "key": "online"
        },
        {
          "doc_count": 19615,
          "key": "partial"
        },
        {
          "doc_count": 4,
          "key": "on demand"
        }
      ],
      "doc_count": 82385,
      "doc_count_error_upper_bound": 0,
      "meta": {},
      "sum_other_doc_count": 0
    },
    "category": {
      "buckets": [
        {
          "doc_count": 219,
          "key": " Heavy-Ion Physics",
          "subcategory": {
            "buckets": [],
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0
          }
        },
        {
          "doc_count": 1234,
          "key": "2 Fermion",
          "subcategory": {
            "buckets": [],
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0
          }
        },
        {
          "doc_count": 379,
          "key": "4 Fermion",
          "subcategory": {
            "buckets": [],
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0
          }
        },
        {
          "doc_count": 504,
          "key": "B physics and Quarkonia",
          "subcategory": {
            "buckets": [],
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0
          }
        },
        {
          "doc_count": 1604,
          "key": "Beyond 2 Generations",
          "subcategory": {
            "buckets": [],
            "doc_count_error_upper_bound": 0,
            "sum_other_

Parameters

ParameterTypeRequiredDescription
qqueryOptionalFree-text search across record titles, abstracts and keywords. higgs
sizequeryOptionalRecords per page. Keep it modest given the 60-per-minute limit. 1
pagequeryOptionalOne-based page number. 1
experimentqueryOptionalFilter by LHC experiment: `CMS`, `ATLAS`, `LHCb`, `ALICE` or `OPERA`. CMS
typequeryOptionalRecord type such as `Dataset`, `Software`, `Documentation` or `Environment`. Dataset
yearqueryOptionalData-taking year. 2012
sortqueryOptional`mostrecent` or `bestmatch`. mostrecent

Response fields

aggregationsobject
Facet counts computed over the whole matching set — by experiment, category, year, file type and availability.
aggregations.availability.buckets[]array
How much of the archive is directly downloadable: `online`, `partial` or `on demand`.
hits.hits[]array
The matched records, each with its metadata and file manifest.
metadata.recidinteger
Stable record identifier, which is also the portal URL path.
metadata.doistring
DataCite DOI minted for the record, for citation in publications.
metadata.files[]array
File manifest with sizes and checksums. The bytes themselves live on EOS, not behind this API.

What you can build with the CERN Open Data API

  • Find the LHC datasets available for a given experiment and run year
  • Resolve a dataset DOI to its file manifest and software requirements
  • Build a teaching resource around real collision data
  • Check which records are fully online before planning a download
  • Cite an LHC dataset properly in a publication

Common errors and how to fix them

429 with Retry-After

More than 60 requests in a minute.

Fix: Honour the `Retry-After` header. The limit is per IP and enforced strictly.

Empty hits with populated aggregations

The filters excluded everything but the facets are computed first.

Fix: Loosen one filter at a time — experiment and year combinations are frequently empty.

404 on a record id

The record was superseded or the id belongs to a different portal.

Fix: CERN runs several portals (Open Data, Zenodo, CDS) with separate id spaces. Check you are using an `opendata.cern.ch` record id.

Cannot download a file

The archive is not served through this API.

Fix: Follow the file URLs in the record, which resolve to EOS or XRootD endpoints; some large records are marked `on demand` and require a request.

CERN Open Data API — frequently asked questions

Is CERN Open Data free to use?

Yes, completely. Both the metadata and the collision datasets are released under CC0, meaning no restrictions on reuse including commercial. CERN asks that you cite the dataset DOI in publications.

Can I actually download LHC collision data?

Yes, for records marked online — that was over 52,000 in the run captured here. The catalogue record lists file URLs, sizes and checksums; some very large records are marked partial or on demand instead.

Do I need special software to read the data?

Usually, yes. Most LHC formats require the experiment's analysis framework, which is why the portal also publishes software and environment records, including container images pinned to the right release. The dataset record links to the ones it needs.

What is the rate limit?

60 requests per minute per IP, and the API tells you exactly where you stand through `X-RateLimit-Remaining`. On exhaustion it returns 429 with a `Retry-After` header you should honour.

Tools that pair with this API

CERN Open Data is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.