Documentation Eazy API
Données publiques françaises propres et croisées, via une seule clé API. Ce quickstart fait un premier appel réussi en moins de cinq minutes.
Quickstart : les bornes de recharge autour de la tour Eiffel
- Lancez l'API en local :
yarn dev(port 3000). Pour un autre serveur, posezEAZY_API_URL. - Collez cette commande : elle utilise la clé de démonstration publique (100 appels par jour et par adresse IP).
examples/curl/quickstart.sh
curl -s "${EAZY_API_URL:-http://localhost:3000}/v1/irve/bornes?lat=48.8584&lng=2.2945&rayon_m=5000&limit=3" \
-H "Authorization: Bearer ez_demo_PwMBLx4CePg3dA5pIsbB3Hftud1lUbSt"
Résultat : 200, trois bornes triées par distance_m, et meta.sources : chaque entrée porte la source réelle du jeu et sa licence (Licence Ouverte 2.0 pour la base nationale, ODbL ou autre pour certains producteurs).
Réponse complète (réelle, figée)
{
"data": [
{
"id": "FRV75EPX07145",
"id_station": "FRV75PPX0714",
"nom_station": "Paris | Rue de Martignac 2",
"adresse": "2 Rue de Martignac, 75007 Paris",
"code_insee_commune": "75107",
"departement": "75",
"operateur": {
"nom": "TotalEnergies Marketing France",
"slug": "totalenergies-marketing-france"
},
"amenageur": {
"nom": "TotalEnergies Marketing France",
"siren": "531680445"
},
"puissance_kw": 7,
"prises": {
"type2": true,
"combo_ccs": false,
"chademo": false,
"ef": true,
"autre": false
},
"position": {
"lat": 48.85936,
"lng": 2.31953
},
"distance_m": 1839.8,
"qualite_score": 100,
"licence_groupe": "lov2",
"jeu_id": "6818bce2d9af175f6e01a1b2"
},
{
"id": "FRSAEE75108003121",
"id_station": "FRSAEP75108003A1",
"nom_station": "SAEMES - Parking Madeleine-Tronchet - Niveau 6",
"adresse": "21 Place de la Madeleine, 75008 PARIS",
"code_insee_commune": "75108",
"departement": "75",
"operateur": {
"nom": "Bouygues Energies & Services",
"slug": "bouygues-energies-services"
},
"amenageur": {
"nom": "Saemes",
"siren": null
},
"puissance_kw": 7.36,
"prises": {
"type2": true,
"combo_ccs": false,
"chademo": false,
"ef": true,
"autre": false
},
"position": {
"lat": 48.87113,
"lng": 2.3242
},
"distance_m": 2598.6,
"qualite_score": 90,
"licence_groupe": "notspecified",
"jeu_id": "64c28634468d0d94dd98405e"
},
{
"id": "FRPKGE75117002101",
"id_station": "FRPKGP75117002",
"nom_station": "Villiers",
"adresse": "14 Avenue de Villiers 75017 Paris FRANCE",
"code_insee_commune": null,
"departement": "75",
"operateur": {
"nom": "GROUPE INDIGO",
"slug": "groupe-indigo"
},
"amenageur": {
"nom": "GROUPE INDIGO",
"siren": null
},
"puissance_kw": 7.4,
"prises": {
"type2": true,
"combo_ccs": false,
"chademo": false,
"ef": false,
"autre": false
},
"position": {
"lat": 48.88195,
"lng": 2.31387
},
"distance_m": 2979.6,
"qualite_score": 80,
"licence_groupe": "odc-odbl",
"jeu_id": "689c957abf34e799e1bf365a"
}
],
"meta": {
"count": 3,
"next_cursor": "eyJ2IjoxLCJkIjoyOTc5LjYxMTcwMDk1LCJpIjoiRlJQS0dFNzUxMTcwMDIxMDEiLCJmIjoiMzlkMzFlNzg3MTA0ZDMxNiJ9",
"sources": [
{
"name": "Base nationale des points de recharge pour véhicules électriques (IRVE) — consolidation du Point d'Accès National",
"url": "https://www.data.gouv.fr/datasets/685965d0ab901919e14a4a1b/",
"licence": "Licence Ouverte 2.0",
"updated_at": "2026-11-09"
},
{
"name": "Alizé — Bornes de recharge pour véhicules électriques - Alizé et ses réseaux partenaires",
"url": "https://www.data.gouv.fr/datasets/64c28634468d0d94dd98405e/",
"licence": "Licence non précisée par le producteur — republiée par le PAN sous Licence Ouverte 2.0",
"updated_at": "2026-10-15"
},
{
"name": "Indigo Group — Indigo-Open-Data-IRVE",
"url": "https://www.data.gouv.fr/datasets/689c957abf34e799e1bf365a/",
"licence": "Open Database License (ODbL) 1.0 — producteur : Indigo-Open-Data-IRVE — via Base nationale IRVE (PAN), Licence Ouverte 2.0 — partage à l'identique applicable à la base dérivée",
"licence_url": "https://opendatacommons.org/licenses/odbl/1-0/",
"updated_at": "2026-11-09"
}
]
}
}Le même appel en JavaScript (fetch) et en Python (requests)
examples/javascript/quickstart.mjs
// Node 18+ : node quickstart.mjs (EAZY_API_URL change le serveur, défaut http://localhost:3000)
const base = process.env.EAZY_API_URL ?? 'http://localhost:3000'
const url = `${base}/v1/irve/bornes?lat=48.8584&lng=2.2945&rayon_m=5000&limit=3`
const res = await fetch(url, {
headers: { Authorization: 'Bearer ez_demo_PwMBLx4CePg3dA5pIsbB3Hftud1lUbSt' },
})
const corps = await res.json()
console.log(JSON.stringify(corps, null, 2))
if (!res.ok) process.exit(1)
examples/python/quickstart.py
# python quickstart.py (pip install requests ; EAZY_API_URL change le serveur, défaut http://localhost:3000)
import json
import os
import sys
import requests
base = os.environ.get("EAZY_API_URL", "http://localhost:3000")
res = requests.get(
f"{base}/v1/irve/bornes",
params={"lat": 48.8584, "lng": 2.2945, "rayon_m": 5000, "limit": 3},
headers={"Authorization": "Bearer ez_demo_PwMBLx4CePg3dA5pIsbB3Hftud1lUbSt"},
timeout=30,
)
print(json.dumps(res.json(), indent=2))
if not res.ok:
sys.exit(1)
Contrôler la conformité de vos points (POST)
POST /v1/irve/conformite reçoit de 1 à 1000 identifiants et renvoie le statut de chacun (conforme, incomplet, non_publie).
examples/curl/conformite.sh
curl -s -X POST "${EAZY_API_URL:-http://localhost:3000}/v1/irve/conformite" \
-H "Authorization: Bearer ${EAZY_API_KEY:-ez_demo_PwMBLx4CePg3dA5pIsbB3Hftud1lUbSt}" \
-H "Content-Type: application/json" \
-d '{"ids": ["FRS35E352340011", "FRZZZE000000001"]}'
examples/javascript/conformite.mjs
// Node 18+ : node conformite.mjs (EAZY_API_URL et EAZY_API_KEY changent le serveur et la clé)
const base = process.env.EAZY_API_URL ?? 'http://localhost:3000'
const cle = process.env.EAZY_API_KEY ?? 'ez_demo_PwMBLx4CePg3dA5pIsbB3Hftud1lUbSt'
const res = await fetch(`${base}/v1/irve/conformite`, {
method: 'POST',
headers: { Authorization: `Bearer ${cle}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ ids: ['FRS35E352340011', 'FRZZZE000000001'] }),
})
const corps = await res.json()
console.log(JSON.stringify(corps, null, 2))
if (!res.ok) process.exit(1)
examples/python/conformite.py
# python conformite.py (pip install requests ; EAZY_API_URL et EAZY_API_KEY changent le serveur et la clé)
import json
import os
import sys
import requests
base = os.environ.get("EAZY_API_URL", "http://localhost:3000")
cle = os.environ.get("EAZY_API_KEY", "ez_demo_PwMBLx4CePg3dA5pIsbB3Hftud1lUbSt")
res = requests.post(
f"{base}/v1/irve/conformite",
json={"ids": ["FRS35E352340011", "FRZZZE000000001"]},
headers={"Authorization": f"Bearer {cle}"},
timeout=30,
)
print(json.dumps(res.json(), indent=2))
if not res.ok:
sys.exit(1)
Règles communes
- Authentification :
Authorization: Bearer <clé>. Sans clé : 401missing_api_key; clé inconnue ou révoquée : 401invalid_api_key. - Sur les routes /v1/irve/*, un paramètre inconnu ou répété est refusé en 400
invalid_parameter: une faute de frappe ne renvoie jamais un résultat non filtré. Un nom de paramètre vide (?=1) est refusé de même, avec le message: paramètre inconnu. - /v1/health, /v1/me et /v1/openapi.json ignorent les paramètres de requête (
?x=1est ignoré). - Quota : chaque appel authentifié compte, y compris ceux qui répondent 400 ou 404. La clé de démonstration est limitée à 100 appels par jour et par adresse IP. En-têtes de réponse :
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Reset; à l'épuisement, 429quota_exceededavecRetry-After. - Cache : les réponses authentifiées portent
Cache-Control: private, no-store.GET /v1/openapi.jsonest public, sans clé et sans décompte. - CORS :
Access-Control-Allow-Origin: *(méthodes GET, HEAD, OPTIONS, et POST sur/v1/irve/conformite). - Une barre finale (
/v1/irve/bornes/) est redirigée en 308 vers l'URL sans barre. - Chaque réponse de données porte
meta.sources: une entrée par source réelle des données renvoyées, avec sa licence. La base nationale IRVE est en Licence Ouverte 2.0 ; selon les points, s'y ajoute le jeu du producteur sur data.gouv.fr avec sa propre licence (par exemple ODbL, dont le partage à l'identique s'applique à votre base dérivée). Citez ces entrées dans votre produit.
Les codes d'erreur sont détaillés sur /docs/erreurs.
Référence
La description OpenAPI 3.1 est servie par /v1/openapi.json (sans clé). La référence interactive ci-dessous est affichée par Scalar, servi par ce site (version 1.78.1, intégrité vérifiée, aucun appel vers un tiers) : sans JavaScript, le quickstart et la page des erreurs restent complets.