Référence de tous les événements webhook de l’API Transport My Express Driver : déclencheurs, en-têtes de livraison et exemples de payload.
Les webhooks vous notifient en temps réel de chaque changement sur vos missions :
création, attribution d’un convoyeur, enlèvement, documents, refacturation, annulation…
Plutôt que d’interroger l’API en boucle, vous recevez un POST HTTPS signé dès qu’un
événement se produit.Cette page liste tous les types d’événements émis par l’API, leur déclencheur et un
exemple complet de payload. Pour configurer un endpoint et valider l’authenticité d’une
livraison, voir la page Vérification de signature.
Tous les événements partagent la même enveloppe JSON : { id, type, created_at, data }.
Seul le contenu de data change selon le type. Branchez votre routage sur le champ
type (ou l’en-tête X-MED-Event-Type), jamais sur la structure de data.
Identifiant unique de l’événement (UUID). Stable, mais pas une clé d’idempotence de
livraison — pour la déduplication, utilisez l’en-tête X-MED-Delivery-Id.
Epoch en secondes au moment de l’envoi. Sert à l’anti-rejeu : rejetez une livraison
dont l’horodatage s’écarte de plus de 5 minutes de l’heure courante.
Signature HMAC-SHA256 au format sha256=<hex>, calculée sur
"{X-MED-Timestamp}.{rawBody}" avec votre signing secret. Voir
Vérification de signature.
La livraison est at-least-once : un même événement peut arriver plusieurs fois.
Dédupliquez systématiquement sur X-MED-Delivery-Id et répondez 2xx rapidement
pour acquitter.
Un endpoint peut s’abonner à tous les événements (*) ou à une liste explicite de
types. Le tableau ci-dessous résume chaque type ; les sections suivantes détaillent le
payload.
Émis lorsqu’un convoyeur est attribué à la mission. L’identité du convoyeur est
partielle (prénom/nom, téléphone et email masqués) conformément au RGPD.
Émis lorsqu’une ou plusieurs jambes voient leurs dates modifiées (via
PATCH /transports/{id}/dates). Le champ updated_legs liste uniquement les jambes
réellement modifiées.
Valeurs possibles de updated_legs : enlevement-aller, livraison-aller,
enlevement-retour, livraison-retour.
transport.price_adjusted — Refacturation ou option
Émis après une refacturation (POST /transports/{id}/price-adjustments) ou un
ajout/retrait d’option (POST/DELETE /transports/{id}/options/...). Le contenu
de data dépend de l’origine de l’ajustement — seul le prix HT facturé au client
est exposé, jamais la rémunération convoyeur.Refacturation d’une jambe :
Émis lorsqu’un document est refusé. Le commentaire interne de rejet n’est jamais
exposé : le client voit seulement que le document est passé au statut refused.
Émis quand vous cliquez sur « Tester » dans l’onglet « API & Intégrations » de votre
profil client. Utilisez-le pour valider que votre endpoint reçoit, vérifie la signature
et répond 2xx correctement. Le contenu de data est libre et ne reflète aucune mission
réelle.
{ "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "type": "webhook.test", "created_at": "2026-06-17T10:00:00Z", "data": { "message": "Ceci est un événement de test." }}
À la configuration d’un endpoint, abonnez-vous à * (tous les événements) ou à une
liste explicite de types (ex. transport.created, transport.completed).
2
Vérifier chaque livraison
Validez la signature X-MED-Signature et l’horodatage X-MED-Timestamp avant de
traiter le corps. Voir Vérification de signature.
3
Dédupliquer et acquitter
Dédupliquez sur X-MED-Delivery-Id, puis répondez 2xx rapidement. Effectuez le
traitement lourd en asynchrone.
4
Combler les trous
En cas d’endpoint indisponible, rejouez les événements manqués via
GET /events?since=<ISO8601> et inspectez l’état des livraisons avec
GET /webhooks/deliveries?status=failed.
Conservez le dernier created_at traité et appelez périodiquement
GET /events?since=<dernier> pour garantir qu’aucun événement n’est perdu, même si un
webhook a échoué.