Modifier les dates
Décaler l’enlèvement ou la livraison, sur l’aller comme sur le retour, jambe par
jambe.
Options
Ajouter ou retirer une option ; le prix est recalculé automatiquement.
Refacturation
Changer le prix HT facturé au client pour une jambe, avec garde-fous et historique.
Annulation
Annuler une mission qui n’est pas encore terminée.
Toutes les routes ci-dessous sont scopées au groupe de votre clé. Une mission qui
n’appartient pas à votre groupe renvoie
404 Not Found (jamais 403). Les
mutations exigent le scope transports:write.1. Modifier les dates (par jambe)
Une mission a jusqu’à quatre jambes : l’enlèvement et la livraison de l’aller, et — pour un aller-retour — l’enlèvement et la livraison du retour. Vous modifiez chacune indépendamment viaPATCH /transports/{id}/dates.
Clés de jambe
Carte des jambes à modifier (au moins une). Les clés possibles sont :
Chaque valeur est un objet
| Clé | Jambe concernée |
|---|---|
enlevement-aller | Enlèvement, trajet aller |
livraison-aller | Livraison, trajet aller |
enlevement-retour | Enlèvement, trajet retour |
livraison-retour | Livraison, trajet retour |
{ date, start_time, end_time }.Date au format ISO
YYYY-MM-DD (ex. 2026-07-02).Début de la fenêtre horaire (ex.
09:00).Fin de la fenêtre horaire (ex.
12:00).Si
false, le client n’est pas notifié du changement. Par défaut, seules les
jambes réellement modifiées déclenchent une notification.Vous pouvez envoyer les quatre jambes en une requête : seules celles dont la
date/horaire change effectivement déclencheront une notification. Inutile de
pré-filtrer côté client.
Comme toute écriture,
PATCH /dates renvoie un 409 Conflict si la
fenêtre de modification est fermée (mission
partie, J+0 ou au-delà, ou annulée). Voir l’encart « Fenêtre de modification »
en tête de page.Exemple — décaler l’enlèvement aller
200 :
Identifiant de la mission.
Liste des jambes effectivement modifiées (et donc, sauf
notify: false,
notifiées au client).transport.dates_updated avec un
payload { id, updated_legs }.
Majoration « dernier moment » (express)
Une mission dont l’enlèvement est imminent est majorée automatiquement sur le prix client. Aucun paramètre à passer : la majoration est calculée et appliquée par le serveur. La majoration s’applique dès que l’enlèvement tombe dans la zone « dernier moment » :| Cas | Exemple |
|---|---|
| Enlèvement aujourd’hui (J+0) | enlèvement le jour de l’appel |
| Enlèvement demain (J+1) | enlèvement le lendemain |
| Enlèvement le prochain jour ouvré | un vendredi pour un lundi (le week-end ne compte pas) |
Le taux par défaut est de +25 %, configurable par groupe. La majoration
porte uniquement sur le prix client : elle ne touche JAMAIS la
rémunération du convoyeur.
- à la création de la mission, si l’enlèvement est déjà imminent (le
pricerenvoyé parPOST /transportsinclut alors la majoration) ; - au changement de date via
PATCH /dates:- rapprocher l’enlèvement dans la zone « dernier moment » ajoute la majoration ;
- éloigner un enlèvement qui y était l’annule (le prix client redescend).
GET /transports/{id}/price-history. Le motif y vaut « Majoration express … »
lors de l’ajout, et « Annulation majoration express » lors du retrait.
2. Ajouter ou retirer une option
Les options (par exemple un nettoyage, un plein de carburant, une prise de rendez-vous) sont rattachées à la mission par une clé d’option (option_key).
Ajouter ou retirer une option recalcule automatiquement le prix de la mission.
Ajouter une option
POST /transports/{id}/options
Clé de l’option à ajouter. Le prix de l’option est dérivé du catalogue de la
grille de votre groupe — vous ne le transmettez pas. Une clé inconnue renvoie
une erreur
Unknown option.Clés d’option disponibles
Utilisez l’une de ces clés (option_key). Le libellé est donné à titre indicatif ;
le prix indiqué est le prix client de référence de l’option (le montant
réellement facturé dépend de la grille négociée de votre groupe).
Clé (option_key) | Libellé | Prix client indicatif |
|---|---|---|
Plaque_Wgarage | Plaque W Garage | 50 € |
CPI | Certificat provisoire d’immatriculation | 45 € |
Lavage_exterieur | Lavage Extérieur | 19 € |
Lavage_interieur | Lavage Intérieur | 15 € |
Plein_carburant | Plein carburant | 10 € |
Recharge_electrique | Recharge électrique | 30 € |
Pression_pneus | Pression pneus | 10 € |
Recharge_lave_glace | Recharge lave glace | 10 € |
Mise_en_main | Mise en main | 20 € |
Booster | Booster | 30 € |
200 :
Clé de l’option ajoutée.
Nouveau prix de la mission après recalcul.
Variation de prix induite par l’ajout de l’option.
Retirer une option
DELETE /transports/{id}/options/{option_key}
La clé d’option fait partie du chemin et doit être URL-encodée.
200 :
Nouveau prix de la mission après retrait de l’option.
Variation de prix (négative ici, l’option étant retirée).
Ajouter comme retirer une option émet l’événement
transport.price_adjusted.L’ajout (
POST .../options) renvoie un 409 Conflict si la
fenêtre de modification est fermée (mission
partie, J+0 ou au-delà, annulée) ou si la mission est déjà payée / facturée.
Le DELETE est idempotent : retirer une option déjà absente n’est pas une
erreur, et un même Idempotency-Key rejoue la même réponse.3. Refacturer une jambe
La refacturation modifie le prix HT facturé au client pour une jambe donnée. Contrairement aux options, elle force un nouveau prix au lieu d’appliquer la grille — d’où l’exigence d’un motif et la traçabilité intégrale.POST /transports/{id}/price-adjustments
Jambe concernée :
aller ou retour.Nouveau prix HT facturé au client. Obligatoire.
Motif de la refacturation. Obligatoire — il est conservé dans l’historique.
Exemple
201 :
Identifiant de la mission.
Jambe refacturée (
aller ou retour).Ancien prix HT facturé au client, avant ajustement.
Nouveau prix HT facturé au client, après ajustement.
Devise des montants — toujours
EUR.Garde-fou : jambe déjà payée ou facturée
Ce garde-fou est appliqué à deux niveaux : un contrôle rapide en amont, puis
un backstop côté moteur de transport qui relit la source de vérité. Dans ce
second cas, le
detail peut être en français (ex. « Mission terminée et déjà
payée »). Branchez donc votre logique sur le status (409), jamais sur le
texte de detail qui peut varier selon le niveau qui a bloqué.Historique des refacturations
Chaque refacturation est tracée. Consultez l’historique complet d’une mission viaGET /transports/{id}/price-history.
200 :
Liste des changements de prix, chacun avec
leg, old_price_ht, new_price_ht,
motif et created_at. Seul le prix HT facturé au client est exposé.Une refacturation émet l’événement
transport.price_adjusted avec un payload
{ id, leg, old_price_ht, new_price_ht, motif }.4. Annuler la mission
POST /transports/{id}/cancel
Motif d’annulation. Optionnel — le corps de la requête l’est aussi.
200 :
Identifiant de la mission.
Toujours
cancelled en cas de succès.Garde-fou : mission plus annulable
status (409), pas sur le texte du
detail.
L’annulation émet l’événement
transport.cancelled avec un payload
{ id, reason }.Récapitulatif des garde-fous
409 sur dates / options / documents (fenêtre de modification)
409 sur dates / options / documents (fenêtre de modification)
La mission est partie (J+0 ou au-delà, ou statut public
in_transit et
suivants), ou annulée. Tant que ce verrou est fermé, on ne peut plus modifier
les dates, les options ni les documents. Vérifiez l’état via GET /transports/{id}.409 sur une refacturation
409 sur une refacturation
La jambe ciblée est déjà payée ou facturée, ou la mission est terminée et déjà
payée / facturée. Le prix est figé pour des raisons comptables : aucune
refacturation n’est possible.
409 sur une annulation
409 sur une annulation
La mission n’est plus annulable : seules les missions en amont avant le départ
(
scheduled / assigned) le sont. Une mission partie, terminée ou déjà annulée
renvoie 409.404 au lieu de 403
404 au lieu de 403
La mission n’appartient pas au groupe de votre clé. Pour ne pas révéler son
existence, l’API renvoie
404 plutôt que 403. Vérifiez l’id et la clé
utilisée.422 sur la validation
422 sur la validation
Un champ requis manque (par exemple
motif sur une refacturation, ou aucun des
deux prix), ou les dates sont incohérentes (livraison avant enlèvement, retour
avant aller, date dans le passé). Lisez le tableau errors[] du corps
problem+json pour le détail champ par champ.Étapes suivantes
Webhooks
Recevez
transport.dates_updated, transport.price_adjusted et
transport.cancelled en temps réel sur votre endpoint signé.Suivre une mission
Statut public, positions GPS du convoyeur et documents/PV de la mission.
Gestion des erreurs
Le format RFC 9457 et la liste des codes de conflit à gérer.
