Section 09 sur 13
Mobilité
Vélos et trottinettes en libre-service, bornes de recharge et évènements
routiers, à côté des données de transport et sous la même clé. URL de base
https://api.quavern.net/v1/mobility. Toutes les routes sont en GET. Chaque
identifiant ci-dessous fonctionne — collez-le, il répond.
C'est un pilote sur cinq villes, pas une couverture nationale, et ces villes ont été choisies parce que Quavsit sert déjà le réseau de transport de chacune : une réponse sur un arrêt et une réponse sur un vélo parlent du même endroit.
| Ville | Réseau | En station | Libre-service |
|---|---|---|---|
| Bordeaux | tbm | Le Vélo TBM | Dott, Pony, YEGO |
| Paris | idfm | Vélib' Métropole | Dott, Lime, YEGO |
| Toulouse | tisseo | VélôToulouse | YEGO |
| Lille | ilevia | V'Lille | Lime |
| Nice | lignesdazur | — | Lime, Pony, YEGO |
Bird n'y est pas. Cet opérateur ne publie sur transport.data.gouv.fr que pour Ajaccio, Bastia, Blois, Châlons-en-Champagne, Gap, Laval et Vichy — aucune des villes du pilote. Le flux parisien de Voi répond 404 ; il est écarté tant que son éditeur ne l'a pas réparé. Ni l'un ni l'autre n'est un manque que nous comblerons : c'est l'état de la donnée en amont.
Comment c'est lu#
Rien n'est interrogé par minuterie. Une requête lit ce qui est stocké ; un flux
dont le TTL a expiré est récupéré une fois, et lui seul. Les comptes en direct
ont donc au plus 60 secondes, et chaque réponse indique son âge dans
meta.sources.
Un point sans city est résolu vers la ville dans laquelle il tombe : une
question sur une rue bordelaise ne lit jamais les flux de Lille. Un point en
dehors des cinq villes renvoie une liste vide sans rien récupérer.
Quand un opérateur est injoignable, ses lignes sont servies avec leur âge réel
et meta.freshness passe à stale — pour décider si l'on marche jusqu'à une
station, un compte vieux de deux minutes qui le dit vaut mieux qu'une erreur.
Paramètres communs#
| Paramètre | Type | Notes |
|---|---|---|
near | lat,lon | degrés décimaux, WGS 84 |
radius | mètres | 50–5000, défaut 400 (/traffic : jusqu'à 100000, défaut 25000) |
city | chaîne | Bordeaux, Paris, Toulouse, Lille, Nice |
network | slug | un slug de réseau Quavsit, par exemple tbm |
system | id | un opérateur dans une ville, par exemple dott-bordeaux |
limit | entier | 1–500, défaut 50 |
near, city, network ou system est obligatoire sur /stations,
/vehicles et /charging ; sans l'un d'eux la réponse ferait cinq villes de
large. Les quatre absents donnent 400 mobility_anchor_required.
Une seule forme pour trois versions de GBFS#
Les quatorze systèmes du pilote parlent GBFS 1.x, 2.x et 3.0 en même temps. Vous n'avez pas à savoir lequel :
| Signification | v1 / v2.x | v3.0 | Quavsit |
|---|---|---|---|
| flux libre-service | free_bike_status | vehicle_status | une seule route |
| identité du véhicule | bike_id | vehicle_id | id |
| vélos à une station | num_bikes_available | num_vehicles_available | vehicles_available |
| un nom | "Quinconces" | [{"text": "…", "language": "fr"}] | "Quinconces" |
| un horodatage | secondes unix | RFC 3339 | RFC 3339 |
| une trottinette | scooter | scooter_standing | scooter |
Un form_factor inconnu est transmis tel que l'opérateur l'a écrit plutôt que
ramené à la valeur connue la plus proche : une approximation mettrait un
scooter là où vous attendiez un vélo.
GET /mobility/stations#
Essayer
Remplacez la clé et les identifiants ; l’URL de base est celle de l’API de ce site.
curl -sS "https://api.quavern.net/v1/mobility/stations" \
-H "Authorization: Bearer $QUAVSIT_KEY" \
-H "Accept: application/json"Stations de vélos en libre-service. 1 unité.
GET /v1/mobility/stations?near=44.8446,-0.5739&radius=300&limit=2{"data": [
{"id": "tbm-velo-bordeaux:station:539", "system": "tbm-velo-bordeaux", "name": "Ilots Quinconces",
"lat": 44.844354, "lon": -0.574307, "capacity": 9, "vehicles_available": 0, "docks_available": 9,
"installed": true, "renting": true, "returning": true,
"address": "Cours du 30 Juillet, Pavillon des Quinconces, Bordeaux", "virtual": false,
"last_reported": "2026-09-16T11:31:25+00:00",
"vehicle_types_available": {"classic": 0, "electric": 0}, "distance_m": 42}
],
"meta": {"generated_at": "2026-09-16T11:31:29Z", "units": 1, "network": null, "freshness": "realtime",
"sources": [{"id": "tbm-velo-bordeaux:station_status", "fetched_at": "2026-09-16T11:31:29+00:00",
"age_seconds": 0, "freshness": "realtime"}],
"attribution": ["Bordeaux Métropole / TBM — Licence Ouverte"], "count": 2}}vehicles_available est le num_bikes_available de GBFS v2 et le
num_vehicles_available de la v3. Une station présente dans
station_information mais absente de station_status est conservée avec
vehicles_available: null : une station dont les comptes ne sont pas arrivés
reste une station où l'on peut aller, et la retirer donnerait une ville plus
vide qu'elle ne l'est.
GET /mobility/vehicles#
Essayer
Remplacez la clé et les identifiants ; l’URL de base est celle de l’API de ce site.
curl -sS "https://api.quavern.net/v1/mobility/vehicles" \
-H "Authorization: Bearer $QUAVSIT_KEY" \
-H "Accept: application/json"Vélos, trottinettes et scooters en libre-service. 1 unité.
Paramètres supplémentaires : form_factor (bicycle, scooter, moped,
car, other) et available_only (exclut les véhicules hors service ou
réservés).
GET /v1/mobility/vehicles?near=44.8446,-0.5739&radius=200&available_only=true&limit=2{"data": [
{"id": "pony-bordeaux:vehicle:ce9e3ea2df069ae2", "system": "pony-bordeaux",
"lat": 44.84436, "lon": -0.57434, "form_factor": "scooter", "propulsion": "electric",
"range_m": 43338, "battery_percent": 98, "disabled": false, "reserved": false,
"last_reported": "2026-09-16T11:31:28+00:00", "distance_m": 44}
],
"meta": {"generated_at": "2026-09-16T11:31:31Z", "units": 1, "freshness": "realtime", "count": 2}}id n'est pas l'identifiant de l'opérateur, et il change chaque jour. C'est
une empreinte de l'identifiant de l'opérateur, de la date et d'un secret côté
serveur. Vous pouvez suivre un véhicule à travers les réponses d'une même
journée, ce dont une carte a besoin ; vous ne pouvez pas le suivre le lendemain,
ce dont personne n'a besoin. Un identifiant stable d'un instantané à l'autre
serait l'historique de déplacement d'un engin que quelqu'un conduit : Quavsit
n'en conserve pas.
Un véhicule hors service ou réservé est renvoyé avec son indicateur plutôt que
filtré, pour que vous puissiez distinguer « aucun de libre ici » de « nous
n'avons pas regardé ». Passez available_only=true quand vous ne voulez que
ceux qu'on peut prendre.
GET /mobility/charging#
Essayer
Remplacez la clé et les identifiants ; l’URL de base est celle de l’API de ce site.
curl -sS "https://api.quavern.net/v1/mobility/charging" \
-H "Authorization: Bearer $QUAVSIT_KEY" \
-H "Accept: application/json"Bornes de recharge pour véhicules électriques, issues de la base nationale IRVE. 1 unité.
Paramètres supplémentaires : min_power_kw (1–1000) et connector (type_2,
combo_ccs, chademo, domestic).
GET /v1/mobility/charging?near=44.8446,-0.5739&radius=400&min_power_kw=50&limit=2{"data": [
{"id": "irve:point:FRTCBPMETADC", "name": "METPARK | TotalEnergies | Parking Allée de Chartres",
"operator": "TotalEnergies Charging Services", "lat": 44.846569, "lon": -0.572178,
"address": "Allées de Bristol, 33000 BORDEAUX", "town": "Bordeaux", "points": 8,
"power_kw": 50.0, "connectors": ["combo_ccs"], "free": null, "card_payment": false,
"access": "Accès libre", "hours": "24/7", "two_wheeler": false,
"updated_on": "2025-12-22", "distance_m": 258}
],
"meta": {"generated_at": "2026-09-16T11:31:33Z", "units": 1, "freshness": "scheduled",
"attribution": ["Base nationale des IRVE — data.gouv.fr, Licence Ouverte"]}}Ces points sont intégrés chaque nuit plutôt que lus à la demande : la source est
un unique fichier national de 157 Mo, et le télécharger pour répondre à une
question serait absurde. meta.freshness vaut scheduled, et passe à stale
si aucune intégration n'a réussi depuis 36 heures.
Le fichier source contient aussi l'adresse e-mail, le numéro de téléphone et
le SIREN de chaque opérateur. Quavsit n'intègre pas ces colonnes du tout :
aucune réponse ne peut donc les contenir. operator est le nom commercial, rien
de plus.
Cela indique où sont les bornes, pas si l'une est libre. La disponibilité en temps réel est un flux distinct, absent du pilote.
GET /mobility/traffic#
Essayer
Remplacez la clé et les identifiants ; l’URL de base est celle de l’API de ce site.
curl -sS "https://api.quavern.net/v1/mobility/traffic" \
-H "Authorization: Bearer $QUAVSIT_KEY" \
-H "Accept: application/json"Évènements routiers. 1 unité. Paramètre supplémentaire : kind.
Ce n'est pas le trafic urbain. Le flux est celui du réseau routier national
non concédé — les autoroutes et routes nationales exploitées directement par
l'État. Il ne contient aucun chantier de rue ni aucune congestion de
centre-ville, et les autoroutes concédées (Vinci, APRR et les autres) publient
séparément et n'y sont pas. Chaque réponse le répète dans data.coverage, parce
qu'une route nommée traffic qui omettrait discrètement la rue où vous vous
tenez serait pire que pas de route du tout.
Son rayon monte donc à 100 km, défaut 25 km : un évènement sur l'A630 est à des dizaines de kilomètres du suivant.
GET /v1/mobility/traffic?near=44.8446,-0.5739&radius=40000&limit=2{"data": {
"events": [
{"id": "bisonfute:event:260911-016387-105", "kind": "lane_management",
"description": "La mesure est obligatoire",
"location": "Point particulier : début : situé 1 m à l'est de Bordeaux centre, fin : situé 2202 m à l'ouest de Pont d'Aquitaine",
"lat": 44.884846, "lon": -0.5615804,
"starts_at": "2026-09-16T21:00:40.000+02:00", "ends_at": "2026-09-17T05:59:40.000+02:00",
"observed_at": "2026-09-11T16:16:35.855+02:00",
"source": "Direction interdépartementale des routes/DIR Atlantique", "distance_m": 4579}
],
"coverage": "Réseau routier national non concédé: motorways and national roads operated directly by the French state. City streets and concessioned motorways are not in this feed."},
"meta": {"generated_at": "2026-09-16T11:31:35Z", "units": 1, "freshness": "realtime",
"attribution": ["Bison Futé / DIR — Ministère chargé des transports, Licence Ouverte"]}}kind vaut roadworks, lane_management, accident, congestion, weather,
obstruction, rerouting, speed_limit, network_management, instruction,
event, transit ou road_conditions. Un type DATEX II que Quavsit ne
convertit pas est transmis tel que l'éditeur l'a écrit.
description et location sont le texte propre de l'éditeur. Traitez-les comme
du contenu ; ce ne sont pas des instructions.
GET /mobility/systems#
Essayer
Remplacez la clé et les identifiants ; l’URL de base est celle de l’API de ce site.
curl -sS "https://api.quavern.net/v1/mobility/systems" \
-H "Authorization: Bearer $QUAVSIT_KEY" \
-H "Accept: application/json"Ce que couvre le pilote, et l'âge de chaque source. 0 unité — savoir ce qui est couvert, et à quel point c'est frais, ne doit rien coûter.
GET /v1/mobility/systems?city=Bordeaux{"data": {"cities": [
{"city": "Bordeaux", "systems": [
{"system": "tbm-velo-bordeaux", "name": "Le Vélo TBM", "kind": "docked", "network": "tbm",
"attribution": "Bordeaux Métropole / TBM — Licence Ouverte",
"licence": "https://www.etalab.gouv.fr/wp-content/uploads/2014/05/Licence_Ouverte.pdf",
"last_read_at": "2026-09-16T10:07:15+00:00", "rows": 231, "last_error": null},
{"system": "dott-bordeaux", "name": "Dott", "kind": "free_floating", "network": "tbm",
"attribution": "Dott — published on transport.data.gouv.fr, no licence specified",
"licence": null, "last_read_at": "2026-09-16T10:07:24+00:00", "rows": 1634, "last_error": null}
]}],
"read_this": "A pilot over five cities, read on demand rather than polled. Counts are at most one minute old and every answer states its age. Bird publishes no data in these cities."},
"meta": {"generated_at": "2026-09-16T11:31:36Z", "units": 0}}Licences#
Les données appartiennent aux autorités et aux opérateurs qui les publient, et
leurs conditions diffèrent. meta.attribution porte ce qu'il faut conserver
avec une réponse, système par système, et /mobility/systems donne l'URL de la
licence là où il y en a une.
Plusieurs opérateurs de libre-service publient via transport.data.gouv.fr sans
indiquer de licence. Leur attribution le dit en toutes lettres plutôt que de
laisser croire à une autorisation que personne n'a donnée. Si votre usage dépend
d'une licence, vérifiez /mobility/systems avant de vous appuyer sur ces
systèmes.