Données vent & houle
pour développeurs
Accédez en temps réel aux mesures de 5 500+ stations vent et 22 bouées houlographes sur le littoral français. Données agrégées, normalisées, prêtes à l'emploi.
| Base URL | https://api.levent.live/api |
| Authentification | Header X-API-Key |
| Format | JSON |
| Rate limit | 120 requêtes / minute |
| Refresh stations | Toutes les 2 minutes |
| Refresh bouées | Toutes les 5 minutes |
| Historique max | 7 jours (168h) |
Authentification
Toutes les requêtes nécessitent une clé API envoyée via le header X-API-Key.
curl -H "X-API-Key: votre_cle_ici" \ https://api.levent.live/api/all-stations
Les requêtes sans clé ou avec une clé invalide retournent un 401 Unauthorized. Contactez contact@levent.live pour obtenir une clé gratuite.
Quickstart
Votre premier appel API en 2 minutes.
curl -H "X-API-Key: VOTRE_CLE" \ "https://api.levent.live/api/all-stations?online=true"
# Bretagne : lat 47.2→48.9, lon -5→-1 curl -H "X-API-Key: VOTRE_CLE" \ "https://api.levent.live/api/all-stations?bbox=47.2,-5,48.9,-1&online=true"
curl -H "X-API-Key: VOTRE_CLE" \ "https://api.levent.live/api/all-stations?history=meteofrance_29075001&hours=24"
Stations vent
/api/all-stationsRetourne toutes les stations vent avec leurs mesures temps réel, normalisées dans un schéma unique. Les données sont agrégées depuis 15 sources et rafraîchies toutes les 2 minutes.
sourcebboxonline{
"stations": [
{
"id": "29075001",
"stableId": "meteofrance_29075001",
"name": "Brest",
"lat": 48.44,
"lon": -4.41,
"wind": 12.5,
"gust": 18.3,
"direction": 220,
"temperature": 14.2,
"humidity": 68,
"pressure": 1013.2,
"altitude": 94,
"source": "meteofrance",
"ts": "2026-04-10T14:12:00Z",
"isOnline": true
}
],
"count": 5524,
"sources": {
"meteofrance": 102,
"windfrance": 16,
"pioupiou": 616,
"gowind": 329,
"gowind-native": 11,
"netatmo": 2203,
"ndbc": 6,
"diabox": 6,
"infoclimat": 56,
"ipma": 153,
"weameter": 4,
"fildair": 1,
"aprs": 12,
"weathercloud": 2009
},
"cachedAt": "2026-04-29T14:10:00Z",
"refreshInterval": 120
}Note : la clé gowind dans sources agrège Holfuy + Windguru (servies via le même endpoint amont). Au niveau des stations individuelles, le champ source reste holfuy ou windguru selon la balise.
Historique station
/api/all-stations?history={id}Retourne l'historique d'une station vent. La source est détectée automatiquement depuis le préfixe de l'identifiant.
historyrequishours{
"stationId": "meteofrance_29075001",
"name": "Brest",
"source": "meteofrance",
"hours": 24,
"count": 240,
"observations": [
{
"ts": "2026-04-09T14:12:00Z",
"wind": 8.3,
"gust": 12.1,
"direction": 210,
"temperature": 12.5
}
]
}Bouées houlographes
/api/all-buoysRetourne toutes les bouées CANDHIS avec les données houle en temps réel. Rafraîchi toutes les 5 minutes.
regionbbox{
"buoys": [
{
"id": "02911",
"name": "Ile de Batz",
"lat": 48.77,
"lon": -4.02,
"region": "Bretagne",
"depth": 60,
"hm0": 1.2,
"hmax": 2.1,
"tp": 8.5,
"direction": 280,
"spread": 40,
"seaTemp": 12.3,
"lastUpdate": "2026-04-10T14:00:00Z"
}
],
"count": 22,
"cachedAt": "2026-04-10T14:10:00Z",
"refreshInterval": 300
}Historique bouée
/api/all-buoys?history={id}Retourne 7 jours d'historique pour une bouée. Les données sont des agrégats journaliers ou semi-horaires selon la disponibilité.
historyrequis{
"buoyId": "02911",
"name": "Ile de Batz",
"region": "Bretagne",
"count": 368,
"observations": [
{
"timestamp": "2026-04-03T00:00:00Z",
"hm0": 1.1,
"hmax": 1.9,
"tp": 9.2,
"direction": 275
}
]
}Sources de données
| Source | Identifiant | Stations |
|---|---|---|
| Météo France | meteofrance | ~102 |
| Wind France | windfrance | 16 |
| Pioupiou | pioupiou | ~620 |
| Holfuy | holfuy | ~280 |
| Windguru | windguru | ~55 |
| GoWind Native | gowind-native | ~11 |
| Netatmo | netatmo | ~2 200 |
| Infoclimat | infoclimat | ~55 |
| IPMA | ipma | ~150 |
| NDBC | ndbc | ~6 |
| Diabox | diabox | ~6 |
| Weameter | weameter | ~4 |
| Fildair | fildair | 1 |
| APRS | aprs | ~12 |
| Weathercloud | weathercloud | ~2 000 |
| CANDHIS | (all-buoys) | ~22 |
Schéma des objets
idstringIdentifiant brut de la source (ex: 29075001, 12)stableIdstringIdentifiant globalement unique : <source>_<id> (ex: meteofrance_29075001)namestringNom de la stationlatnumberLatitude (décimal, WGS84)lonnumberLongitude (décimal, WGS84)windnumberVent moyen en nœuds (kts, 1 décimale)gustnumberRafale max en nœuds (kts, 1 décimale)directionnumberDirection du vent (0–360°, du Nord)sourcestringIdentifiant de la source (meteofrance, pioupiou, holfuy, windfrance, ...)tsstring | nullHorodatage ISO 8601 (UTC) de la mesureisOnlinebooleanStation considérée en ligne (données récentes)temperaturenumber | nullTempérature en °C (1 décimale)humiditynumber | nullHumidité relative en % (1 décimale)pressurenumber | nullPression en hPa (1 décimale)altitudenumber | nullAltitude en mètres au-dessus du niveau de la meridstringIdentifiant CANDHIS (ex: 02911)namestringNom de la bouéelatnumberLatitudelonnumberLongituderegionstringRégion (Bretagne, mediterranee...)depthnumber | nullProfondeur du fond (m)hm0number | nullHauteur significative (m)hmaxnumber | nullHauteur max (m)tpnumber | nullPériode pic (s)directionnumber | nullDirection houle (°)seaTempnumber | nullTempérature mer (°C)lastUpdatestringHorodatage ISO 8601Codes d'erreur
| Code | Description |
|---|---|
| 200 | OK |
| 401 | Unauthorized |
| 404 | Not Found |
| 429 | Too Many Requests |
| 502 | Bad Gateway |
Limites & bonnes pratiques
Exemples complets
curl -H "X-API-Key: VOTRE_CLE" \ "https://api.levent.live/api/all-stations?source=meteofrance&bbox=47.2,-5,48.9,-1&online=true"
import requests
import matplotlib.pyplot as plt
r = requests.get(
"https://api.levent.live/api/all-stations",
headers={"X-API-Key": "VOTRE_CLE"},
params={"history": "meteofrance_29075001", "hours": "24"}
)
data = r.json()
obs = data["observations"]
times = [o["ts"][11:16] for o in obs] # HH:MM
winds = [o["wind"] for o in obs]
gusts = [o["gust"] for o in obs]
plt.figure(figsize=(12, 4))
plt.fill_between(range(len(winds)), winds, alpha=0.3)
plt.plot(winds, label="Vent moyen")
plt.plot(gusts, label="Rafales", linestyle="--")
plt.title(f"{data['name']} — 24h")
plt.ylabel("Noeuds")
plt.legend()
plt.xticks(range(0, len(times), 10), [times[i] for i in range(0, len(times), 10)], rotation=45)
plt.tight_layout()
plt.savefig("wind_history.png")
print(f"Graph saved: {len(obs)} observations")curl -H "X-API-Key: VOTRE_CLE" \ "https://api.levent.live/api/all-buoys?region=mediterranee"