# 4TU.ResearchData

The data repository of the 4TU federation (TU Delft, TU Eindhoven, University of Twente and Wageningen University & Research). According to its homepage 12,494 datasets with 191,894 files and about 102 TB (16 October 2026), mostly engineering, water, coast, climate and traffic, often as NetCDF with OPeNDAP. Each dataset has a DOI with prefix 10.4121 and its own licence, usually Creative Commons. The software is called djehuty and has a Figshare-like API.

- Publisher: 4TU.ResearchData
- Area: Netherlands · Finest detail: dataset
- Period: per dataset verschillend · Refreshed: daily
- Access: Open · Licence: per dataset, meestal Creative Commons (CC BY 4.0, CC BY-SA 4.0, ook CC BY-NC-ND 4.0)
- Join keys: DOI (10.4121/…), dataset-uuid
- Status: grijs
- URL: https://data.4tu.nl

## What can you do with it?
- **Data behind the news about water.** DataCite finds 1,777 4TU DOIs with the subject Water. Many are measurement series and model output behind publications about drought, coasts and rivers.
- **Research about your city.** Search for a place name in the title: Rotterdam returns 50 DOIs (a dataset often counts twice, see limitations). That way you find the raw data behind research about your city.
- **Compute without downloading.** Many NetCDF files can be queried through OPeNDAP. You then fetch only the time span or area you need instead of gigabytes.

## How to process it
1. **Search via DataCite.** DataCite holds title, year, subject and licence of every 4TU DOI, without a robots.txt ban. Filter with prefix=10.4121 and query=.
   `https://api.datacite.org/dois?prefix=10.4121&query=subjects.subject:%22Water%22&page%5Bsize%5D=10`
2. **The djehuty API.** According to the phase 2 test the Figshare-like API works without a key: /v2/articles (list), POST /v2/articles/search with search_for, /v2/articles/<uuid> (one dataset). robots.txt bans crawlers; 4TU does not say whether single calls fall under that. The documentation is thin.
   `https://djehuty.4tu.nl/api/`
3. **The data model.** djehuty stores everything as RDF. Datasets are versions within a container with one fixed identifier; that matches the two kinds of DOI (per version and for all versions together).
   `https://djehuty.4tu.nl/knowledge-graph/`

## Interesting combinations
- Does the model match the measurement? → [rws-waterinfo](https://www.opendataindex.nl/en/bron/rws-waterinfo.md) via meetlocatie en periode. Put a model series from 4TU next to Rijkswaterstaat's official water levels or discharges for the same place and time.
- Which data belongs to this article? → [onderzoeksoutput](https://www.opendataindex.nl/en/bron/onderzoeksoutput.md) via DOI van de publicatie. Many 4TU datasets are called 'Data underlying the publication: …'. Find the article in OpenAlex and compare the conclusions with the data.

## Similar sources
- [dans-datastations](https://www.opendataindex.nl/en/bron/dans-datastations.md): The other large Dutch data repository, with more social sciences and archaeology.
- [rws-waterinfo](https://www.opendataindex.nl/en/bron/rws-waterinfo.md): Official Rijkswaterstaat measurements; 4TU holds research data, often derived from such measurements.
- [onderzoeksoutput](https://www.opendataindex.nl/en/bron/onderzoeksoutput.md): The publications of Dutch researchers (OpenAlex); 4TU has the data behind them.

## What to watch out for
- **No automated harvesting.** The robots.txt of data.4tu.nl bans all crawlers (Crawl-delay 20). We do not harvest the site and run no status check; the chart and the list on this page come from DataCite.
- **Two DOIs per dataset.** A dataset has a DOI per version (…v1) and one DOI for all versions together. DataCite therefore counts 21,770 DOIs with 10.4121 against 12,494 datasets on the homepage (16 October 2026). Merged per dataset there are 13,030 (including 610 software items and 400 collections); that list is below.
- **Some junk in the registry.** On 16 October 2026 DataCite listed 221 4TU DOIs (109 records with their version DOIs) with titles like 'College of Nursing Sciences … Admission Form Is Out' and a phone number: spam registered as collections in February and October 2026. We leave them out. Filter on resource type dataset when you count yourself.
- **Licences differ.** Besides CC BY 4.0 there are CC BY-SA and CC BY-NC-ND. NC means no commercial use; check the licence per dataset.

## API (REST (JSON:API), via DataCite)

- Base: https://api.datacite.org
- Access: No key. DataCite treats a request as 'identified' when the User-Agent contains an e-mail address or the URL has mailto=; you may then call twice as often. (tested)
- Formats: json, JSON:API, DataCite XML (attribuut xml, base64)
- Size: 21785 DOIs with prefix 10.4121 in DataCite (16 Oct 2026; per dataset one DOI per version plus one for all versions) (tested)
- Filtering: Separate parameters (prefix, resource-type-id, published) plus a free query in Elasticsearch syntax in query=.; veld:waarde, "zin", AND, OR, NOT, *

### Endpoints
- `GET /dois?prefix=10.4121`: All DOIs of 4TU.ResearchData, with filters, search, sorting and paging. Total in meta.total.
- `GET /dois/{doi}`: One DOI with all metadata: creators, description, subjects, licence, related publications, geolocation, view and download counts.
- `GET /prefixes/10.4121`: Which DataCite member owns the prefix (client delft.data4tu, provider scpr).
- `GET /clients/delft.data4tu`: The repository itself as DataCite knows it (name, website, contact).

### Parameters
- `prefix`: DOI prefix; 10.4121 is 4TU.ResearchData. (tested)
- `client-id`: Alternative to prefix: delft.data4tu. (tested)
- `query`: Search query in Elasticsearch syntax on fields: titles.title:Rotterdam, subjects.subject:"Water", publisher, creators.name; with AND, OR, quotes and *. (tested)
- `resource-type-id`: Type: dataset, software, collection, text … (dataset returned 19,266 of the 21,785 DOIs). (tested)
- `published`: Publication year, e.g. 2025 (3,049 DOIs). Also a range such as 2020-2025. (tested)
- `fields[dois]`: Return only these attributes (doi,titles,publicationYear,rightsList,url): much smaller responses. (tested)
- `page[size]`: Rows per page, 0 to 1,000 (default 25). page[size]=0 returns only the count. (tested)
- `page[number]`: Page number, up to 10,000 records in total. (from the description)
- `page[cursor]`: Start with 1 and follow links.next for anything beyond 10,000 records. (tested)
- `sort`: relevance, name, created, updated, published, with - for descending (sort=-updated = latest change first). (from the description)

### Fields in the DataCite response (selection) (12)
`attributes.doi` tekst, `attributes.titles[].title` tekst, `attributes.publicationYear` getal, `attributes.types.resourceTypeGeneral` tekst, `attributes.subjects[]` lijst, `attributes.rightsList[]` lijst, `attributes.url` url, `attributes.creators[]` lijst, `attributes.relatedIdentifiers[]` lijst, `attributes.geoLocations[]` lijst, `attributes.created / updated` datetime, `meta.total` getal

### Limits and pitfalls
- DataCite: 500 requests per 5 minutes per IP address without an e-mail address, 1,000 with an e-mail address in the User-Agent or mailto=, 3,000 with an account. Above that HTTP 429. (from the description)
- page[size] above 1,000 is silently capped at 1,000. Page numbers reach 10,000 records; page[number]=11 at 1,000 per page silently returns page 10 again. Use the cursor beyond that. (tested)
- A full page of 1,000 records without fields[dois] is about 5 MB; with a few fields 160 kB. (tested)
- The robots.txt of data.4tu.nl bans all bots (Disallow: /, Crawl-delay: 20). We therefore did not test the djehuty API itself (data.4tu.nl/v2, /v3); the example goes through DataCite. (tested)
- Each dataset has a DOI per version (…v1) and a DOI without a version. Count only DOIs without a trailing .vN, or you count twice. (tested)
- Facets (facets=) are not returned in meta; count per year or type with page[size]=0 and a filter. (tested)
- There are spam collections under 10.4121 (titles with a phone number, 2026). Filter on resource-type-id=dataset when counting. (experience)

### Example
```
https://api.datacite.org/dois?prefix=10.4121&query=titles.title:Rotterdam&resource-type-id=dataset&page%5Bsize%5D=3&fields%5Bdois%5D=doi,titles,publicationYear,rightsList,url
```

## How to fetch it

### curl
```bash
curl -g "https://api.datacite.org/dois?prefix=10.4121&query=titles.title:Rotterdam&page[size]=10&fields[dois]=doi,titles,publicationYear,rightsList"
```

### python
```python
import re, requests

# Via DataCite: data.4tu.nl verbiedt crawlers in robots.txt.
r = requests.get("https://api.datacite.org/dois", params={
    "prefix": "10.4121", "query": "titles.title:Rotterdam", "resource-type-id": "dataset",
    "page[size]": 25, "fields[dois]": "doi,titles,publicationYear,rightsList"},
    headers={"User-Agent": "mijnproject/1.0 (mailto:jij@voorbeeld.nl)"})
for x in r.json()["data"]:
    a = x["attributes"]
    if not re.search(r"\.v\d+$", a["doi"]):   # alleen de DOI voor alle versies, niet .v1, .v2 …
        print(a["publicationYear"], a["titles"][0]["title"][:70])
```


## What is in it: 13,101 datasets

Everything 4TU.ResearchData has registered with DataCite, one row per dataset (all versions merged), by field of science as DataCite assigns it. Fetched every night from DataCite, not from data.4tu.nl itself. Every row has its own page with licence, DOI and the DataCite call.

- Kinds: dataset 12,079, software 619, collectie 402, overig 1
- Last changed: 2026-10-31 (124 in the past 30 days)
- With an API call on the dataset page: 13,101
- Search: https://www.opendataindex.nl/api/catalogus/datacite-4tu?q=… or the MCP function zoek_datasets with herkomst=datacite-4tu
- Every row has its own page: https://www.opendataindex.nl/en/dataset/datacite-4tu/<key>

### Folders
- Natural sciences (8,104): Mathematics (146), Computer and information sciences (813), Physical sciences (546), Chemical sciences (340), Earth and related environmental sciences (5718), Biological sciences (541)
- Engineering and technology (2,680): Civil engineering (894), Electrical engineering, electronic engineering, information engineering (238), Mechanical engineering (771), Chemical engineering (125), Materials engineering (93), Medical engineering (120), Environmental engineering (153), Environmental biotechnology (26) …
- Medical and health sciences (249): Basic medicine (9), Clinical medicine (107), Health sciences (93), Medical biotechnology (20), Other medical sciences (20)
- Agricultural sciences (175): Agriculture, forestry and fisheries (128), Animal and dairy science (27), Veterinary sciences (5), Agricultural biotechnology (2), Other agricultural sciences (13)
- Social sciences (656): Psychology (178), Economics and business (162), Educational sciences (63), Sociology (53), Law (11), Political science (35), Social and economic geography (122), Media and communications (32)
- Humanities (93): History and archaeology (10), Languages and literature (9), Philosophy, ethics and religion (9), Arts (arts, history of arts, performing arts, music) (60), Other humanities (5)
- No field of science assigned (1,144)

## Examples with real figures (1)

For each example the finding, the reference date and the call that fetches exactly these figures.

- **4TU.ResearchData DOIs per publication year, counted in DataCite (prefix 10.4121): 3,047 DOIs in 2025, 9.1 times as much as in 2013** (2025). Table DOI-voorvoegsel 10.4121. [Example](https://www.opendataindex.nl/en/voorbeeld/4tu-dois-per-jaar)
  - `https://api.datacite.org/dois?prefix=10.4121&published=2025&page%5Bsize%5D=1&fields%5Bdois%5D=doi`
