API v1 · OpenAPI 3.1
API и отворени подаци о водостајима Дунава
Бесплатни JSON API за водостаје Дунава: станице са праговима LDC/HDC, дневни низови, GeoJSON и уговор OpenAPI 3.1, са ограничењима захтева и примерима кода.
- Основни URL
- https://danubealert.arcm.ro/api/v1
- Аутентификација
- Authorization: Bearer <key>
Преглед
Јавни API v1 даје хидролошке податке слива Дунава у JSON формату: станице са праговима LDC/HDC, мерења и прогнозе, званичне прагове, критичне тачке пловидбе, хидролошке билтене, GeoJSON и стање извора. Цео уговор: /api/v1/openapi.json (OpenAPI 3.1).
Планови и ограничења
Анонимно (без заглавља): 60 захтева у минуту, CORS * на GET. Са интеграторским кључем (Authorization: Bearer <кључ>): 600 захтева у минуту. Кључеве бесплатно правите у свом налогу. Неисправан, непознат или опозван кључ добија 401 (WWW-Authenticate: Bearer error="invalid_token"), а не анониман приступ; опозвани кључ одмах престаје да ради.
Анонимно
60захтева / минуту
Без заглавља, CORS * на GET — довољно да испробаш сваку руту.
Бесплатан API кључ
600захтева / минуту
Authorization: Bearer <кључ>, креиран у налогу, приказан једном.
Захтевне руте
10захтева / минуту
Серије и извози ( observations, export ), по кључу или IP-у.
Пример
Последњи дневни водостај станице, преко curl-а и TypeScript-а.
curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/observations"// Данашњи водостај у Будимпешти
const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/observations?interval=daily&from=2026-10-01', {
headers: { Authorization: `Bearer ${process.env.DANUBEALERT_KEY}` },
})
const { data } = await r.json()
console.log(data.at(-1)) // { observed_at: "2026-10-21T00:00:00Z", level_cm: 468 }Крајње тачке
Све руте јавног API-ја v1, само читање ( GET ), са параметрима и захтевом спремним за покретање.
Примери по рути
Свака рута у наставку има извршиви захтев curl, JavaScript и Python, свој лимит захтева и блок `_attribution` који мораш приказати.
{
"source": "National hydrological services of the Danube basin (see /v1/meta/sources)",
"url": "https://danubealert.com/en/about",
"data_updated_at": "2026-10-21T00:00:00Z"
}{
"source": "National hydrological services of the Danube basin (see /v1/meta/sources)",
"url": "https://danubealert.com/en/about",
"license": {
"id": "CC-BY-4.0",
"name": "Creative Commons Attribution 4.0 International",
"url": "https://creativecommons.org/licenses/by/4.0/"
},
"data_updated_at": "2026-10-21T00:00:00Z"
}Станице
GET
/api/v1/alerts/confirmЛинк за потврду упозорења или дневног извештаја послат имејлом: ништа не укључује, отвара страницу за потврдуЛинк из имејла за потврду упозорења или дневног извештаја, који се шаље док налог још није доказао своју адресу. **Не укључује ништа** ( скенери линкова у фирмама сами отварају имејлове ): прегледач се води на јавну страницу `/{lang}/alerts/confirm`, са једним дугметом које шаље `POST /alerts/confirm`. Са `format=json` ( или `Accept: application/json` ) враћа само стање: 200 са `status` `pending` / `active`, 404 за неважећи токен.
Параметри
- t*query
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/alerts/confirm?t=t"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/alerts/confirm?t=t') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/alerts/confirm?t=t", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
POST
/api/v1/alerts/confirmУкључује упозорење или дневни извештај са странице за потврду ( једини корак који га активира )Једини корак који укључује претплату ( `activ = true` ): дугме странице за потврду или клијент, са токеном у упиту ( `t` ) или у телу ( `{ "t": "…" }` ). Покреће се само претплата која још чека; она коју је корисник у међувремену искључио из налога остаје искључена. Овде се доказује и адреса налога. Прегледач се води на јавну страницу претплате ( „укључена” ), клијент добија JSON ( `kind`: `alert` / `report` ).
Параметри
- tquery
GET
/api/v1/basin-precipitationЗбир падавина за 24 / 72 ч по подсливу, везан за станицу низводноКиша сакупљена у последња завршена 24 ч и 72 ч, по подсливу: тачка израчунавања је станица на горњем току, а ред је везан за станицу низводно — претходни сигнал раста нивоа тамо. Сатни низ долази из отвореног временског извора ( CC BY 4.0, види `_attribution` ); `window_end` је тренутак до којег су сати сабрани ( искључиво ), а `hours_24h` / `hours_72h` кажу колико је сати са вредношћу ушло у сваки прозор. Подслив чије је извршавање пало задржава последњи `window_end`.
Параметри
- stationquery
- riverquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/basin-precipitation"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/basin-precipitation') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/basin-precipitation", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/countries/{code}/stationsСтанице једне земљеИсти редови као `/stations`, филтрирани по земљи; сваки има блок `quality` ( референтни извор, последње очитавање, стање G3 и нула водомера ).
Параметри
- code*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/countries/HU/stations"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/countries/HU/stations') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/countries/HU/stations", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/report/todayДан у једном објекту: стање слива, шта се данас мења, станице изнад / испод прагова, прогноза за 24–72 чДневни извештај као један објект, за страницу `/{lang}/today` ( UX-9 ). `basin` је тачно агрегат „Данашња ситуација” ( укупно и редови по земљи ), `changes` је блок F4 ( варијација у 24 ч, талас Q74, одступање D2 ), `thresholds` наводи станице са свежим очитавањем испод LDC / изнад HDC ( са прагом, нивоом и разликом ), а `forecast` даје прогнозу **24–72 ч** из G2 ( извор, издање, хоризонт извора, мин–макс опсег по хоризонту и `orientativ` ), само за станице са значајном прогнозом: достиже праг или се помера најмање 25 см у односу на садашњи ниво. Списак је ограничен ( 12 по сливу, 3 по земљи ), са укупним пре ограничења; дани 4–5 ( +96 / +120 ч ) нису део извештаја.
curl curl -sS "https://danubealert.arcm.ro/api/v1/report/today"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/report/today') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/report/today", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stationsСписак станицаСтраничени списак станица, са нивоом, прогнозом и блоком `quality` у сваком реду: референтни извор, време последњег очитавања, стање G3 ( свеже / „старо очитавање” / без података ) и нула водомера ( национална / друга / апсолутна / непозната ).
Параметри
- countryquery
- riverquery
- qquery
- limitquery
- next_cursorquery
- sortquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}Станица, њени прагови LDC/HDC и одступање дана од климатологијеСтраница станице: прагови LDC/HDC, координате, свежина референтног извора ( Q88 ), покривеност низа од 365 дана ( Q94 ), блок `quality` — референтни извор, последње очитавање, стање G3 и нула водомера ( H4 ) —, блок `anomaly` — одступање данашњег нивоа од климатологије дана ( D1 ), одсутан испод 10 референтних година — и, кад станица има прогнозу, блок `forecast` са извором, `horizon_hours` ( докле прогноза досеже ) и хоризонтима са њиховим мин–макс опсегом ( G2, UX-11 §8.1 стр. 6 ).
Параметри
- slug*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/eventsИсторијске поплаве и суше једне станицеВелике поплаве и суше документоване за станицу, најновије прво ( година, затим дан врха ). Сваки ред има врсту, годину, дан врха кад га извор објави, вредност на водомеру станице са његовом јединицом, код извора, институцију и јавни URL. `?tip=viitura|seceta` филтрира врсту. Редови долазе из уредничке колекције `evenimente-istorice`, где су извор и доказ сваког реда обавезни. `_attribution.data_updated_at` је најновији датум провере враћених редова.
Параметри
- slug*path
- tipquery
- limitquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/events"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/events') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/events", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/neighborsСуседи узводно / низводно и ушћаПараметри
- slug*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/neighbors"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/neighbors') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/neighbors", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/stationsСписак станица ( v2, курсор + поља + формат )Исти подаци као `/v1/stations`, са уговором списка v2: страничење курсором типа keyset, `fields=` и `format=json|csv|geojson`. Одговор се може кеширати (`ETag`, `Last-Modified`, `Cache-Control`), а `If-None-Match` враћа `304`.
Параметри
- countryquery
- riverquery
- qquery
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/stations"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/stations') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/stations", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/wizardПодаци чаробњака за упозорења: деонице, земље, реке и претрагаДеонице Дунава од извора до ушћа ( по земљама, са распоном километара и станицама деонице ) и реке сваке земље, поређане по броју станица. Са `q` претражују се станице и реке по имену; дијакритици и ћирилица су прихваћени; `limit` ( 1–50 ) ограничава листе. Кеширано као остали каталог.
Параметри
- qquery
- limitquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/wizard"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/wizard') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/wizard", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
Мерења и прогнозе
GET
/api/v1/forecast/accuracyТачност званичних прогноза у односу на измерене вредности, по извору и периоду ( +24 / +48 / +72 ч )10/minБектест редова из `forecasts` у односу на стварна очитавања из `readings`, по извору × хоризонту ( +24 / +48 / +72 ч ): просечна апсолутна грешка ( `mae_cm` ), пристрасност са знаком ( `bias_cm`, позитивно = прогноза је била превисока ) и проценат очитавања унутар објављеног мин–макс опсега ( `within_band_pct`, само на узорцима са опсегом ). Списак има све изворе са прогнозом у прозору, укључујући оне без парова још ( `samples: 0`, `null` просеци ). Подразумевани прозор: 90 дана после циљног тренутка; свака прогноза се пореди са најближим очитавањем унутар ±6 ч, преферирајући низ издаваоца, иначе референтни извор станице. Без очитавања у прозору, прогноза не улази у узорак. Без `station`, агрегат је за цео слив; са `station`, само за тражену станицу — исте бројке као `/stations/{slug}/forecast-accuracy`. Тежак крајњи пункт: 10 захтева/мин.
Параметри
- stationquery
- daysquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/forecast/accuracy"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/forecast/accuracy') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/forecast/accuracy", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/measurementsТемпература воде, проток, температура ваздухаПараметри
- station*query
- measurequery
- fromquery
- toquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/measurements?station=budapest"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/measurements?station=budapest') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/measurements?station=budapest", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/observationsПоређење до 6 станица у једном одговору10/minИста правила као код осматрања једне станице; `interval` је подразумевано `daily`, а ограничење захтева је тешко ( 10/мин ).
Параметри
- stations*query
- fromquery
- toquery
- intervalquery
- riverquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/observations?stations=budapest%2Cmohacs"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/observations?stations=budapest%2Cmohacs') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/observations?stations=budapest%2Cmohacs", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/climatologyКлиматологија по дану у години из целог низа: просек, медијана и перцентили10/minРеферентни низ станице за сваки календарски дан ( `MM-DD` ): из целе историје дневног збира, колико је година допринело, просек, медијана, перцентили 10 / 25 / 75 / 90, минимум, максимум и стандардна девијација. Вредност дана је прво очитавање локалног дана из стварног референтног извора станице. Основа за „данас је X см испод уобичајеног за овај дан”; само одступање је у блоку `anomaly` странице станице и у `GET /summary/today`.
Параметри
- slug*path
- dayquery
- limitquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/climatology"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/climatology') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/climatology", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/dischargeНиз протока ( м³/с )Низ протока из табеле `masuratori` ( мерна величина `debit` ), који пишу националне хидролошке службе. Један одговор садржи само један извор ( `source` ): без `source=` узима се извор најновијег мерења протока, да се низови различитих извора не би мешали. `interval=hourly|daily` агрегира просеком. Тежак крајњи пункт: 10 захтева/минут анонимно.
Параметри
- slug*path
- sourcequery
- fromquery
- toquery
- intervalquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/discharge"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/discharge') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/discharge", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/forecastПрогноза станице ( где постоји )Последње издање из једног извора ( `source` ); низови различитих извора се не мешају. `horizon_hours` каже докле досеже прогноза издања ( од +48 ч до +120 ч, зависно од извора ), а сваки хоризонт има опсег мин–макс који извор објављује ( `level_min_cm` / `level_max_cm`, `null` где га не даје ). Дани 4–5 ( +96 / +120 ч ) имају `orientativ: true`: појављују се у подацима, али не покрећу упозорења — мотор користи само 24–72 ч.
Параметри
- slug*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/forecast"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/forecast') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/forecast", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/forecast-accuracyТачност прогнозе на једној станици, по извору и периоду: колико је прогноза овде добра10/minБектест прогноза издатих за станицу из путање, у односу на њена стварна очитавања, по извору × хоризонту ( +24 / +48 / +72 ч ): просечна апсолутна грешка ( `mae_cm` ), пристрасност са знаком ( `bias_cm`, позитивно = прогноза је била превисока ) и проценат очитавања унутар објављеног мин–макс опсега ( `within_band_pct` ). Списак има **све изворе са прогнозом** за станицу у прозору; извор без иједног пара прогноза–очитавање ипак се појављује, са `samples: 0` и `null` просецима. Подразумевани прозор: 90 дана после циљног тренутка; очитавање се узима на ±6 ч, преферирајући низ издаваоца, иначе референтни извор станице. Исте бројке као `/forecast/accuracy?station=<slug>`. Тежак крајњи пункт: 10 захтева/мин.
Параметри
- slug*path
- daysquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/forecast-accuracy"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/forecast-accuracy') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/forecast-accuracy", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/iceЛедене појаве из националних билтена, уједначене по станици и дануЗимске појаве објављене у националним билтенима, уједначене по станици и дану. Данашњи извор је дневни национални билтен: колона `L` ( индекс 0–8 ) постаје `code`, а `phenomena` садржи канонске енглеске кодове ( `ice_floe`, `ice_bridge`, `shore_ice`… ). Дан са индексом 0 је стварно осматрање ( `ice: false`, `code: 0`, `phenomena: []` ), не недостатак података. RO / BG / RS / HU не објављују појаву по станици у дневном билтену ( види опис извора ), па се овде не појављују.
Параметри
- slug*path
- limitquery
- fromquery
- toquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/ice"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/ice') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/ice", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/observationsНиз водостаја ( см )10/minТежак крајњи пункт за дугу анонимну историју: 10 захтева/минут ( §3 ). Подразумевано је низ **референтног извора** станице ( национални извор; `source` у телу ). Историја је слојевита: `source=` тражи низ одређеног извора, а `include_legacy=true` додаје блок `legacy` са legacy низом ( други водомер: `level_cm` како га извор објављује, `level_cm_aligned` сведен на нулу националног водомера кад је нула позната ). Низови се у `data` не мешају.
Параметри
- slug*path
- sourcequery
- include_legacyquery
- fromquery
- toquery
- intervalquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/observations"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/observations') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/observations", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/percentileПерцентил данашње вредности у односу на исти дан у последњих 30 година10/minНиво последњег дана ( прво очитавање локалног дана, референтни извор ) у односу на исти календарски дан у последњих 30 година. `percentile` је 0…100, `category` је једна од very_low / low / normal / high / very_high; испод 10 референтних година `percentile` је null. Један упит над прозором година, не један по дану.
Параметри
- slug*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/percentile"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/percentile') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/percentile", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/recordsИсторијски рекорди10/minПараметри
- slug*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/records"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/records') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/records", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/same-dayИсти дан ранијих година10/minПараметри
- slug*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/same-day"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/same-day') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/same-day", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/stations/{slug}/winterЗимске појаве и дебљина ледаЗимска осматрања објављена за станицу, најновија прво: текст појаве и/или дебљина леда у см. Без осматрања, списак је празан.
Параметри
- slug*path
- limitquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/stations/budapest/winter"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/stations/budapest/winter') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/stations/budapest/winter", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/summary/low-waterНиски водостаји: узастопни дани испод LDC, по сектору, са историјом и поређењемХидролошка суша на Дунаву, по секторима ( земље реке, од узводно ка низводно ): за изабрану годину, најдужи непрекинути период испод LDC неке станице у сектору, рекордна станица, колико је станица имало ниске водостаје, станица-дани испод LDC, историја сектора и поређење са референтним годинама 2003, 2015, 2018 и 2022. Иста правила као картица „Ниски водостаји” на `/{lang}/statistics`: прагови се оцењују на референтном очитавању из збира, а дан који недостаје прекида период.
Параметри
- yearquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/summary/low-water"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/summary/low-water') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/summary/low-water", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/summary/todayДанашња ситуација: водостаји, прагови, прогнозе, одступања дана и шта се данас мења у сливуДневни агрегат, по свакој земљи: колико је станица испод LDC и изнад HDC ( са процентом станица које имају прагове ), колико их нема очитавање у последњих 48 ч, тренд у 24 ч ( расте / опада / стабилно ) и прогноза за следећих 24–72 ч. D2 додаје одступање од уобичајеног за дан ( климатологија D1 ): колико је станица изнад p75, испод p25 или у уобичајеном опсегу, и ранг највећих стандардизованих одступања. F4 додаје „шта се данас мења”: прве значајне промене из варијације у 24 ч, из таласа Q74 ( време путовања узводно → низводно ) и из одступања D2, по сливу ( `changes` ) и по земљи ( `changes_by_country` ). Иста правила као страница `/{lang}/today`: прагови се оцењују на свежем референтном очитавању, а прогноза долази из једног издања.
curl curl -sS "https://danubealert.arcm.ro/api/v1/summary/today"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/summary/today') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/summary/today", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
Реке и земље
GET
/api/v1/countriesЗемље у сливуcurl curl -sS "https://danubealert.arcm.ro/api/v1/countries"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/countries') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/countries", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/riversРеке у сливу и број њихових станицаcurl curl -sS "https://danubealert.arcm.ro/api/v1/rivers"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/rivers') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/rivers", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/rivers/{rau}Граф реке: ушће, притоке, земљеПараметри
- rau*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/rivers/sava"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/rivers/sava') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/rivers/sava", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/countriesЗемље у сливу, страничење курсором ( v2 )Земље из регистра слива, са именима на језицима производа; курсор је ISO код.
Параметри
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/countries"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/countries') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/countries", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/riversРеке у сливу, страничење курсором ( v2 )Реке из регистра станица, са бројем станица по земљи. Курсор је нормализовани код реке; `fields=` и `format=json|csv|geojson` важе исто на свим списковима v2.
Параметри
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/rivers"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/rivers') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/rivers", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
Извози
GET
/api/v1/export/country/{cod}Извоз CSV / JSON по земљи10/minПараметри
- cod*path
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/export/country/HU"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/export/country/HU') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/export/country/HU", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
И извоз садржи `_attribution`, са лиценцом у `_attribution.license` (CC BY 4.0); прикажи `_attribution.source`, `_attribution.url` и лиценцу поред датотеке.
GET
/api/v1/export/dailyДневни извоз CSV / JSON по земљи10/minДатотека претходног дана за једну земљу слива, са лиценцом CC BY 4.0 и навођењем извора. CSV их ставља у заглавља `Link`, `X-Attribution*` и `X-License*`; JSON у `_attribution` ( укључујући `license` ). Одговор се може кеширати: `ETag`, `Last-Modified`, `Cache-Control`, а `If-None-Match` враћа 304 са истим заглављима.
Параметри
- country*query
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/export/daily?country=HU"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/export/daily?country=HU') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/export/daily?country=HU", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
И извоз садржи `_attribution`, са лиценцом у `_attribution.license` (CC BY 4.0); прикажи `_attribution.source`, `_attribution.url` и лиценцу поред датотеке.
GET
/api/v1/export/rangeИзвоз дугих периода за истраживаче ( CSV / Parquet, страничење курсором и лиценца за сваки ред )10/minЈедна страница дневног збира (`readings_daily`) за период `from`–`to`, само из извора са изричитом лиценцом за даљу дистрибуцију ( регистар лиценци Q90 ). Сваки ред има колону `license` извора; потпуно навођење и URL услова су у манифесту `/export/range/licenses` и у заглављима `X-License` / `X-Attribution` / `Link`. Страничење иде преко `cursor` ( `X-Next-Cursor`, `Link: rel="next"` ), везаног за филтере отиском: две узастопне странице не понављају и не прескачу редове. Без кључа: највише 366 дана и 500 редова по страници; с кључем (`Authorization: Bearer`): 20 година и 5 000 редова по страници. Извоз је тежак крајњи пункт ( 10 захтева/минут ).
Параметри
- from*query
- to*query
- countryquery
- formatquery
- limitquery
- cursorquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/export/range?from=2026-01-01&to=2026-10-23"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/export/range?from=2026-01-01&to=2026-10-23') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/export/range?from=2026-01-01&to=2026-10-23", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
И извоз садржи `_attribution`, са лиценцом у `_attribution.license` (CC BY 4.0); прикажи `_attribution.source`, `_attribution.url` и лиценцу поред датотеке.
GET
/api/v1/export/range/licensesЛиценце извора и начин навођења за извоз периодаМанифест извора који се могу појавити у `GET /export/range`: само они са изричитом лиценцом за даљу дистрибуцију, сваки са институцијом, лиценцом, URL-ом услова, навођењем, извршеном трансформацијом ( дневни збир ) и датумом провере. Одбијен или непознат извор не појављује се у манифесту и не извози се.
curl curl -sS "https://danubealert.arcm.ro/api/v1/export/range/licenses"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/export/range/licenses') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/export/range/licenses", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
И извоз садржи `_attribution`, са лиценцом у `_attribution.license` (CC BY 4.0); прикажи `_attribution.source`, `_attribution.url` и лиценцу поред датотеке.
GET
/api/v1/export/river/{rau}Извоз CSV / JSON по реци10/minПараметри
- rau*path
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/export/river/sava"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/export/river/sava') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/export/river/sava", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Захтевна рута: 10 захтева/минуту, и са кључем.
И извоз садржи `_attribution`, са лиценцом у `_attribution.license` (CC BY 4.0); прикажи `_attribution.source`, `_attribution.url` и лиценцу поред датотеке.
Прагови, пловидба, билтени
GET
/api/v1/bulletinsХидролошки билтени по земљиПараметри
- countryquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/bulletins"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/bulletins') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/bulletins", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/navigationКритичне тачке и ограничења пловидбеСамо активни редови; истекла ограничења ( прошао `data_end` ) се више не враћају, а ограничења долазе само из сачуваних званичних извора. Одговор је сортиран по rkm.
Параметри
- riverquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/navigation"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/navigation') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/navigation", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/thresholdsЗванични прагови ( LDC/HDC, RNW/HSW, одбрана од поплава )Само активни прагови ( архивске вредности остају у платформи са `activ: false` и не објављују се ). `station` је slug станице; непознат slug враћа 404.
Параметри
- stationquery
- pagequery
- limitquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/thresholds"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/thresholds') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/thresholds", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/bulletinsХидролошки билтени, страничење курсором ( v2 )Национални билтени, најновији прво; `country` филтрира, курсор је id билтена.
Параметри
- countryquery
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/bulletins"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/bulletins') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/bulletins", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/navigationПловидба, један страничени списак ( v2 )Критичне тачке и активна ограничења у једном списку, сваки ред са `kind` (`punct_critic` или `restrictie` ); курсор саставља `kind:id`. Геометрија постоји на тачкама.
Параметри
- riverquery
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/navigation"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/navigation') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/navigation", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/thresholdsЗванични прагови, страничење курсором ( v2 )Активни прагови, са `station` ( slug ) као филтером; курсор је id прага. Непознат slug враћа 404, као у v1.
Параметри
- stationquery
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/thresholds"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/thresholds') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/thresholds", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
Епизоде упозорења
GET
/api/v1/episodesЈавне епизоде LDC/HDCПараметри
- countryquery
- typequery
- limitquery
- next_cursorquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/episodes"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/episodes') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/episodes", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/episodes/{id}Једна епизода упозорењаПараметри
- id*path
curl curl -sS "https://danubealert.arcm.ro/api/v1/episodes/1"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/episodes/1') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/episodes/1", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GeoJSON
GET
/api/v1/geojson/riversПловна линија Дунава + Сава / Тисаcurl curl -sS "https://danubealert.arcm.ro/api/v1/geojson/rivers"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/geojson/rivers') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/geojson/rivers", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/geojson/stationsFeatureCollection станицаПараметри
- countryquery
curl curl -sS "https://danubealert.arcm.ro/api/v1/geojson/stations"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/geojson/stations') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/geojson/stations", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
Извори и квалитет података
GET
/api/v1/meta/availabilityМесечна доступност по извору ( 12 месеци ): дани са подацима и последња преузимањаЈавни извештај „транспарентност података”: по један месец за сваки извор, за последњих 12 календарских месеци, са избројаним данима (`days`, текући месец само до јуче), данима са најмање једним очитавањем (`days_with_data`) и њиховим процентом. `last_7_days` даје извршавања и неуспехе последњих 7 дана из дневника Q62 (`runs` / `failures`; `null` = нема дневника). Само бројке: без порука о грешци, без URL-ова, без детаља станице. Без дневног збира ( инстанца без уноса ) `sources` је празан, не „0 %”.
curl curl -sS "https://danubealert.arcm.ro/api/v1/meta/availability"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/meta/availability') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/meta/availability", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/meta/healthСтање извораcurl curl -sS "https://danubealert.arcm.ro/api/v1/meta/health"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/meta/health') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/meta/health", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/meta/qualityКвалитет података по станици: сумњива очитавања и стање извораАгрегат по станици: број сумњивих очитавања ( одступање преко прага од медијане суседа ±6 ч ), последње очитавање и стање извора које га је донело ( `source_state`: `ok`, `eroare`, `stale` — „без очитавања у року” ).
curl curl -sS "https://danubealert.arcm.ro/api/v1/meta/quality"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/meta/quality') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/meta/quality", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v1/meta/sourcesПоследње ажурирање по изворуЈедан ред по извору преузимања: последње успешно извршавање, његово стање, SLA, **последње писање**, **прочитани редови и записана очитавања у последња 24 ч**, **доступност током 7 и 30 дана**, **просечно кашњење** података ( просечна старост најсвежијег очитавања, током 7 дана ) и **последња грешка** ( сачувана и после повратка извора ). `stare` може бити `cazuta` кад извор није ништа уписао више од 2 × свог интервала, а `eroare` значи да је последње извршавање пало **и** да су претходни подаци изашли из SLA-а извора; мрежни прекид док су подаци још у року оставља `stare` непромењен ( грешка остаје у `ultima_eroare` ). `uptime_7d` / `uptime_30d` су разломци 0–1; `null` = прозор се не може израчунати или `readings` тренутно није доступан, не „савршен извор”.
curl curl -sS "https://danubealert.arcm.ro/api/v1/meta/sources"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v1/meta/sources') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v1/meta/sources", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
GET
/api/v2/meta/sourcesИзвори података, страничење курсором ( v2 )Последње извршавање и квалитет током времена по извору; курсор је код извора. Поља су она из `/v1/meta/sources`.
Параметри
- limitquery
- next_cursorquery
- fieldsquery
- formatquery
curl curl -sS "https://danubealert.arcm.ro/api/v2/meta/sources"JavaScript const r = await fetch('https://danubealert.arcm.ro/api/v2/meta/sources') if (!r.ok) throw new Error(`HTTP ${r.status}`) const body = await r.json() console.log(body) console.log(body._attribution.source, body._attribution.url)Python import requests r = requests.get("https://danubealert.arcm.ro/api/v2/meta/sources", timeout=30) r.raise_for_status() body = r.json() print(body) print(body["_attribution"]["source"], body["_attribution"]["url"])Лимит захтева: Анонимно: 60 захтева/минуту (клизећи прозор); са `Authorization: Bearer <кључ>`: 600/минуту.
Одговор садржи `_attribution`; прикажи `_attribution.source` и `_attribution.url` поред података.
Ограничење захтева
Клизни прозор од 60 секунди; низ мерења је захтевна крајња тачка (10 у минуту). Изнад ограничења: 429 са retry_after_seconds у телу и заглављима Retry-After и X-RateLimit-*. Одбијени захтеви не троше следећи прозор.
| Заглавље | Значење |
|---|---|
| X-RateLimit-Limit | 60 / 600 / 3000 / 10 |
| X-RateLimit-Remaining | 0 … limit |
| Retry-After | s ( 429 ) |
| 429 · retry_after_seconds | JSON |
Типизирани TypeScript клијент
Типови генерисани директно из уговора — свака рута, параметар и одговор, без ручно писаних модела.
npx openapi-typescript https://danubealert.arcm.ro/api/v1/openapi.sr.json -o danubealert.d.ts
import type { paths } from './danubealert'
type Observatii = paths['/stations/{slug}/observations']['get']['responses']['200']['content']['application/json']Извоз отворених података
Датотеке претходног дана, један ред по станици, за сваку земљу слива, у CSV или JSON формату. Одговори се могу чувати у кешу (ETag, Last-Modified, Cache-Control); лиценца и навођење извора налазе се у заглављима датотеке и у блоку _attribution у JSON-у.
- Албанија ALCSVJSON
- Аустрија ATCSVJSON
- Босна и Херцеговина BACSVJSON
- Бугарска BGCSVJSON
- Швајцарска CHCSVJSON
- Чешка CZCSVJSON
- Немачка DECSVJSON
- Хрватска HRCSVJSON
- Мађарска HUCSVJSON
- Италија ITCSVJSON
- Молдавија MDCSVJSON
- Црна Гора MECSVJSON
- Северна Македонија MKCSVJSON
- Пољска PLCSVJSON
- Румунија ROCSVJSON
- Србија RSCSVJSON
- Словенија SICSVJSON
- Словачка SKCSVJSON
- Украјина UACSVJSON
Лиценца: Creative Commons Attribution 4.0 International · Навођење извора: DanubeAlert и националне хидролошке службе · Претходни дан, у временској зони земље.
Конфигуратор виџета
Водостај станице на вашем сајту: изаберите станицу, тему, језик и брендинг, погледајте виџет уживо и копирајте iframe код у било који CMS.
Твоји виџети у три корака
Изабери врсту и подешавања — преглед и исечак се одмах ажурирају.
Преглед ( минијатура )
Исечак за уметање
<iframe
src="https://danubealert.arcm.ro/embed/v1/station?slug=achleiten&theme=auto&lang=rs&accent=00BABE"
title="Danube water level — Ахлајтен"
width="100%"
height="300"
style="border:0;max-width:640px;"
loading="lazy"
referrerpolicy="strict-origin-when-cross-origin"
></iframe>Цео уговор: /api/v1/openapi.sr.json · /api/v1/openapi.json · Подаци: националне хидролошке службе, преко DanubeAlert-а