QuavernQuavsit

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.

VilleRéseauEn stationLibre-service
BordeauxtbmLe Vélo TBMDott, Pony, YEGO
ParisidfmVélib' MétropoleDott, Lime, YEGO
ToulousetisseoVélôToulouseYEGO
LilleileviaV'LilleLime
NicelignesdazurLime, 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ètreTypeNotes
nearlat,londegrés décimaux, WGS 84
radiusmètres50–5000, défaut 400 (/traffic : jusqu'à 100000, défaut 25000)
citychaîneBordeaux, Paris, Toulouse, Lille, Nice
networkslugun slug de réseau Quavsit, par exemple tbm
systemidun opérateur dans une ville, par exemple dott-bordeaux
limitentier1–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 :

Significationv1 / v2.xv3.0Quavsit
flux libre-servicefree_bike_statusvehicle_statusune seule route
identité du véhiculebike_idvehicle_idid
vélos à une stationnum_bikes_availablenum_vehicles_availablevehicles_available
un nom"Quinconces"[{"text": "…", "language": "fr"}]"Quinconces"
un horodatagesecondes unixRFC 3339RFC 3339
une trottinettescooterscooter_standingscooter

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.

sh
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é.

text
GET /v1/mobility/stations?near=44.8446,-0.5739&radius=300&limit=2
json
{"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.

sh
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).

text
GET /v1/mobility/vehicles?near=44.8446,-0.5739&radius=200&available_only=true&limit=2
json
{"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.

sh
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).

text
GET /v1/mobility/charging?near=44.8446,-0.5739&radius=400&min_power_kw=50&limit=2
json
{"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.

sh
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.

text
GET /v1/mobility/traffic?near=44.8446,-0.5739&radius=40000&limit=2
json
{"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.

sh
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.

text
GET /v1/mobility/systems?city=Bordeaux
json
{"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.