Previzio API
Version 0.1.0
API météo privée : prévisions horaires et par tranche de journée (nuit/matin/après-midi/soir) pour les communes de France métropolitaine, vigilance météo et restrictions d'eau par département, qualité de l'air et pollens par commune. Usage réservé aux sites clients munis d'une clé API.
Monitoring
▸ GET /health Statut d'ingestion
Dernier run et dernière ingestion réussie par modèle source (AROME, ARPEGE). Public, sans authentification — destiné au monitoring externe (UptimeRobot, Better Stack, ...).
200 Successful Response
{
"models": {
"arome": {
"last_run_timestamp": "2026-10-06T21:00:00Z",
"last_success_at": "2026-10-06T21:04:00Z",
"stale": false
},
"arpege": {
"last_run_timestamp": "2026-10-06T18:00:00Z",
"last_success_at": "2026-10-06T18:11:00Z",
"stale": false
},
"vigilance": {
"last_run_timestamp": "2026-10-06T21:04:00Z",
"last_success_at": "2026-10-06T21:04:00Z",
"stale": false
}
},
"status": "ok"
}
Prévisions
▸ GET /v1/forecast Prévisions météo par commune 🔒 X-API-Key requis
Renvoie les conditions actuelles, les prévisions horaires et les prévisions par jour (min/max, lever/coucher, tranches nuit/matin/après-midi/soir) pour une ou plusieurs communes. Fournir exactement un des deux paramètres `codes_insee` ou `postal_code`.
| Nom | Type | Requis | Description | Exemple |
|---|---|---|---|---|
| codes_insee | string (query) | non | Un ou plusieurs codes INSEE séparés par des virgules. | 75056,69123 |
| postal_code | string (query) | non | Un code postal (peut correspondre à plusieurs communes). | 75001 |
200 Successful Response
[
{
"code_insee": "75056",
"nom": "Paris",
"current": {
"timestamp": "2026-10-06T15:00:00Z",
"is_day": true,
"temperature": 14.2,
"apparent_temperature": 11.3,
"precipitation": 0.0,
"wind_speed": 18.5,
"wind_direction": 270,
"wind_gust": 42.0,
"cloud_cover": 40.0,
"humidity": 72.0,
"pressure": 1015.3,
"visibility": 20000,
"weather_code": 61,
"weather_icons": {
"meteocons": "rain",
"metno": "lightrain"
}
},
"hourly": [
{
"timestamp": "2026-10-06T15:00:00Z",
"is_day": true,
"temperature": 14.2,
"apparent_temperature": 11.3,
"precipitation": 0.0,
"wind_speed": 18.5,
"wind_direction": 270,
"wind_gust": 42.0,
"cloud_cover": 40.0,
"humidity": 72.0,
"pressure": 1015.3,
"visibility": 20000,
"weather_code": 61,
"weather_icons": {
"meteocons": "rain",
"metno": "lightrain"
}
}
],
"daily": [
{
"date": "2026-10-06",
"temperature_min": 9.1,
"temperature_max": 16.4,
"apparent_temperature_min": 7.4,
"apparent_temperature_max": 16.4,
"sunrise": "2026-10-06T05:57:00Z",
"sunset": "2026-10-06T17:20:00Z",
"tranches": []
}
]
}
]
422 Validation Error
{
"detail": [
{
"loc": [
""
],
"msg": "",
"type": "",
"input": null,
"ctx": {}
}
]
}
Vigilance
▸ GET /v1/vigilance Vigilance météo par département 🔒 X-API-Key requis
Renvoie les niveaux de vigilance Météo-France (vent, pluie-inondation, orages, inondation, neige-verglas, canicule, grand froid, avalanches, vagues-submersion) pour un ou plusieurs domaines, pour les échéances J (aujourd'hui) et J1 (demain). Sans paramètre, renvoie tous les domaines.
| Nom | Type | Requis | Description | Exemple |
|---|---|---|---|---|
| departements | string (query) | non | Un ou plusieurs codes de domaine séparés par des virgules : département ('2A'/'2B' pour la Corse) ou zone littorale (ex. '8310') pour vagues_submersion. Omis : tous les domaines. | 75,69 |
200 Successful Response
[
{
"domain_id": "75",
"updated_at": "2026-10-07T08:03:00Z",
"vigilance": [
{
"phenomene": "orages",
"echeance": "J",
"couleur": 2,
"couleur_libelle": "jaune"
}
]
}
]
422 Validation Error
{
"detail": [
{
"loc": [
""
],
"msg": "",
"type": "",
"input": null,
"ctx": {}
}
]
}
Qualité de l'air
▸ GET /v1/air-quality Qualité de l'air et pollens par commune 🔒 X-API-Key requis
Renvoie l'indice ATMO de qualité de l'air (global et par polluant) et l'indice pollinique (global et par taxon) pour une ou plusieurs communes, pour J et J+1 (source Atmo France). Les communes non couvertes par leur AASQA ont une liste `air` vide.
| Nom | Type | Requis | Description | Exemple |
|---|---|---|---|---|
| codes_insee | string (query) | oui | Un ou plusieurs codes INSEE séparés par des virgules. | 75056,69123 |
200 Successful Response
[
{
"code_insee": "75056",
"updated_at": "2026-10-08T15:39:18Z",
"air": [
{
"date": "2026-10-08",
"indice": 2,
"libelle": "Moyen",
"polluants": {
"no2": 2,
"o3": 2,
"pm10": 1,
"pm25": 1,
"so2": 1
},
"zone": "commune",
"source": "Airparif"
}
],
"pollen": [
{
"date": "2026-10-08",
"indice": 1,
"libelle": "Très faible",
"alerte": true,
"taxons": {
"ambroisie": 1,
"graminees": 1
},
"source": "Airparif"
}
]
}
]
422 Validation Error
{
"detail": [
{
"loc": [
""
],
"msg": "",
"type": "",
"input": null,
"ctx": {}
}
]
}
Restrictions d'eau
▸ GET /v1/water-restrictions Restrictions d'eau / sécheresse par département 🔒 X-API-Key requis
Renvoie le niveau de gravité des restrictions d'eau en vigueur (source VigiEau) pour un ou plusieurs départements : vigilance, alerte, alerte_renforcee, crise — un niveau global et un niveau par type d'eau (superficielle, souterraine, potable). Sans paramètre, renvoie tous les départements.
| Nom | Type | Requis | Description | Exemple |
|---|---|---|---|---|
| departements | string (query) | non | Un ou plusieurs codes département séparés par des virgules. Omis : tous les départements. | 75,69 |
200 Successful Response
[
{
"departement": "75",
"updated_at": "2026-10-07T08:38:00Z",
"niveau_gravite_max": "alerte",
"niveau_gravite_sup_max": "alerte",
"niveau_gravite_sou_max": "vigilance",
"niveau_gravite_aep_max": "vigilance"
}
]
422 Validation Error
{
"detail": [
{
"loc": [
""
],
"msg": "",
"type": "",
"input": null,
"ctx": {}
}
]
}
Schémas
▸ AirQuality
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| code_insee | string | oui | Code INSEE de la commune. | — |
| updated_at | string | null | non | Horodatage UTC de la dernière mise à jour (ISO 8601). | — |
| air | AirQualityDay[] | oui | Indice de qualité de l'air pour J et J+1. Vide si ni la commune ni son EPCI ne sont couverts. | — |
| pollen | PollenDay[] | oui | Indice pollinique pour J et J+1. Vide si la commune n'est pas couverte. | — |
▸ AirQualityDay
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| date | string | oui | Jour concerné (YYYY-MM-DD, heure locale). | — |
| indice | integer | null | non | Indice ATMO global : 1 bon, 2 moyen, 3 dégradé, 4 mauvais, 5 très mauvais, 6 extrêmement mauvais. | — |
| libelle | string | null | non | Libellé de l'indice. | — |
| polluants | dict[str, integer] | oui | Sous-indice (même échelle) par polluant : no2, o3, pm10, pm25, so2. | — |
| zone | string | non | 'commune' : valeur propre à la commune ; 'epci' : valeur de l'intercommunalité de la commune (repli, moins précis). | commune, epci |
| source | string | null | non | Association agréée de surveillance de la qualité de l'air (AASQA) source. | — |
▸ DailyForecast
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| date | string | oui | Date locale (fuseau de la commune), ISO 8601. | — |
| temperature_min | number | null | non | Température minimale du jour, en °C (sur les heures prévues ce jour-là : partielle pour le jour en cours). | — |
| temperature_max | number | null | non | Température maximale du jour, en °C (sur les heures prévues ce jour-là : partielle pour le jour en cours). | — |
| apparent_temperature_min | number | null | non | Température ressentie minimale du jour, en °C (mêmes heures que `temperature_min`). | — |
| apparent_temperature_max | number | null | non | Température ressentie maximale du jour, en °C (mêmes heures que `temperature_max`). | — |
| sunrise | string | null | non | Lever du soleil, horodatage UTC (ISO 8601). | — |
| sunset | string | null | non | Coucher du soleil, horodatage UTC (ISO 8601). | — |
| tranches | TranchePeriode[] | oui | Prévisions du jour agrégées par tranche (nuit/matin/après-midi/soir), chronologiques. | — |
▸ DomainVigilance
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| domain_id | string | oui | Code du domaine de vigilance : département (ex. '75', '2A'/'2B' pour la Corse) ou zone littorale (ex. '8310') pour le phénomène vagues-submersion. | — |
| updated_at | string | null | non | Horodatage UTC de la dernière mise à jour de la vigilance (ISO 8601). | — |
| vigilance | VigilancePhenomene[] | oui | Niveaux de vigilance par phénomène et échéance. | — |
▸ ForecastPoint
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| timestamp | string | oui | Horodatage UTC du point de prévision (ISO 8601). | — |
| is_day | boolean | oui | Vrai si le soleil est levé à cet instant (entre lever et coucher du jour local de la commune). | — |
| temperature | number | null | non | Température à 2m, en °C. | — |
| apparent_temperature | number | null | non | Température ressentie, en °C : refroidissement éolien si T ≤ 10 °C (et vent > 4,8 km/h), indice de chaleur si T ≥ 27 °C, sinon la température. | — |
| precipitation | number | null | non | Cumul de précipitations sur l'heure, en mm. | — |
| wind_speed | number | null | non | Vitesse du vent à 10m, en km/h. | — |
| wind_direction | integer | null | non | Direction du vent, en degrés (0-360, 0 = nord). | — |
| wind_gust | number | null | non | Rafales de vent à 10m, en km/h. | — |
| cloud_cover | number | null | non | Couverture nuageuse, en %. | — |
| humidity | number | null | non | Humidité relative, en %. | — |
| pressure | number | null | non | Pression réduite au niveau de la mer, en hPa. | — |
| visibility | integer | null | non | Visibilité minimale sur l'heure, en mètres (plafonnée à 20 000). Null au-delà de ~+48h (non fournie par ARPEGE). | — |
| weather_code | integer | null | non | Code météo WMO (seuils adaptés d'Open-Meteo, cf. _docs/weather-api-architecture.md). | — |
| weather_icons | WeatherIcons | null | non | Nom d'icône par jeu d'icônes, dérivé de weather_code et de l'heure locale (jour/nuit) de la commune. | — |
▸ HTTPValidationError
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| detail | ValidationError[] | non | — |
▸ HealthResponse
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| status | string | oui | 'ok' si tous les modèles sont à jour, 'degraded' sinon. | ok, degraded |
| models | dict[str, ModelStatus] | oui | Statut d'ingestion par source (arome, arpege, vigilance). | — |
▸ LocationForecast
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| code_insee | string | oui | Code INSEE de la commune. | — |
| nom | string | oui | Nom de la commune. | — |
| current | ForecastPoint | null | non | Conditions actuelles : point horaire de l'heure en cours (identique à `hourly[0]`). Null si aucune prévision. | — |
| hourly | ForecastPoint[] | oui | Prévisions horaires, triées chronologiquement, jusqu'à J+4/J+5. | — |
| daily | DailyForecast[] | oui | Les mêmes prévisions regroupées par jour local, avec températures min/max, lever/coucher et tranches. | — |
▸ ModelStatus
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| last_run_timestamp | string | oui | Horodatage du dernier run ingéré pour ce modèle (UTC, ISO 8601). | — |
| last_success_at | string | oui | Horodatage de la dernière ingestion réussie pour ce modèle (UTC, ISO 8601). | — |
| stale | boolean | oui | Vrai si la dernière ingestion réussie date de plus de 6h. | — |
▸ PollenDay
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| date | string | oui | Jour concerné (YYYY-MM-DD, heure locale). | — |
| indice | integer | null | non | Indice pollinique global : 1 = très faible, croissant avec le niveau (se fier au `libelle`). | — |
| libelle | string | null | non | Libellé de l'indice. | — |
| alerte | boolean | null | non | Vrai si une alerte pollen est en cours. | — |
| taxons | dict[str, integer] | oui | Indice par taxon : ambroisie, armoise, aulne, bouleau, graminees, olivier. | — |
| source | string | null | non | Source régionale des données. | — |
▸ TranchePeriode
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| periode | string | oui | Tranche de journée à quarts égaux : nuit (0-6h), matin (6-12h), apres_midi (12-18h), soir (18-24h). | nuit, matin, apres_midi, soir |
| temperature | number | null | non | Température au milieu de la tranche, en °C. | — |
| apparent_temperature | number | null | non | Température ressentie au milieu de la tranche, en °C. | — |
| wind_direction | integer | null | non | Direction du vent au milieu de la tranche, en degrés. | — |
| weather_code | integer | null | non | Code météo WMO le plus sévère de la tranche. | — |
| weather_icons | WeatherIcons | null | non | Nom d'icône par jeu d'icônes, dérivé de weather_code et de l'heure locale (jour/nuit) du milieu de la tranche. | — |
| precipitation | number | null | non | Cumul de précipitations sur la tranche, en mm. | — |
| humidity | number | null | non | Humidité relative moyenne sur la tranche, en %. | — |
| cloud_cover | number | null | non | Couverture nuageuse moyenne sur la tranche, en %. | — |
| wind_speed | number | null | non | Vitesse de vent maximale sur la tranche, en km/h. | — |
| wind_gust | number | null | non | Rafales maximales sur la tranche, en km/h. | — |
| pressure | number | null | non | Pression au niveau de la mer au milieu de la tranche, en hPa. | — |
| visibility | integer | null | non | Visibilité minimale sur la tranche, en mètres. | — |
▸ ValidationError
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| loc | string[] | oui | — | |
| msg | string | oui | — | |
| type | string | oui | — | |
| input | string | non | — | |
| ctx | object | non | — |
▸ VigilancePhenomene
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| phenomene | string | oui | Type de phénomène : vent, pluie_inondation, orages, inondation, neige_verglas, canicule, grand_froid, avalanches, vagues_submersion. | — |
| echeance | string | oui | Échéance : J (aujourd'hui) ou J1 (demain). | J, J1 |
| couleur | integer | oui | Niveau de vigilance : 1 (vert), 2 (jaune), 3 (orange), 4 (rouge). | — |
| couleur_libelle | string | oui | Libellé du niveau de vigilance. | — |
▸ WaterRestriction
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| departement | string | oui | Code département. | — |
| updated_at | string | null | non | Horodatage UTC de la dernière mise à jour (ISO 8601). | — |
| niveau_gravite_max | string | null | non | Niveau de gravité maximum, tous types d'eau confondus. Absent pour certains départements non couverts par VigiEau (ex. une partie des DOM-TOM). | vigilance, alerte, alerte_renforcee, crise |
| niveau_gravite_sup_max | string | null | non | Niveau de gravité max pour l'eau superficielle (rivières, cours d'eau). | vigilance, alerte, alerte_renforcee, crise |
| niveau_gravite_sou_max | string | null | non | Niveau de gravité max pour l'eau souterraine (nappes). | vigilance, alerte, alerte_renforcee, crise |
| niveau_gravite_aep_max | string | null | non | Niveau de gravité max pour l'eau potable (alimentation en eau potable). | vigilance, alerte, alerte_renforcee, crise |
▸ WeatherIcons
| Champ | Type | Requis | Description | Valeurs possibles |
|---|---|---|---|---|
| meteocons | string | oui | Nom d'icône dans le jeu meteocons (basmilius/meteocons). | — |
| metno | string | oui | Nom d'icône dans le jeu metno (MET Norway weathericons). | — |