Europeana APIs
Search collections and retrieve object records through documented interfaces.
Before you use this resource
An API key is required. Image availability and rights vary between objects.
- Published by
- Europeana
- Source
- Nonprofit organisation
- Collection
- Cultural heritage
- Resource type
- API
- Coverage
- Europeana collections
- Documented formats
- JSON, IIIF
- Licence / terms
- Varies by resource
- API access
- Documented API
- Record review date
- 2026-10-22
- Last resource update
- Unknown
- Technical data audit
- Not performed
- Documentation
- Source reviewed
Documentation
Official access documentation was read on 22 October 2026: X-Api-Key is the preferred API-key header. Examples read the key locally from the environment; they were not tested with a key and credentials must not be copied into public code.
The cited page documents this record. Check the original source for terms and versions before reuse.
Request examples and access requirements
Requires a Europeana API key. Create an account and obtain a key; read it locally from the EUROPEANA_API_KEY environment variable and send it in the X-Api-Key header. Never publish it in a page, application source or shared URL. Documentation-based examples; not tested with a key.
test -n "$EUROPEANA_API_KEY" || { echo 'Set EUROPEANA_API_KEY locally' >&2; exit 1; }
curl --fail-with-body --silent --show-error --max-time 30 \
-H "X-Api-Key: $EUROPEANA_API_KEY" \
'https://api.europeana.eu/record/v2/search.json?query=Romania&rows=5' > europeana.json
jq . europeana.jsonimport json
import os
import urllib.request
key = os.environ["EUROPEANA_API_KEY"]
if not key:
raise ValueError("EUROPEANA_API_KEY is empty")
request = urllib.request.Request(
"https://api.europeana.eu/record/v2/search.json?query=Romania&rows=5", headers={"X-Api-Key": key}
)
with urllib.request.urlopen(request, timeout=30) as response:
data = json.load(response)
print(json.dumps(data, indent=2))library(httr2)
key <- Sys.getenv("EUROPEANA_API_KEY")
if (!nzchar(key)) stop("Set EUROPEANA_API_KEY locally")
response <- request("https://api.europeana.eu/record/v2/search.json?query=Romania&rows=5") |>
req_headers_redacted("X-Api-Key" = key) |>
req_timeout(30) |>
req_perform()
data <- resp_body_json(response)
str(data)-- Run the authenticated cURL example first; it saves europeana.json.
-- Keep the API key in your local environment, never in this SQL or a URL.
SELECT * FROM read_json_auto('europeana.json');Continue your research
Editorial suggestions for discovery. These links do not establish technical integration or licence compatibility.