# Open Archieven

Open Archieven van Coret Genealogie bundelt de genealogische gegevens van 200 archieven en verenigingen, vooral Nederlandse, ook Belgische en Franse. Op 16 oktober 2026 telde de statistiek-API 368.475.032 records over 199 soorten bronnen: overlijdens-, geboorte- en huwelijksakten van de burgerlijke stand, bevolkingsregisters, doop-, trouw- en begraafregisters, notariële akten en meer. Een REST-API zonder sleutel, SPARQL, OAI-PMH en bestandsexports onder CC BY 4.0.

- Uitgever: Open Archieven (Coret Genealogie)
- Gebied: Nederland · Laagste detail: persoon in een akte
- Periode: per archief en brontype verschillend · Ververst: elk kwartaal
- Toegang: Open · Licentie: CC BY 4.0 (bestandsexports); voor de API zelf geen aparte licentie gevonden
- Koppelsleutels: archiefcode (bv. saa, hua), record-identifier (GUID), naam, plaats en jaar
- Status: ok (2026-08-24) · 368.618.982 records in 200 archieven; nieuwste export
- URL: https://www.openarchieven.nl/api/docs/

## Wat kun je ermee?
- **Waar komt een achternaam vandaan?.** Zoek een naam en kijk per plaats: Huizinga geeft 60.905 vermeldingen, waarvan 5.891 met als plaats Groningen. Zet de plaatsen op een kaart.
- **Welke archieven zijn het rijkst?.** Het Brabants Historisch Informatie Centrum (25,4 miljoen records), Stadsarchief Amsterdam (24,6 miljoen) en Stadsarchief Rotterdam (23,0 miljoen) leveren het meest. Vergelijk per provincie hoeveel er online staat.
- **Historische demografie.** Tel overlijdensakten per jaar en plaats via SPARQL (PiCo-model) en zoek pieken, zoals epidemieën of oorlogsjaren. Vergelijk met het weer van die dag via related/weather.
- **Beroepen door de tijd.** stats/professions geeft de meest genoemde beroepen voor een plaats en periode (1500 tot 1960). Vergelijk perioden om te zien welke beroepen verdwijnen en welke opkomen.

## Zo verwerk je het
1. **Zoeken op naam.** records/search.json met name=, eventplace=, sourcetype= en archive_code=; number_show tot 100 per pagina en start voor de volgende pagina (hoger dan 10.000 geeft HTTP 400). Het totaal staat in response.number_found.
   `https://api.openarchieven.nl/1.1/records/search.json?name=Huizinga&eventplace=Groningen&number_show=10&lang=nl`
2. **Tellen zonder zoeken.** De statistiek-endpoints geven in één aanroep de aantallen per archief (stats/records), per brontype (stats/sources) en de lijst van archieven met ISIL-code en website (stats/archives).
   `https://api.openarchieven.nl/1.1/stats/sources.json?lang=nl`
3. **Grote vragen met SPARQL.** Drie SPARQL-ingangen (QLever): oa-a2a (records), oa-pico (personen volgens het PiCo-model, 369.474.740 PersonObservations) en oa-pico-recon (gereconstrueerde personen).
   `https://sparql.openarchieven.nl/oa-pico`
4. **Alles in één keer.** Per archief en brontype een gecomprimeerd CSV-, XML- of N-Triples-bestand onder CC BY 4.0. De laatste exports zijn van 23 en 24 augustus 2026.
   `https://www.openarchieven.nl/exports/csv/`
5. **Volledige API-beschrijving.** De API heeft een OpenAPI 3.1-beschrijving als YAML (openapi.json bestaat niet). Er is ook een MCP-server op mcp.openarchieven.nl.
   `https://api.openarchieven.nl/openapi.yaml`

## Interessante koppelingen
- Klopt het beeld uit de akten met de officiële cijfers? → [cbs-statline](https://www.opendataindex.nl/bron/cbs-statline.md) via gemeente en jaar. Tel overlijdensakten per gemeente en jaar en leg ze naast de sterftecijfers van het CBS. Verschillen laten zien welke archieven (nog) niet volledig online zijn.
- Waar vind ik meer over deze persoon? → [nationaal-archief](https://www.opendataindex.nl/bron/nationaal-archief.md) via naam en plaats. Vind iemand in Open Archieven en zoek daarna in de inventarissen van het Nationaal Archief, bijvoorbeeld in militaire of koloniale archieven.

## Vergelijkbare bronnen
- [nationaal-archief](https://www.opendataindex.nl/bron/nationaal-archief.md): Beschrijft hele archieven van de rijksoverheid (inventarissen en scans), niet de personen erin.
- [WieWasWie](https://www.wiewaswie.nl): Ook een zoekdienst voor persoonsgegevens uit Nederlandse archieven, deels uit dezelfde bronnen. Vergelijk de dekking voor jouw plaats.
- [cbs-statline](https://www.opendataindex.nl/bron/cbs-statline.md): Officiële bevolkingscijfers (geboorte, sterfte, huwelijken) vanaf ongeveer 1900, maar geen namen.

## Waar je op moet letten
- **Niet alleen Nederland.** Van de 368,5 miljoen records komen er 286,5 miljoen van Nederlandse archieven (ISIL-code NL- of website in het nl-domein). De grootste deelnemer is INSEE (Frankrijk, 27,0 miljoen), ook Reclaim The Records (VS) en Belgische rijksarchieven doen mee.
- **Afgeschermde namen.** Sommige vermeldingen tonen een voornaam als ####, bijvoorbeeld in een patiëntenregister. Reken er niet op dat elke naam volledig is.
- **Records zijn geen personen.** Eén persoon komt in veel akten voor (geboorte, huwelijk, overlijden, bevolkingsregister). Tellingen van records zeggen dus niets over het aantal mensen; gebruik daarvoor oa-pico-recon, en ook dat is een reconstructie.
- **Ongelijke dekking.** Wat erin staat hangt af van wat elk archief heeft ingevoerd en aangeleverd. Een plaats met weinig records kan gewoon een archief zijn dat (nog) niet meedoet.
- **Statistiek soms leeg.** stats/events.json gaf op 16 oktober 2026 een lege lijst. Later die dag (rond 10:00) gaven ook stats/sources.json en stats/breakdown.json niets terug; stats/records.json per archief werkte wel en kwam samen op 367.231.659 records in 209 archieven.

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

- Basis: https://api.openarchieven.nl/1.1
- Toegang: Geen sleutel. De API vraagt om een beschrijvende User-Agent en beperkt per IP-adres tot 4 verzoeken per seconde. (uit de beschrijving)
- Formaten: json, jsonp, xml, gedcom, turtle, n-triples, csv
- Omvang: 368618982 records in 200 archieven volgens stats/records.json (16 okt 2026) (getest)
- Filteren: Losse queryparameters per endpoint (name, archive_code, sourcetype, eventplace …). Voor vragen over verbanden en tellingen over alles: SPARQL op sparql.openarchieven.nl.; veld=waarde, & (twee namen), ! (uitsluiten, breakdown), SPARQL

### Endpoints
- `GET /records/search.json`: Zoeken op naam (ook twee namen met & en een jaar of periode); filters op archief, brontype, plaats, geboorteplaats, rol en land. Totaal in response.number_found.
- `GET /records/show.json`: Eén record volgens het A2A-model (archive + identifier). Ook als .xml, .gedcom, .ttl en .nt door de extensie te veranderen.
- `GET /records/match.json`: Een persoon (naam + geboortejaar) koppelen aan geboorte- en overlijdensakten.
- `GET /records/getBirths.json, /getDeaths.json, /getMarriages.json`: Geboorte-, overlijdens- en huwelijksakten op naam, jaar en plaats.
- `GET /stats/archives.json`: Alle archieven met archive_code, ISIL-code, naam en website.
- `GET /stats/records.json`: Aantal records per archief en per brontype binnen dat archief (archive_code= voor één archief).
- `GET /stats/sources.json, /stats/events.json, /stats/comments.json`: Aantallen per brontype, per gebeurtenis en opmerkingen. Gaven op 16 okt 2026 een lege lijst.
- `GET /stats/breakdown.json`: Kruistabel: tellen per archief, brontype, gebeurtenis, plaats of jaar (1500 tot 1960) met filters. Gaf op 16 okt 2026 HTTP 503 (error_code 52).
- `GET /stats/familynames.json, /stats/firstnames.json, /stats/professions.json`: Meest voorkomende achternamen, voornamen en beroepen voor een plaats en periode.
- `GET /related/weather.json`: Historisch KNMI-weer op een datum en plek (waarden in tienden, met uitleg per veld).
- `GET /related/census.json`: Nederlandse volkstellingsgegevens voor een plaats en jaar.
- `GET /transcriptions/search.json, /browse.json, /show.json`: Volledige tekst van getranscribeerde pagina's doorzoeken, bladeren per archief en inventaris, één transcriptie ophalen.
- `GET https://sparql.openarchieven.nl/{oa-a2a|oa-pico|oa-pico-recon}`: Drie SPARQL-endpoints (QLever): records (A2A), persoonsvermeldingen volgens PiCo, en gereconstrueerde personen.
- `GET https://api.openarchieven.nl/oai-pmh/?verb=…`: OAI-PMH 2.0, formaat oai_a2a, 115 sets (één per archief), datums als YYYY-MM-DD.

### Parameters
- `name`: Zoekvraag: naam, ook twee namen met & en een jaar of periode. (uit de beschrijving)
- `archive_code`: Archiefcode uit stats/archives (saa, gra, bhi …). Bij breakdown met ! ervoor = uitsluiten. (uit de beschrijving)
- `sourcetype`: Brontype (bv. 'BS Overlijden', 'DTB Dopen'). (uit de beschrijving)
- `eventplace / birthplace`: Plaats van de gebeurtenis of geboorteplaats. (uit de beschrijving)
- `relationtype`: Rol in de akte (Bride, Groom, Registered …). (uit de beschrijving)
- `country_code`: Land: nl, be, fr, sr … (uit de beschrijving)
- `number_show`: Resultaten per pagina, max 100 (breakdown: max 500 groepen). (uit de beschrijving)
- `start`: Offset, max 10.000; daarboven HTTP 400 met error_code 50. (getest)
- `sort`: 1=naam, 2=rol, 3=gebeurtenis, 4=datum, 5=plaats, 6=bron; negatief = aflopend. (uit de beschrijving)
- `group_by`: Alleen breakdown: archive, sourcetype, eventtype, place of year. (uit de beschrijving)
- `year_start / year_end`: Alleen breakdown en statistiek: 1500 tot 1960. (uit de beschrijving)
- `lang`: nl of en: taal van archiefnamen en labels. (uit de beschrijving)
- `callback`: JSONP-functienaam. (uit de beschrijving)

### Velden in de antwoorden (selectie) (11)
`response.number_found` getal, `response.docs[].personname` tekst, `response.docs[].identifier` uuid, `response.docs[].archive_code / archive` tekst, `response.docs[].eventtype / relationtype` tekst, `response.docs[].eventdate` object, `response.docs[].eventplace` lijst, `response.docs[].sourcetype` tekst, `response.docs[].url` url, `Source.SourceReference (show.json)` object, `pico:PersonObservation (SPARQL)` klasse

### Limieten en valkuilen
- 4 verzoeken per seconde per IP-adres (OpenAPI-beschrijving); meer kan in overleg. (uit de beschrijving)
- Zoeken: max 100 per pagina en offset tot 10.000 (daarboven HTTP 400, error_code 50). Voor alles: OAI-PMH of de bestandsexports. (getest)
- SPARQL: zware vragen (GROUP BY over alle triples van oa-a2a of oa-pico) gaven na 30 seconden HTTP 502 (proxy). Een LIMIT-vraag of een vraag op één onderwerp antwoordt binnen een seconde. (getest)
- stats/sources.json gaf op 16 okt 2026 na 10 seconden een lege lijst, stats/breakdown.json HTTP 503 met error_code 52 ('Service temporarily unavailable'). stats/records.json werkte en telt per archief én per brontype. (getest)
- Fouten komen als JSON met error_code en error_description; de HTTP-status klopt (400, 503). (getest)
- API-versie 1.1 gebruikt archive_code; oudere voorbeelden met archive= werken niet voor search.json. (uit de beschrijving)
- Records zijn geen personen: één persoon staat in veel akten. Gereconstrueerde personen staan in oa-pico-recon (schema:spouse, parent, children, sibling). (getest)
- Er is ook een MCP-server (mcp.openarchieven.nl) en OpenSearch-beschrijvingen per taal. (uit de beschrijving)

### Voorbeeld
```
https://api.openarchieven.nl/1.1/records/search.json?name=Huizinga&eventplace=Groningen&number_show=3&lang=nl
```

## Zo haal je het op

### curl
```bash
curl -A "mijnproject/1.0 (mailto:jij@voorbeeld.nl)" "https://api.openarchieven.nl/1.1/records/search.json?name=Huizinga&number_show=5&lang=nl"
```

### python
```python
import requests

kop = {"User-Agent": "mijnproject/1.0 (mailto:jij@voorbeeld.nl)"}   # beschrijvende user-agent, zoals de API vraagt
r = requests.get("https://api.openarchieven.nl/1.1/records/search.json",
                 params={"name": "Huizinga", "eventplace": "Groningen", "number_show": 10, "lang": "nl"}, headers=kop)
d = r.json()["response"]
print(d["number_found"])
for x in d["docs"]:
    print(x["personname"], x["eventtype"], x["archive"])
```

## Wat je ermee kunt bouwen
- [Stamboomzoeker: van één akte naar je overgrootouders](https://www.opendataindex.nl/bouwen/stamboomzoeker.md): Begin bij een geboorteakte en laat de app via de huwelijksakten generatie na generatie terugzoeken in honderden Nederlandse archieven, met een link naar de inventaris van het Nationaal Archief.


## Wat er allemaal in zit: 1.360 archieven en collecties

Alle archieven die bij Open Archieven zijn aangesloten, per land, met per brontype (doopregisters, bevolkingsregister, bidprentjes …) het aantal records, elke nacht opgehaald. Het land volgt uit de ISIL-code of, zonder ISIL, uit het domein van de website.

- Soorten: collectie 1.151, archief 209
- Met een API-aanroep op de datasetpagina: 1.360
- Zoeken: https://www.opendataindex.nl/api/catalogus/open-archieven?q=… of de MCP-functie zoek_datasets met herkomst=open-archieven
- Elke rij heeft een eigen pagina: https://www.opendataindex.nl/dataset/open-archieven/<sleutel>

### Mappen
- Nederland (1.209): Brabants Historisch Informatie Centrum (30), Stadsarchief Amsterdam (34), Stadsarchief Rotterdam (16), AlleFriezen (45), Gelders Archief (11), Het Utrechts Archief (19), Noord-Hollands Archief (19), Zeeuws Archief (50) …
- België (117): Rijksarchief België (Brussel) (8), Rijksarchief België (Leuven) (4), Stadsarchief Aalst (6), Doodsprentjes.be (2), Rijksarchief België (Gent) (6), Familiekunde Vlaanderen - regio Westkust (2), Rijksarchief België (Bergen) (4), Familiekunde Vlaanderen - regio Mandel en Leie (4) …
- Suriname (9): Nationaal Archief Suriname (9)
- Duitsland (2): Staats- und Universitätsbibliothek Hamburg Carl von Ossietzky (1), Staatsbibliothek zu Berlin - Preußischer Kulturbesitz (1)
- Frankrijk (2): L'Institut national de la statistique et des études économiques (INSEE) (2)
- Indonesië (2): Arsip Nasional Republik Indonesia (2)
- Verenigde Staten (1): New York City Municipal Archives (1)
- Land niet vastgesteld (18): Reclaim The Records (3), Geschied- en Heemkundige Kring De Goede Stede Hamont (2), Archief Gent (5), Historische Vereniging Tweestromenland (2), Erfgoedvereniging Dye van Best (2), Heemkunde kring Amalia van Solms (2), Documentatiecentrum Maaseik (2)

## Voorbeelden met echte cijfers (1)

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

- **Records in Open Archieven per Nederlands archief: het meest Brabants Historisch Informatie Centrum (25.449.700 records), dan Stadsarchief Amsterdam en Stadsarchief Rotterdam** (oktober 2026). Tabel stats/records + stats/archives. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/open-archieven-per-archief)
  - `https://api.openarchieven.nl/1.1/stats/records.json`
  - `https://api.openarchieven.nl/1.1/stats/archives.json`
