API
Everything on the site is available as open JSON over HTTPS: the catalogue, the links for a region and the download manifest. There is no key and no sign-up. Responses allow cross-origin requests, so the API works from a browser.
Base address
https://hydrological.org/api/v1/
Endpoints
| Request | Returns |
|---|---|
GET /datasets | The catalogue, 50 per page. Filters: q, category (repeatable), source, access, scope (global or regional), bbox, sort, page, page_size (up to 200). |
GET /datasets/{slug} | One dataset with its facts, licence, citation, access methods and code examples for bbox. |
GET /datasets/{slug}/links | Links for bbox, grouped by access method: tile files, granules, API calls and provider pages. |
GET /datasets/{slug}/links.txt | Only the file URLs, one per line, for wget -i or xargs. |
GET /datasets/{slug}/manifest | A JSON file to keep with your data: dataset record, licence, citation, region and links. |
GET /categories | Categories with dataset counts. |
GET /sources | Providers with dataset counts. |
GET /search?q= | Places (basins, rivers, lakes, reservoirs, gauge stations, geocoded names, coordinates) and matching datasets. |
Regions
A region is bbox=west,south,east,north in decimal degrees (WGS 84), for example bbox=-75,-20,-50,5. Without one, the dataset endpoints use a sample region inside the dataset's coverage. Tiled datasets list at most 400 tiles per request, and NASA Earthdata products list the 100 most recent granules; the response says when a list was cut.
Examples
Tiles of Copernicus DEM GLO-30 over a region in the Alps:
curl "https://hydrological.org/api/v1/datasets/copernicus-dem-glo30/links?bbox=6,45,8,47"
Download every tile in the region:
curl -fsSL "https://hydrological.org/api/v1/datasets/copernicus-dem-glo30/links.txt?bbox=6,45,8,47" \
| xargs -n 1 curl -fLO
Find evapotranspiration datasets that cover the Nile delta:
curl "https://hydrological.org/api/v1/datasets?category=et&bbox=29.5,29.5,32.5,31.8"
In Python:
import requests
r = requests.get("https://hydrological.org/api/v1/datasets", params={"q": "soil moisture"})
for d in r.json()["results"]:
print(d["name"], "|", d["source"], "|", " | ".join(d["meta"]))
Links response
{
"bbox": [6.0, 45.0, 8.0, 47.0],
"outside": false,
"dataset": "copernicus-dem-glo30",
"groups": [
{
"type": "tiles",
"label": "GLO-30 tiles on AWS Open Data (no login)",
"auth": null,
"note": null,
"links": [
{"url": "https://copernicus-dem-30m.s3.amazonaws.com/...N45_00_E006_00_DEM.tif",
"name": "Copernicus_DSM_COG_10_N45_00_E006_00_DEM.tif", "file": true}
]
}
]
}
auth names what the provider needs before a download works: a free NASA Earthdata login, an API key or a registration. file is true for links that point at a data file.
Fair use
Responses are cached. Scripts that page through the whole catalogue or ask for links in a loop should pause between requests. The data itself comes from each provider, so their own limits and terms apply to the downloads.