Developers
The whole dataset is served as static JSON. No key, no rate limit, no per-request compute — because every response is a file that already exists on disk.
Shape
Observations are served as compact series: one file per metric, subject and period resolution, carrying provenance once and points as [periodStart, value] pairs. A 190-year monthly series is one file with 2,300 pairs, not 2,300 near-identical objects. The catalogue endpoints say what exists and how to address it, so you can enumerate the whole dataset without downloading it.
Series file
{
"metricId": "precipitation-annual",
"subjectId": "uk-england",
"unit": "mm",
"periodKind": "year",
"basis": "reported",
"sourceId": "uk-metoffice-haduk",
"count": 190,
"from": "1836-01-01",
"to": "2025-01-01",
"points": [["1836-01-01", 856.4], ["1837-01-01", 782.1]]
}Endpoints
| Path | Returns |
|---|---|
/api/v1/index.json | Service index: counts, endpoint list, shape and licence position. |
/api/v1/datasets.json | Dataset catalogue with version, coverage and rights. |
/api/v1/datasets/{slug}.json | One dataset: full metadata, fields, changelog and citation. |
/api/v1/dictionary.json | Field definitions: unit, publisher unit, bases, comparability constraints. |
/api/v1/metrics.json | Metric registry. |
/api/v1/sources.json | Source registry with structured rights. |
/api/v1/geographies.json | Geography registry with levels and parents. |
/api/v1/entities.json | Entity registry across all families. |
/api/v1/series/index.json | Catalogue of every series: metric, subject, period kind, count, span, source. |
/api/v1/series/{metricId}--{subjectId}.json | One series: provenance once, points as [periodStart, value] pairs. |
/api/v1/observations/by-metric/{metricId}.json | Every series for a metric. |
/api/v1/observations/by-subject/{subjectId}.json | Every series for a subject. |
Identifiers
Identifiers are stable and are the contract. A metric id, geography id, entity id or dataset id does not change once published; if a record is withdrawn, its id is retired rather than reused.
| Kind | Form | Example |
|---|---|---|
| Metric | kebab-case name | river-flow-monthly-mean |
| Country | country- plus ISO 3166-1 alpha-3, lowercased | country-gbr |
| UK geography | uk- plus name | uk-england |
| Monitoring location | prefix plus the publisher’s own notation, kept verbatim | gauge-ea-8496ce69-482c-406a-a2f0-ac418ef8f099 |
| Observation | metricId::subjectId::periodKind::periodStart | precipitation-annual::uk-england::year::1976-01-01 |
Observation ids are deterministic, which is what makes re-ingestion idempotent: the same fact always gets the same id, so a re-run supersedes rather than duplicates.
Provenance fields
Provenance survives API delivery. Every observation carries the fields below, and a derived value carries its calculation record as well.
| Field | Meaning |
|---|---|
basis | How the number came to exist: measured, reported, calculated, derived, aggregated, estimated, modelled or inferred. Never assume measured. |
unit / sourceUnit | The stored unit and the unit the publisher used. These are frequently not the same quantity. |
sourceId | Resolve against /api/v1/sources.json for the licence before redistributing or using commercially. |
period | Start, end, kind and label. Kind matters: a decadal mean and a year can share a start date. |
confidence, uncertainty, qualifier | Quality signals, including publisher flags such as provisional or break in series. |
superseded, supersedes | Revision chain. Superseded records are retained, not deleted. |
derivation | On computed values: method, method version, formula, input observation ids, input source ids, calculation date and the limitations of the method. |
retrieved | When the value was taken from the source, or computed. |
Access classes
Access classes describe what Hydrionis is willing to offer. They never widen what a publisher permitted: a paid tier is subject to exactly the same upstream licences as an anonymous visitor.
| Class | Intended for | Status |
|---|---|---|
| Public | Anyone, with no account. The whole public site and the static JSON API, served as flat files. | Available now |
| Developer | Machine access for building things. Intended to carry an API key and a reasonable rate limit rather than a charge. | Designed, not yet offered |
| Research | Bulk and archival access for academic and non-commercial research, where the underlying licence permits redistribution. | Designed, not yet offered |
| Professional | Higher-volume access, derived analytics and advanced historical exports for organisations working with water data. | Designed, not yet offered |
| Enterprise | Negotiated volume, feeds, service levels and bespoke extracts, including onward commercial licensing where the source rights allow it. | Designed, not yet offered |
Only the public class exists today, and it is the whole dataset. The others are modelled in the access-policy engine so that the data layer already knows which outputs each class is eligible for — see licensing. There is no pricing, because nothing is being sold yet.
Errors, pagination and limits
There are none, and that is a design consequence rather than an omission. Every endpoint is a static file: it either exists and returns 200, or it does not and your host returns 404. There is nothing to paginate because a series file is already the unit of retrieval, and nothing to rate-limit because serving a file costs Hydrionis the same whether it happens once or a million times.
If a future authenticated tier introduces keys, quotas and error envelopes, it will be documented here as a separate delivery channel over the same data — not as a replacement for this one.
Licensing
All 23 current datasets carry licences that permit redistribution and commercial reuse, but that is a fact about today’s sources rather than a guarantee about future ones — check the dataset.
Versioning
The API path carries a major version. Datasets carry their own semantic versions and changelogs, which is where meaningful change is recorded: a recomputation with a new method changes values without changing any endpoint. Cite the dataset version, not the date you fetched it.
Dataset catalogue · Data dictionary · Ingestion diagnostics · Data enquiries