Envoyer un trajet

POST /journeys

Un trajet est un couple passager.ère / conducteur.rice ayant des points et de horaires de départ et d'arrivée. Si une conductrice covoiture avec plusieurs passagères, plusieurs trajets sont déclarés.

Unités de mesure

Les unités utilisées pour les valeurs sont :

  • montants financiers en centimes d'Euros
  • distances en mètres

Données financières

Le principe est de coller au plus près avec la réalité comptable (transaction usager) et d'avoir suffisamment d'informations pour recalculer le coût initial du trajet. Ainsi, les propriétés passenger.contribution et driver.revenue combinées au tableau incentives doivent permettre ce calcul. Ceci afin de s'assurer du respect de la définition du covoiturage et de la bonne application des politiques incitatives gérées par le registre.

Les données envoyées en passenger.contribution et driver.revenue sont utilisées dans les attestations de covoiturage à destination des employeurs (Forfait Mobilités Durables).

Validation

Le schéma de données est présenté au format JSON Schema Draft-07.

Vérification

Les vérifications sont faites de manière asynchrone. Le statut ne peut plus changer 48h après la date de fin du trajet. En cas d'indisponibilité du ou des services, le trajet est considéré comme ok après 48h

Détection de fraude

Dans le cadre de la fraude inter opérateurs, les opérateurs sont tenus de vérifier le statut du trajet au plus tôt 24h après la réalisation de celui-ci. Ces trajets seront retournés avec un champs status à fraud_error et un label dans fraud_error_labels à interoperator_fraud. L'algorithme de détection de fraude inter opérateurs est appliqué sur tous les trajets envoyés.

Détection d'anomalie

Le trajet est incohérent ou physiquement impossible. Le trajet envoyé rentre en conflit avec un autre sur plan temporel ou spacial Voir la section du schema "anomaly_label" pour plus de détails

application/json

Body Required

  • operator_journey_id string Required

    Identifiant généré par l'opérateur. Doit être unique par couple conducteur/passager

  • operator_trip_id string Required

    Identifiant généré par l'opérateur pour regrouper des trajets (plusieurs passagers avec un même conducteur)

  • classe de preuve correspondant aux spécifications définies dans Classes de preuve de covoiturage.

    Values are A, B, or C.

  • incentives array[object] Required

    Tableau reprenant la liste complète des incitations appliquées (ordre d'application, montant, identifiant de l'incitateur). Si aucune incitation, envoyer un tableau vide.

    Ordre par défaut

    Par défaut, l'ordre d'application des politiques incitatives est le suivant :

    1. Territoire (AOM, Région, ...)
    2. Sponsors (incitations employeur, CE, etc.)
    3. Opérateur (opération promotionnelle, offres, etc.)
    Hide incentives attributes Show incentives attributes object
    • index number Required

      Ordre d'application de l'incitation

      Minimum value is 0.

    • amount number Required

      Montant de l'incitation en centimes d'euros

      Minimum value is 0.

    • siret string Required

      Numéro de SIRET de l'incitateur Le SIRET est un identifiant unique par structure juridique. Toutes les entités incitatrices en possèdent un.

  • Plaque d'immatriculation du véhicule

  • start object Required

    Position lat/lon + date du passager

    Additional properties are NOT allowed.

    Hide start attributes Show start attributes object
    • datetime string(date-time) Required

      Date et heure du départ/arrivée du passager au format ISO 8601. L'heure est exprimée en UTC (YYYY-MM-DDThh:mm:ssZ) L'heure est exprimée en UTC (Coordinated Universal Time). UTC n'est pas ajusté sur l'heure d'été et hiver !

    • lat number Required

      Latitude comprise entre 90deg et -90deg décimaux en datum WSG-84

    • lon number Required

      Longitude comprise entre 180deg et -180deg décimaux en datum WSG-84

  • end object Required

    Position lat/lon + date du passager

    Additional properties are NOT allowed.

    Hide end attributes Show end attributes object
    • datetime string(date-time) Required

      Date et heure du départ/arrivée du passager au format ISO 8601. L'heure est exprimée en UTC (YYYY-MM-DDThh:mm:ssZ) L'heure est exprimée en UTC (Coordinated Universal Time). UTC n'est pas ajusté sur l'heure d'été et hiver !

    • lat number Required

      Latitude comprise entre 90deg et -90deg décimaux en datum WSG-84

    • lon number Required

      Longitude comprise entre 180deg et -180deg décimaux en datum WSG-84

  • distance number Required

    Distance exprimée en mètre

    Minimum value is 0, maximum value is 1000000.

  • driver object Required

    Additional properties are NOT allowed.

    Hide driver attributes Show driver attributes object
    • identity object Required

      Ces données personnelles permettent d'identifier la personne effectuant le covoiturage afin de pouvoir comptabiliser ses trajets et lui distribuer des incitations en fonction des politiques applicables. Deux options sont disponibles pour la transmission du numéro de téléphone :

      • Numéro complet au format ITU E.164 (phone) (ex. +33601020304, +590690101010)
      • Numéro au format ITU E.164 tronqué des 2 derniers chiffres (phone_trunc) (ex. +336010203, +5906901010) + identifiant unique de l'opérateur (operator_user_id)

      Additional properties are NOT allowed.

      Hide identity attributes Show identity attributes object
      • identity_key string Required

        Correspond au SHA d'une chaîne concaténée tel que : sha256(phone_number-last_name) ou

        • phone_number correspond au numéro de téléphone complet au format international sans espace ni tiret. Exemple : +33601020304
        • last_name correspond au nom de famille complet en majuscule, sans accent ni tiret ni apostrophe (regexp: [A-Z ]*) Par exemple, M. D'Hérûg-de-l'Hérault ayant le numéro 07 01 02 03 04 doit être formatté comme suit "+33701020304-D HERUG DE L HERAULT"

        Minimum length is 64, maximum length is 64.

      • Numéro de carte de transport (TCL, Navigo, Trabool, etc.) de l'occupant. Obligatoire si l'information est disponible. Actuellement supporté: Navigo

        Additional properties are NOT allowed.

        Hide travel_pass attributes Show travel_pass attributes object
        • name Required

          Nom du titre

          Value is navigo.

        • user_id string Required

          Numéro de carte de transport

      • phone string

        Numéro au format ITU E.164

      • phone_trunc string Required

        Numéro au format ITU E.164 tronqué des 2 derniers chiffres. Obligatoire si phone n'est pas renseigné.

      • driving_license string

        One of:

        Numéro de permis de conduire composé de 12 chiffres après 1975.

        Minimum length is 12, maximum length is 12. Format should match the following pattern: /^[0-9]{12}$/.

        Numéro de permis de conduire composé de 1 à 15 caractères suivis de 4 chiffres avant 1975.

        Minimum length is 5, maximum length is 19. Format should match the following pattern: /^[A-Z0-9]{1,15}[0-9]{4}$/.

        Numéro de permis de conduire plus anciens composé de 1 à 15 caractères.

        Minimum length is 1, maximum length is 15. Format should match the following pattern: /^[A-Z0-9]{1,15}$/.

        Numéro de permis étranger préfixé de l'indicatif '99-'.

        Minimum length is 4, maximum length is 64. Format should match the following pattern: /^99-.*$/.

      • operator_user_id string Required

        Identifiant de l'utilisateur chez l'opérateur. Obligatoire.

      • Applicable seulement au passager.

        • true si majeur
        • false si mineur
        • null si non fourni

        De nombreuses campagnes utilisent cette information pour s'assurer que les bénéficiaires d'incitations sont majeures. La valeur NULL les exclues.

        Values are true, false, or null.

    • revenue number Required

      La somme réellement perçue par le conducteur APRÈS que toutes les incitations (subventions employeurs, promotions opérateurs, incitations AOM, etc.), contributions des passagers aient été versées et que la commission de l’opérateur soit prise. Somme exprimée en centimes.

      Minimum value is 0.

  • passenger object Required

    Additional properties are NOT allowed.

    Hide passenger attributes Show passenger attributes object
    • identity object Required

      Ces données personnelles permettent d'identifier la personne effectuant le covoiturage afin de pouvoir comptabiliser ses trajets et lui distribuer des incitations en fonction des politiques applicables. Deux options sont disponibles pour la transmission du numéro de téléphone :

      • Numéro complet au format ITU E.164 (phone) (ex. +33601020304, +590690101010)
      • Numéro au format ITU E.164 tronqué des 2 derniers chiffres (phone_trunc) (ex. +336010203, +5906901010) + identifiant unique de l'opérateur (operator_user_id)

      Additional properties are NOT allowed.

      Hide identity attributes Show identity attributes object
      • identity_key string Required

        Correspond au SHA d'une chaîne concaténée tel que : sha256(phone_number-last_name) ou

        • phone_number correspond au numéro de téléphone complet au format international sans espace ni tiret. Exemple : +33601020304
        • last_name correspond au nom de famille complet en majuscule, sans accent ni tiret ni apostrophe (regexp: [A-Z ]*) Par exemple, M. D'Hérûg-de-l'Hérault ayant le numéro 07 01 02 03 04 doit être formatté comme suit "+33701020304-D HERUG DE L HERAULT"

        Minimum length is 64, maximum length is 64.

      • Numéro de carte de transport (TCL, Navigo, Trabool, etc.) de l'occupant. Obligatoire si l'information est disponible. Actuellement supporté: Navigo

        Additional properties are NOT allowed.

        Hide travel_pass attributes Show travel_pass attributes object
        • name Required

          Nom du titre

          Value is navigo.

        • user_id string Required

          Numéro de carte de transport

      • phone string

        Numéro au format ITU E.164

      • phone_trunc string Required

        Numéro au format ITU E.164 tronqué des 2 derniers chiffres. Obligatoire si phone n'est pas renseigné.

      • driving_license string

        One of:

        Numéro de permis de conduire composé de 12 chiffres après 1975.

        Minimum length is 12, maximum length is 12. Format should match the following pattern: /^[0-9]{12}$/.

        Numéro de permis de conduire composé de 1 à 15 caractères suivis de 4 chiffres avant 1975.

        Minimum length is 5, maximum length is 19. Format should match the following pattern: /^[A-Z0-9]{1,15}[0-9]{4}$/.

        Numéro de permis de conduire plus anciens composé de 1 à 15 caractères.

        Minimum length is 1, maximum length is 15. Format should match the following pattern: /^[A-Z0-9]{1,15}$/.

        Numéro de permis étranger préfixé de l'indicatif '99-'.

        Minimum length is 4, maximum length is 64. Format should match the following pattern: /^99-.*$/.

      • operator_user_id string Required

        Identifiant de l'utilisateur chez l'opérateur. Obligatoire.

      • Applicable seulement au passager.

        • true si majeur
        • false si mineur
        • null si non fourni

        De nombreuses campagnes utilisent cette information pour s'assurer que les bénéficiaires d'incitations sont majeures. La valeur NULL les exclues.

        Values are true, false, or null.

    • payments array[object]

      Zéro, une ou plusieurs méthodes de paiement utilisées (ex. carte employeur préchargée permettant de payer directement le covoiturage sur une application).

      Tip

      La prise en charge des frais de transports personnel (carburant et forfait mobilité) pourra prendre la forme d’une solution de paiement spécifique, dématérialisée et prépayée, intitulée « titre-mobilité ». Ainsi, il apparaît comme pertinent de détailler la solution de paiement utilisée dans le cadre d'un trajet covoituré, s'il s'agit de Titre-Mobilité.

      Hide payments attributes Show payments attributes object
      • index number Required

        Ordre d'application

        Minimum value is 0.

      • amount number Required

        Montant du paiement en centimes d'euros

        Minimum value is 0.

      • siret string Required

        Numéro de SIRET du payeur

      • type string Required

        Nom du titre

    • contribution number Required

      Coût réel total du service pour l’occupant passager en fonction du nombre de sièges réservés APRÈS que toutes les possibles incitations aient été versées (subventions employeurs, promotions opérateurs, incitations AOM, etc).| Somme exprimée en centimes.

      Minimum value is 0.

    • seats number

      Nombre de sièges réservés par l'occupant passager.

      Minimum value is 1, maximum value is 8. Default value is 1.

Responses

  • 201 application/json

    OK. Le trajet a bien été enregistré.

    Hide response attributes Show response attributes object
    • operator_journey_id string Required

      Identifiant généré par l'opérateur. Doit être unique par couple conducteur/passager

    • created_at string(date-time) Required

      La date de création dans le registre

  • 400 application/json

    Mauvaise requête

  • 401 application/json

    Non authentifié. Le token applicatif est manquant ou invalide

  • 403 application/json

    Accès refusé Les permissions de votre token applicatif ne vous permettent pas de créer une attestation. Vous pouvez générer un nouveau token et réessayer. Si le problème persiste, contactez notre équipe.

  • Un trajet similaire a déjà enregistré.

POST /journeys
curl \
 -X POST http://api.example.com/journeys \
 -H "Authorization: Bearer $ACCESS_TOKEN" \
 -H "Content-Type: application/json" \
 -d '{"operator_journey_id":"string","operator_trip_id":"string","operator_class":"A","incentives":[{"index":0,"amount":100,"siret":"11000101300017"}],"licence_plate":"string","start":{"datetime":"2021-01-01T11:00:00Z","lat":47.682821,"lon":-0.557483},"end":{"datetime":"2021-01-01T11:00:00Z","lat":47.682821,"lon":-0.557483},"distance":42.0,"driver":{"identity":{"identity_key":"string","travel_pass":{"name":"navigo","user_id":"00-MFR-6782929"},"phone":"+33601020304, +590690101010","phone_trunc":"+336010203, +5906901010","driving_license":"051227308989","operator_user_id":"d2e8a6c4-9e3a-4b6f-8e8d-9f7a6b5c4d3e","over_18":true},"revenue":42.0},"passenger":{"identity":{"identity_key":"string","travel_pass":{"name":"navigo","user_id":"00-MFR-6782929"},"phone":"+33601020304, +590690101010","phone_trunc":"+336010203, +5906901010","driving_license":"051227308989","operator_user_id":"d2e8a6c4-9e3a-4b6f-8e8d-9f7a6b5c4d3e","over_18":true},"payments":[{"index":0,"amount":100,"siret":"11000101300017","type":"string"}],"contribution":42.0,"seats":1}}'
Request examples
{
  "operator_journey_id": "string",
  "operator_trip_id": "string",
  "operator_class": "A",
  "incentives": [
    {
      "index": 0,
      "amount": 100,
      "siret": "11000101300017"
    }
  ],
  "licence_plate": "string",
  "start": {
    "datetime": "2021-01-01T11:00:00Z",
    "lat": 47.682821,
    "lon": -0.557483
  },
  "end": {
    "datetime": "2021-01-01T11:00:00Z",
    "lat": 47.682821,
    "lon": -0.557483
  },
  "distance": 42.0,
  "driver": {
    "identity": {
      "identity_key": "string",
      "travel_pass": {
        "name": "navigo",
        "user_id": "00-MFR-6782929"
      },
      "phone": "+33601020304, +590690101010",
      "phone_trunc": "+336010203, +5906901010",
      "driving_license": "051227308989",
      "operator_user_id": "d2e8a6c4-9e3a-4b6f-8e8d-9f7a6b5c4d3e",
      "over_18": true
    },
    "revenue": 42.0
  },
  "passenger": {
    "identity": {
      "identity_key": "string",
      "travel_pass": {
        "name": "navigo",
        "user_id": "00-MFR-6782929"
      },
      "phone": "+33601020304, +590690101010",
      "phone_trunc": "+336010203, +5906901010",
      "driving_license": "051227308989",
      "operator_user_id": "d2e8a6c4-9e3a-4b6f-8e8d-9f7a6b5c4d3e",
      "over_18": true
    },
    "payments": [
      {
        "index": 0,
        "amount": 100,
        "siret": "11000101300017",
        "type": "string"
      }
    ],
    "contribution": 42.0,
    "seats": 1
  }
}
Response examples (201)
{
  "operator_journey_id": "string",
  "created_at": "2024-05-04T09:42:00+00:00"
}
Response examples (400)
{
  "id": 1,
  "error": {
    "code": -32602,
    "data": "data/driver/identity/phone_trunc must match format \"phonetrunc\", data/driver/identity/phone_trunc must pass \"macro\" keyword validation",
    "message": "Invalid params"
  },
  "jsonrpc": "2.0"
}
Response examples (401)
{
  "code": 401,
  "error": "Unauthorized"
}
Response examples (403)
{
  "code": 403,
  "error": "Forbidden"
}