# Europeana

Europeana bundelt de collecties van duizenden erfgoedinstellingen in Europa, ook Nederlandse: kunstwerken, foto's, kranten, boeken, natuurhistorische objecten. Volgens de eigen API-pagina gaat het om meer dan 3 miljoen kunstwerken, 6 miljoen foto's, 2 miljoen kranten en 12 miljoen natuurhistorische objecten. Alle metadata zijn CC0; voor de beelden geldt per object een eigen rechtenverklaring. De API's (Search, Record, IIIF, SPARQL, OAI-PMH) vragen een gratis sleutel.

- Uitgever: Europeana Foundation
- Gebied: Europa · Laagste detail: object
- Periode: per collectie verschillend · Ververst: maandelijks
- Toegang: Gratis sleutel · Licentie: Metadata CC0 1.0; beelden en media per object een eigen rechtenverklaring
- Koppelsleutels: Europeana-record-id (/<dataset>/<object>), land en instelling van herkomst
- Status: grijs · API-pagina bereikbaar; de API zelf vraagt een sleutel
- URL: https://api.europeana.eu/en

## Wat kun je ermee?
- **Nederland naast Europa.** Zoek een onderwerp (een stad, een kunstenaar, een gebeurtenis) en vergelijk wat Nederlandse instellingen bijdragen met die uit andere landen.
- **Vrij te gebruiken beelden.** Filter met reusability=open op beelden met een open licentie of publiek domein. Handig voor een artikel of infographic, maar controleer altijd de rechtenverklaring per object.
- **Kranten door de tijd.** Europeana heeft volgens de eigen pagina meer dan 2 miljoen kranten, met miljoenen pagina's als doorzoekbare tekst. Volg hoe vaak een woord voorkomt in kranten uit verschillende landen.

## Zo verwerk je het
1. **Vraag een sleutel aan.** Maak een gratis Europeana-account en vraag op de API-pagina een sleutel aan. Zonder sleutel geeft elke aanroep HTTP 401 met invalid_apikey.
   `https://api.europeana.eu/en`
2. **Zoeken.** De Search API met query= en je sleutel als wskey= of in de kop X-Api-Key (beide herkend, getest met een ongeldige sleutel). Maximaal 100 resultaten per verzoek (rows); voor diep bladeren cursor=*. Verfijnen met qf= (meerdere keren) en reusability=open|restricted|permission.
   `https://europeana.atlassian.net/wiki/spaces/EF/pages/2385739812/Search+API+Documentation`
3. **Zonder sleutel beginnen.** Wil je eerst Nederlandse museumdata zonder account proberen, begin dan bij de open API van het Rijksmuseum. Die biedt zijn gegevens ook in het Europeana Data Model (EDM) aan.
   `https://data.rijksmuseum.nl/search/collection?type=painting&imageAvailable=true`

## Interessante koppelingen
- Welke Europese stukken lijken op dit Rijksmuseum-object? → [rijksmuseum](https://www.opendataindex.nl/bron/rijksmuseum.md) via titel of objectnummer. Haal een object op via de Rijksmuseum-API en zoek in Europeana op dezelfde maker of hetzelfde onderwerp in collecties uit andere landen.

## Vergelijkbare bronnen
- [rijksmuseum](https://www.opendataindex.nl/bron/rijksmuseum.md): Eén Nederlands museum, maar volledig open zonder sleutel, met beelden via IIIF en een dagelijkse wijzigingsstroom.
- [kb-linked-data](https://www.opendataindex.nl/bron/kb-linked-data.md): Catalogusgegevens van alles wat in Nederland is gedrukt, als open SPARQL zonder sleutel.
- [NDE Datasetregister](https://datasetregister.netwerkdigitaalerfgoed.nl): Overzicht van Nederlandse erfgoeddatasets met hun eigen (vaak open) toegang, zonder sleutel te doorzoeken.

## Waar je op moet letten
- **Sleutel nodig.** Alle API's vragen een persoonlijke sleutel, gekoppeld aan een account. Daarom staan hier geen cijfers die we zelf uit Europeana hebben gehaald; de grafiek op deze pagina komt van de open Rijksmuseum-API.
- **Rechten per object.** De metadata zijn CC0, de beelden niet automatisch. Elk object heeft een eigen rechtenverklaring, van publiek domein tot alle rechten voorbehouden.
- **Afhankelijk van wat instellingen leveren.** Europeana toont wat erfgoedinstellingen aanleveren. Hoe compleet een Nederlandse collectie erin staat, verschilt per instelling; kijk voor de volledige collectie bij de instelling zelf.
- **Website niet voor scripts.** De robots.txt van europeana.eu verbiedt zoekpagina's en /api/ voor crawlers. Gebruik de API op api.europeana.eu met een sleutel, niet de website.

## API (REST (JSON), OAI-PMH 2.0, IIIF, SPARQL)

- Basis: https://api.europeana.eu
- Toegang: Search, Record, Entity en de andere REST-API's vragen een gratis sleutel bij een Europeana-account: een persoonlijke sleutel (één per account) of een projectsleutel met hogere limieten. Meesturen in de kop X-Api-Key (voorkeur) of als wskey= (verouderd). Zonder sleutel: HTTP 401 invalid_apikey. De OAI-PMH-dienst en de IIIF-manifesten werkten op 16 okt 2026 zonder sleutel. (getest)
- Formaten: json, json-ld, RDF/XML (EDM), OpenSearch RSS, xml
- Omvang: 2268 datasets (OAI-PMH-sets) bij Europeana, 16 okt 2026; de Rijksmuseum-set 90402 alleen al telt 337.641 records (getest)
- Filteren: Search API: Lucene/Solr-achtige zoekvraag in query= plus herhaalbare verfijningen qf=VELD:waarde; bereiken met [a TO b]. OAI-PMH: set (dataset) en from/until.; veld:waarde, AND, OR, NOT, [a TO b], *, qf (herhaald)

### Endpoints
- `GET /record/v2/search.json`: Search API: zoeken in alle records met query, qf, reusability, facetten en paginering (sleutel nodig).
- `GET /record/v2/{dataset}/{lokaal-id}.json`: Record API: alle metadata van één object; ook .jsonld en .rdf (sleutel nodig).
- `GET /entity/search, /entity/{type}/base/{id}, /entity/resolve`: Entity API: personen, plaatsen, begrippen en organisaties waar records naar verwijzen (sleutel nodig).
- `GET /fulltext/search.json, /fulltext/{record-id}/…`: Fulltext: doorzoekbare tekst van kranten en andere gedigitaliseerde stukken.
- `GET /oai/record?verb=…`: OAI-PMH 2.0 (versie 0.8 bèta): Identify, ListSets (datasets), ListIdentifiers, ListRecords, GetRecord; formaat edm. Werkte zonder sleutel.
- `GET https://iiif.europeana.eu/presentation/{dataset}/{lokaal-id}/manifest`: IIIF Presentation-manifest van een object (werkte zonder sleutel); beelden via https://iiif.europeana.eu/image/….
- `GET https://sparql.europeana.eu/`: SPARQL-endpoint over de EDM-gegevens; een kale GET stuurt door naar de console op api.europeana.eu/console/sparql/.
- `GET ftp://download.europeana.eu/dataset/{XML|TTL}/{dataset}.zip`: Volledige dataset als ZIP (RDF/XML of Turtle), elke zondagavond opnieuw gemaakt; anoniem FTP.

### Parameters
- `query`: Zoekterm(en), met veldzoeken (who:, what:, when:, where:, title:) en Lucene-syntaxis. (uit de beschrijving)
- `qf`: Verfijning, mag vaker: qf=where:Amsterdam, qf=TYPE:IMAGE, qf=YEAR:[1600 TO 1700]; filtervelden o.a. COUNTRY, DATA_PROVIDER, PROVIDER, RIGHTS, LANGUAGE, MIME_TYPE, IMAGE_SIZE. (uit de beschrijving)
- `reusability`: open, restricted of permission (op rechtenverklaring). (uit de beschrijving)
- `media / thumbnail / landingpage`: Alleen records met een bereikbaar mediabestand, een miniatuur of een werkende link naar de instelling. (uit de beschrijving)
- `theme`: Thematische collectie: art, newspaper, photography, map, ww1 … (uit de beschrijving)
- `profile`: Rijkdom van het antwoord: minimal, standard, rich, facets, params … (uit de beschrijving)
- `facet`: Facetten naast DEFAULT, bv. facet=LANGUAGE&profile=facets&rows=0 voor alleen tellingen. (uit de beschrijving)
- `rows`: Resultaten per verzoek, max 100 (standaard 12). (uit de beschrijving)
- `start`: Offset (eerste = 1); start + rows maximaal 1.000. (uit de beschrijving)
- `cursor`: cursor=* voor diep bladeren; volg nextCursor. Niet samen met start. (uit de beschrijving)
- `sort`: score, timestamp_created, timestamp_update, europeana_id, COMPLETENESS …, met +asc/+desc; ook random of random_SEED. (uit de beschrijving)
- `X-Api-Key`: De sleutel (voorkeur); wskey= in de URL is verouderd. (uit de beschrijving)

### Velden in het Search-antwoord (volgens de documentatie) (10)
`totalResults` getal, `items[].id` tekst, `items[].title / dcCreator` lijst, `items[].type` tekst, `items[].country / edmDataProvider / provider` lijst, `items[].year` lijst, `items[].rights` lijst, `items[].edmPreview / edmIsShownBy / edmIsShownAt` url, `nextCursor` tekst, `facets[]` lijst

### Limieten en valkuilen
- Persoonlijke sleutels: limieten tot april 2026 stapsgewijs verlaagd; projectsleutels hebben hogere limieten. Bij overschrijding HTTP 429. (uit de beschrijving)
- Search: max 100 per verzoek; gewone paginering alleen over de eerste 1.000 resultaten, daarna cursor. (uit de beschrijving)
- OAI-PMH: 300 identifiers per pagina; de resumptionToken is een dag geldig. (getest)
- Wij hebben geen sleutel en roepen de Search- en Record-API niet aan; hun beschrijving komt uit de documentatie. Het voorbeeld loopt via de OAI-PMH-dienst, die zonder sleutel antwoordt. (getest)
- pro.europeana.eu gaf 403 op onze eerlijke User-Agent; niet omzeild. De documentatie staat ook op europeana.atlassian.net/wiki (robots.txt staat /wiki/ toe). api.europeana.eu heeft geen robots.txt (doorverwijzing naar een HTML-pagina). (getest)
- Europeana houdt geen register van verwijderde records bij (OAI-PMH deletedRecord=no): oogst minstens elk half jaar opnieuw. (uit de beschrijving)
- Het Rijksmuseum staat erin als set 90402 met 337.641 records, tegen 841.378 objecten in de eigen API: Europeana heeft niet alles. Een object-id ziet eruit als http://data.europeana.eu/item/90402/AK_BR_325. (getest)

### Voorbeeld
```
https://api.europeana.eu/oai/record?verb=GetRecord&metadataPrefix=edm&identifier=http://data.europeana.eu/item/90402/AK_BR_325
```

## Zo haal je het op

### curl
```bash
curl "https://api.europeana.eu/record/v2/search.json?wskey=JOUW_SLEUTEL&query=Rembrandt&reusability=open&rows=10"
```

### python
```python
import requests

r = requests.get("https://api.europeana.eu/record/v2/search.json",
                 params={"wskey": "JOUW_SLEUTEL", "query": "Rembrandt", "reusability": "open", "rows": 10})
d = r.json()
print(d.get("totalResults"))
for item in d.get("items", []):
    print(item.get("id"), item.get("title"))
```


## Voorbeelden met echte cijfers (1)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Objecten van het Rijksmuseum met en zonder digitale afbeelding (cijfers van de Rijksmuseum-API): met afbeelding is het grootste deel, 87% in oktober 2026** (oktober 2026). Tabel search/collection. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/rijksmuseum-met-afbeelding)
  - `https://data.rijksmuseum.nl/search/collection?imageAvailable=true`
  - `https://data.rijksmuseum.nl/search/collection?imageAvailable=false`
