Hydrological Hydrological data discovery portal
Sign in Get started

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

RequestReturns
GET /datasetsThe 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}/linksLinks for bbox, grouped by access method: tile files, granules, API calls and provider pages.
GET /datasets/{slug}/links.txtOnly the file URLs, one per line, for wget -i or xargs.
GET /datasets/{slug}/manifestA JSON file to keep with your data: dataset record, licence, citation, region and links.
GET /categoriesCategories with dataset counts.
GET /sourcesProviders 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.