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

  1. Lancez l'API en local : yarn dev (port 3000). Pour un autre serveur, posez EAZY_API_URL.
  2. 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

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.