POST /pricing calcule un tarif sans créer de mission. C’est l’endpoint à appeler pour afficher un prix à vos utilisateurs, comparer des options, ou valider un budget avant de passer commande. Aucune ressource n’est créée, rien n’est facturé.
Le prix renvoyé par /pricing applique exactement la même grille que POST /transports. Un devis et la création qui suit, sur un trajet identique, donnent le même tarif. Voir Le prix de création est cohérent.

La grille tarifaire dépend de votre groupe

Chaque clé API est rattachée à un groupe (flotte, concession, loueur). Ce groupe porte une grille tarifaire négociée : c’est elle qui détermine le prix. Vous n’avez rien à transmettre pour la sélectionner — elle est déduite de votre X-Api-Key. Concrètement, le moteur de tarification combine plusieurs facteurs :

Distance

Les adresses d’enlèvement et de livraison sont géocodées, puis la distance routière est calculée. C’est le principal déterminant du prix.

Type de véhicule

VP, VU, VUL… chaque catégorie a son barème. Un véhicule électrique applique une majoration qui peut dépendre de la distance. Les deux se déduisent de l’immatriculation quand vous la transmettez.

Plateau

Le transport sur plateau (véhicule non roulant) suit un barème distinct, activé par le drapeau plateau de la requête.

Options

Lavage, carburant, prestations additionnelles… chaque option passée dans options est intégrée au prix HT renvoyé.

Aller-retour

Un trajet retour applique la remise retour négociée de votre groupe, détaillée dans le champ return_trip de la réponse.

Supplément localisation

International ou zones spécifiques (ex. Corse) ajoutent un supplément selon le pays et le code postal, intégré au prix HT renvoyé.

Avant de commencer

string
requis
Votre clé API (med_live_… en production, med_test_… en test). Elle détermine le groupe — donc la grille appliquée.
Le scope transports:read n’est pas requis pour /pricing : seule une clé valide (non révoquée, non expirée) est nécessaire. Une clé invalide renvoie 401.

Corps de la requête

string | object
requis
Point d’enlèvement. Une chaîne d’adresse ("10 Rue de Rivoli, 75004 Paris") ou un objet { address }. L’adresse est géocodée pour calculer la distance.
string | object
requis
Point de livraison, même format que pickup.
object
Caractéristiques du véhicule.
boolean
true pour un transport sur plateau. Le tarif plateau est toujours renvoyé dans la réponse, que ce drapeau soit posé ou non.
string[]
Liste des clés d’options à inclure dans l’estimation.
boolean | object
true (ou un objet décrivant le retour) pour estimer un aller-retour. Le détail du retour apparaît dans le champ return_trip de la réponse.
object
Informations de facturation simplifiées. Optionnel pour une estimation : la grille vient du groupe de la clé, pas de la facturation.
car est accepté comme alias de vehicle, et returnTrip comme alias de return_trip. Utilisez de préférence les formes en snake_case.

Exemple de devis

Réponse 200

Comprendre la réponse

number
Prix HT CLIENT pour le véhicule demandé : gabarit effectivement retenu (déduit de l’immatriculation), options, plaque W, suppléments et plateau inclus si demandés. C’est le tarif de référence à facturer — il peut donc différer de tariffs.vp (voir ci-dessous).
string
Devise des montants — toujours EUR.
number
Distance routière estimée, en kilomètres, issue du géocodage des deux adresses.
object
Tarifs TRANSPORT par gabarit (options, suppléments et plateau exclus), dérivés de la grille de votre groupe, pour comparer les gabarits :
  • vp — tourisme
  • vu — utilitaire
  • vul — utilitaire lourd
Chaque gabarit expose price_ht (normal) et plateau_ht (transport groupé). Indépendant de price_ht ci-dessus (qui inclut le véhicule demandé + options).
object
Adresse d’enlèvement résolue par le géocodeur : address normalisée, lat, lng et place_id (référence Google déterministe). Vérifiez-la pour confirmer que le point retenu correspond bien à ce que vous visiez avant de créer la mission.
object
Adresse de livraison résolue, même structure que pickup.
object | null
Détail du trajet retour quand return_trip est demandé, sinon null. Contient price_ht, distance_km, et les adresses résolues pickup (= livraison aller) et delivery (destination du retour).
Tous les montants sont HT, en euros. La rémunération convoyeur, les pénalités convoyeur et les champs internes ne sont jamais exposés.
Les adresses sont en texte libre géocodé côté serveur : "paris" est résolu vers le centre-ville, pas vers une rue précise. Soyez le plus spécifique possible (numéro + rue + code postal + ville) et contrôlez toujours pickup/delivery dans la réponse — une adresse ambiguë fausse la distance, donc le prix.

Variantes de devis

Un véhicule électrique peut appliquer une majoration qui dépend de la distance. Si vous transmettez l’immatriculation (vehicle.registration), l’énergie est lue sur la carte grise ; electric prend le relais quand la plaque est absente ou n’est pas reconnue.

Le prix de création est cohérent

La grille appliquée par POST /pricing est identique à celle appliquée par POST /transports. Un devis fait foi : créez la mission sur le même trajet, le même véhicule et les mêmes options, et vous obtenez le même prix.
Vous pouvez donc présenter le devis à votre utilisateur, puis créer la mission en toute confiance sans craindre un écart de tarif. La réponse de création renvoie le prix HT retenu pour l’aller dans son champ price, sous forme de chaîne décimale (le prix détaillé se lit ensuite via GET /transports/{id}).

Gestion des erreurs

Les erreurs suivent la RFC 9457 (Content-Type: application/problem+json). Branchez votre logique sur status et title, pas sur le texte de detail.
Clé manquante, inconnue, révoquée ou expirée. Vérifiez l’en-tête X-Api-Key.
Un champ requis manque (ex. pickup ou delivery). Le tableau errors[] précise le champ en cause.
Respectez l’en-tête Retry-After (en secondes) et appliquez un back-off.
Échec d’un service amont (relai de tarification). L’estimation n’a aucun effet de bord : vous pouvez réessayer sans risque.

Étapes suivantes

Créer une mission

Transformez un devis en mission réelle avec POST /transports.

Authentification

Clés API, scopes et isolation par groupe.