Static JSON API
All forecasts and input data are available as static JSON files under the base URL. No key and no sign-up are needed. Forecast files are updated weekly on Thursdays, unless the table says otherwise.
Base URL
https://coldfront.wi7.net/api/v1/Current state
Data version Oct 13, 2026, issued on Oct 13, 2026, model: ensemble-dyn-season-holiday. The forecast covers 17 regions.
Files
| File | Content | Update | Size |
|---|---|---|---|
| index.json | Overview of all regions: state, model and short forecast per horizon (ForecastIndex). | weekly, Thursdays | small |
| regions/<id>.json | Forecast of one region with observations, seasonal norm and all horizons (ForecastFile). One file per region. | weekly, Thursdays | small |
| series.json | Cleaned weekly inputs of all regions as dense arrays; null means missing. | weekly, Thursdays | medium |
| backtest/test.json | Evaluation of the untouched test season: metrics, comparisons, peak errors and the publication decision. | once per test season | small |
| backtest/tuning.json | Tuning on earlier seasons: feature candidates and spread factor. | when the model changes | small |
| backtest/evaluation.json | Frozen evaluation protocol: seasons, metrics and thresholds. | when the protocol changes | small |
| backtest/model.json | Chosen model configuration: feature groups and spread factor. | when the model changes | small |
| geo/laender.topo.json | Boundaries of the 16 federal states as TopoJSON (simplified). | rarely | medium |
| geo/plz.json | Postal code as an object with [latitude, longitude, region ID]. The lookup runs in the browser. | rarely | medium |
| wastewater-sites.json | Wastewater monitoring sites with region, population and recorded pathogens. | when sites change | small |
| sources.json | Provenance of all data sources: URL, retrieval date, checksum and licence. | weekly, Thursdays | small |
| archive/<date>.json.gz | Archive of one forecast run as gzip-compressed JSON, one file per issue date. | weekly | small |
| holidays/<year>.json | Vacation periods per federal state and year. | yearly and when entries are added | small |
Region IDs
| ID | Name | File |
|---|---|---|
| de | Germany | regions/de.json |
| de-sh | Schleswig-Holstein | regions/de-sh.json |
| de-hh | Hamburg | regions/de-hh.json |
| de-ni | Lower Saxony | regions/de-ni.json |
| de-hb | Bremen | regions/de-hb.json |
| de-nw | North Rhine-Westphalia | regions/de-nw.json |
| de-he | Hesse | regions/de-he.json |
| de-rp | Rhineland-Palatinate | regions/de-rp.json |
| de-bw | Baden-Württemberg | regions/de-bw.json |
| de-by | Bavaria | regions/de-by.json |
| de-sl | Saarland | regions/de-sl.json |
| de-be | Berlin | regions/de-be.json |
| de-bb | Brandenburg | regions/de-bb.json |
| de-mv | Mecklenburg-Western Pomerania | regions/de-mv.json |
| de-sn | Saxony | regions/de-sn.json |
| de-st | Saxony-Anhalt | regions/de-st.json |
| de-th | Thuringia | regions/de-th.json |
Fields of the region files
The fields follow the TypeScript interfaces of the forecast-core package. These interfaces are the binding description.
| Field | Type | Meaning |
|---|---|---|
| schema_version | number | Version of the file format. The number increases when the structure changes incompatibly. |
| region | string | Region ID, e.g. de-sn. de stands for Germany as a whole. |
| level | string | Level of the region: national or bundesland (federal state). |
| indicator | string | Target quantity: ARE consultation incidence. |
| unit | string | Unit: consultations per 100,000 inhabitants and week. |
| issued | string (YYYY-MM-DD) | Issue date of the forecast. |
| data_version | string (YYYY-MM-DD) | Cut-off date of the data version used. |
| last_observed_week | string (ISO-Woche) | Last observed week that went into the forecast. |
| model | string | Name of the model of this issue. |
| gate | { shipped, reason } | Result of the quality gate. shipped is ensemble or baseline. reason is a justification in English. |
| sources | string[] | IDs of the data sources used (see sources.json). |
| attribution | string | Attribution text to be given when the data is reused. |
| observed | { iso_week, value }[] | Observed values with iso_week and value (ARE incidence). |
| normal | { week_number, q10 … q90 }[] | Seasonal norm per calendar week with quantiles q10 to q90 from earlier, cleaned seasons. |
| horizons | ForecastHorizon[] | Forecasts for 1 to 4 weeks after the last observed week. |
| horizons[].h | 1 | 2 | 3 | 4 | Horizon in weeks after the last observed week. |
| horizons[].iso_week | string (ISO-Woche) | Target week of the forecast. |
| horizons[].q10 … q90 | number | Quantiles q10, q25, q50, q75 and q90. q50 is the median. |
| horizons[].index | number | Median divided by the median of the seasonal norm for the target week. 1 equals the norm. |
| horizons[].level | normal | elevated | high | Activity level from the index: normal, elevated or high. |
Quantiles and bands
Each forecast is a set of quantiles. q50 is the median. The 50 % band runs from q25 to q75, the 80 % band from q10 to q90. The quantiles are sorted in ascending order. The bands describe the uncertainty of the model; they are not guaranteed limits.
Activity levels
The index is the median of the forecast divided by the median of the seasonal norm for the target week. From 1.25 the level is elevated, from 1.75 it is high, below that it is normal. The thresholds are start values and have not been validated empirically.
Examples
curl -s "https://coldfront.wi7.net/api/v1/index.json"const res = await fetch("https://coldfront.wi7.net/api/v1/regions/de-sn.json");
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const forecast = await res.json();
for (const h of forecast.horizons) {
console.log(h.iso_week, h.q25, h.q50, h.q75);
}{
"h": 1,
"iso_week": "YYYY-Www",
"q10": 0,
"q25": 0,
"q50": 0,
"q75": 0,
"q90": 0,
"index": 0,
"level": "normal"
}Browser access (CORS)
The files are served with the header Access-Control-Allow-Origin: *. Browser applications on other origins can therefore read them directly.
Versioning
Every forecast file carries schema_version. The current version is 1. Check this value before you process the file.
Reuse and attribution
No licence has been chosen for the program code yet. The data keep the licence of their source; details are under Data & sources. Forecasts are our own calculations based on this data and must be attributed accordingly. Use the following attribution text:
Quelle: Robert Koch-Institut, Umweltbundesamt, Deutscher Wetterdienst; eigene Berechnung