Mediu v1 / Avertizari
Active warnings
The weather warnings in force right now, from MeteoAlarm. On most days the answer is empty — that is the normal state, not an error.
GET
https://oneapi.ro/api/mediu/v1/avertizari
Query parameters
NameTypeDescriptionAccepted values
laoptional
string | null
The moment you are asking about (ISO 8601). Without it, the question is "what is active NOW".
e.g. 2026-09-06T10:00:00Ze.g. 2024-06-15
judetoptional
string | null
The county vehicle code (e.g.
CJ).
max 4 car.
sirutaoptional
integer | null
The SIRUTA code of an administrative unit — resolved to its county.
1
niveloptional
integer | null
Only that exact level (2 yellow, 3 orange, 4 red).
1 – 4
nivel_minoptional
integer | null
Only from this level upwards — the filter you want for alerting.
1 – 4
tipoptional
integer | null
The phenomenon type code, from
/avertizari/nomenclator.
1 – 20
include_anulateoptional
boolean | null
1 also includes withdrawn warnings. Excluded by default.
e.g. true
How it behaves
- Validity is COMPUTED, not stored. We never delete anything, so "active" is a query over the validity window against the requested moment. A warning leaves the list exactly when it expires, with no clean-up.
- The
laparameter makes the route answer about the PAST: "what was in force on Tuesday at 10:00". The source cannot answer that — its feed holds only the present. - The "now" response is cached for at most 10 minutes — the same gap as between two source refreshes. A warning that expires in that window can still appear, so compare
valabilitate.pana_lawith your clock before showing "orange code". inregistrari: 0is the USUAL result. On most days there is no warning anywhere in Romania — an empty response does not mean something broke.nivel_maximis the figure you want if you display a single signal: the worst level among the valid warnings.
What it is for
- Show on a dashboard whether any warning is in force, with the worst level.
- Trigger an internal workflow when an orange or red code appears in a county where you operate.
- Check what was in force at a past moment, for a claim file or a dispute.
Response structure
All fields below live inside data.
FieldTypeDescription
moment
string
The moment validity was computed against.
acum
boolean
true if you did not pass la, so the answer is about the present.
inregistrari
integer
How many warnings are valid then.
nivel_maxim
null
The worst level among them;
null if there are none.
avertizari
array
How many warnings we have captured in total.
observatie
string
A note on how to read the response: a computation convention or a limit of the data.
sursa
object
The source: MeteoAlarm (EUMETNET), the channel through which the Romanian meteorological service distributes its warnings in standardised CAP format. Includes issuer and licence.
sursa.nume
string
Name of the official source.
sursa.url
string
Public address of the source.
sursa.emitent
string
The institution that issued the information.
sursa.licenta
string
The licence under which the source allows reuse.
sursa.observatie
string
What to know about the source before using the data.
avertizari[].identificator
string
The CAP identifier, globally unique. It is the key you use to request the detail and to follow the same warning across requests.
avertizari[].tip_mesaj
string
Alert, Update or Cancel. A cancellation deletes nothing here — that a warning existed and was withdrawn is itself information.
avertizari[].anulata
boolean
Whether the warning was withdrawn by a later message.
avertizari[].inlocuieste
array
The identifiers of the warnings this message supersedes.
avertizari[].tip
object
The phenomenon type: numeric code plus the source label (
wind, rain, snow-ice…).
avertizari[].nivel
object
The awareness level: code, colour (
yellow / orange / red) and the CAP severity. The code is stable, the label is readable — filter on the code.
avertizari[].urgenta
string
How soon the phenomenon is expected (
Immediate, Expected, Future).
avertizari[].certitudine
string
How certain it is to occur (
Observed, Likely, Possible).
avertizari[].titlu
string
The official headline, in Romanian, exactly as issued by the meteorological service.
avertizari[].descriere
string
The warning text. Neither translated nor altered by us.
avertizari[].instructiuni
null
The issuer's recommendations, where present.
avertizari[].valabilitate.de_la
string
When the phenomenon starts (CAP
onset). When the source omits it, the effective time is used.
avertizari[].valabilitate.pana_la
string
When the warning expires.
avertizari[].valabilitate.stare
string
activa, viitoare, incheiata or anulata. COMPUTED on every request against the clock — not a column that could fall behind.
avertizari[].valabilitate.ore_ramase
null
How many hours the warning still has to run;
null once it has ended.
avertizari[].judete
array
The counties covered: the source NUTS3 code, its own area name, plus our county with vehicle code and SIRUTA.
avertizari[].emis_la
string
When it was issued by the meteorological service.
avertizari[].emitent
string
Who issued it —
ANM.
avertizari[].vazuta_prima_data
string
When WE first captured it. The gap from
emis_la shows how quickly we caught it.
Response examples
GEThttps://oneapi.ro/api/mediu/v1/avertizari
{
"data": {
"moment": "2026-10-06T23: 39: 45+03: 00",
"acum": true,
"inregistrari": 0,
"nivel_maxim": null,
"avertizari": [],
"observatie": "Nicio avertizare valabilă la momentul cerut. E rezultatul obișnuit: în cele mai multe zile nu există avertizări.",
"sursa": {
"nume": "MeteoAlarm (EUMETNET) — avertizări emise de Administrația Națională de Meteorologie",
"url": "https://meteoalarm.org",
"emitent": "Administrația Națională de Meteorologie (ANM)",
"licenta": "MeteoAlarm: CC BY 4.0, cu atribuire către MeteoAlarm și ANM.",
"observatie": "Avertizarea e emisă de ANM; MeteoAlarm e canalul EUMETNET prin care e distribuită în format CAP standardizat. Textul e cel oficial al ANM, netradus și nemodificat de noi."
}
}
}
GEThttps://oneapi.ro/api/mediu/v1/avertizari?nivel_min=3
{
"data": {
"moment": "2026-10-06T23: 39: 45+03: 00",
"acum": true,
"inregistrari": 0,
"nivel_maxim": null,
"avertizari": [],
"observatie": "Nicio avertizare valabilă la momentul cerut. E rezultatul obișnuit: în cele mai multe zile nu există avertizări.",
"sursa": {
"nume": "MeteoAlarm (EUMETNET) — avertizări emise de Administrația Națională de Meteorologie",
"url": "https://meteoalarm.org",
"emitent": "Administrația Națională de Meteorologie (ANM)",
"licenta": "MeteoAlarm: CC BY 4.0, cu atribuire către MeteoAlarm și ANM.",
"observatie": "Avertizarea e emisă de ANM; MeteoAlarm e canalul EUMETNET prin care e distribuită în format CAP standardizat. Textul e cel oficial al ANM, netradus și nemodificat de noi."
}
}
}
GEThttps://oneapi.ro/api/mediu/v1/avertizari?la=2026-09-06T10:00:00Z
{
"data": {
"moment": "2026-09-06T10: 00: 00+03: 00",
"acum": false,
"inregistrari": 2,
"nivel_maxim": 2,
"avertizari": [
{
"identificator": "2.49.0.0.642.0.RO.2609050946.cdf52e901d453e09",
"tip_mesaj": "Alert",
"status": "Actual",
"anulata": false,
"anulata_la": null,
"inlocuieste": [],
"tip": {
"cod": 1,
"nume": "wind"
},
"nivel": {
"cod": 2,
"nume": "yellow",
"severitate": "Moderate"
},
"urgenta": "Future",
"certitudine": "Likely",
"titlu": "Vântul va avea intensificări, cu viteze de 50-70 km/h.",
"descriere": "Vântul va avea intensificări, cu viteze de 50-70 km/h.",
"instructiuni": null,
"valabilitate": {
"de_la": "2026-09-06T09: 00: 00+03: 00",
"pana_la": "2026-09-06T21: 00: 00+03: 00",
"stare": "incheiata",
"ore_ramase": null
},
"judete": [
{
"nuts3": "RO212",
"zona": "Botoșani",
"judet": "Botoșani",
"judet_cod": "BT",
"cod_siruta": 74
}
],
"emis_la": "2026-09-05T10: 09: 53+03: 00",
"emitent": "ANM",
"vazuta_prima_data": "2026-09-07T01: 57: 40+03: 00",
"web": "http://www.meteoromania.ro"
}
],
"observatie": "Valabilitatea e calculată față de `moment`, nu memorată ca stare. O avertizare dispare din listă exact când expiră.",
"sursa": {
"nume": "MeteoAlarm (EUMETNET) — avertizări emise de Administrația Națională de Meteorologie",
"url": "https://meteoalarm.org",
"emitent": "Administrația Națională de Meteorologie (ANM)",
"licenta": "MeteoAlarm: CC BY 4.0, cu atribuire către MeteoAlarm și ANM.",
"observatie": "Avertizarea e emisă de ANM; MeteoAlarm e canalul EUMETNET prin care e distribuită în format CAP standardizat. Textul e cel oficial al ANM, netradus și nemodificat de noi."
}
}
}
GEThttps://oneapi.ro/api/mediu/v1/avertizari?la=2024-06-15
{
"data": {
"moment": "2024-06-14T21: 00: 00+03: 00",
"acum": false,
"inregistrari": 0,
"nivel_maxim": null,
"avertizari": [],
"observatie": "Nicio avertizare valabilă la momentul cerut. E rezultatul obișnuit: în cele mai multe zile nu există avertizări.",
"sursa": {
"nume": "MeteoAlarm (EUMETNET) — avertizări emise de Administrația Națională de Meteorologie",
"url": "https://meteoalarm.org",
"emitent": "Administrația Națională de Meteorologie (ANM)",
"licenta": "MeteoAlarm: CC BY 4.0, cu atribuire către MeteoAlarm și ANM.",
"observatie": "Avertizarea e emisă de ANM; MeteoAlarm e canalul EUMETNET prin care e distribuită în format CAP standardizat. Textul e cel oficial al ANM, netradus și nemodificat de noi."
}
}
}
Error codes
| Code | Slug | When it occurs |
|---|---|---|
| 401 | neautentificat | Token missing, invalid, expired or revoked. |
| 403 | feature_indisponibil | The current plan does not include the feature the route depends on. |
| 422 | validare | An undeclared parameter or a value that fails validation (la, judet, siruta, nivel, nivel_min, tip, include_anulate). The offending field is in detalii. |
| 429 | cota_depasita | The plan's monthly quota has been exceeded (see Retry-After). |
All errors share the same shape. eroare.cod is stable and is the value you should branch on in code — not the text in mesaj, which may change.
{
"eroare": {
"cod": "validare",
"mesaj": "An undeclared parameter or a value that fails validation (la, judet, siruta, nivel, nivel_min, tip, include_anulate). The offending field is in detalii.",
"detalii": {
"la": [
"The value sent does not satisfy the parameter rule."
]
}
}
}