Le modèle push en bref
À chaque événement (création d’une mission, attribution d’un convoyeur, enlèvement, ajout d’un document…), My Express Driver envoie une requêtePOST HTTPS vers l’endpoint que vous avez configuré. Le corps contient l’événement, et quatre en-têtes permettent de vérifier son authenticité et de le dédupliquer.
Temps réel
Vous êtes notifié au moment où l’événement se produit, sans polling.
Signé HMAC-SHA256
Chaque livraison est signée avec votre secret. Vous pouvez prouver qu’elle vient bien de My Express Driver.
Livraison garantie
Modèle
at-least-once : retries avec backoff exponentiel jusqu’à acquittement.Réconciliable
Un journal d’événements et un état des livraisons comblent les éventuels trous.
Tous les webhooks portent sur le périmètre de la clé API qui a créé l’endpoint, c’est-à-dire les missions de votre groupe. Vous ne recevrez jamais d’événements concernant un autre groupe.
Mise en place
Créez un endpoint dans la console
Depuis l’onglet « API & Intégrations » de votre profil client, ajoutez un endpoint webhook. Deux informations sont requises :
- L’URL de réception. Elle doit être publique et en HTTPS (
https://…). Les URL en clair (http://) et les adresses internes/privées sont refusées. - Les événements auxquels vous abonner : soit
*(tous les événements), soit une liste explicite (par exempletransport.created,transport.status_changed).
Récupérez le secret de signature
À la création de l’endpoint, un secret de signature (
whsec_…) vous est affiché une seule fois. Il sert à vérifier la signature de chaque livraison.Vérifiez la signature de chaque requête
À chaque réception, recalculez la signature HMAC à partir du corps brut et de votre secret, puis comparez-la à l’en-tête
X-MED-Signature. Rejetez toute requête dont la signature ne correspond pas (voir Vérifier la signature).Anatomie d’une livraison
ChaquePOST sortant vers votre endpoint porte quatre en-têtes et un corps JSON.
En-têtes
Type de l’événement, par exemple
transport.created. Pratique pour router avant même de parser le corps.Identifiant stable de la livraison, conservé d’un essai à l’autre. C’est votre clé d’idempotence côté consommateur (voir Idempotence).
Horodatage d’émission en epoch (secondes). Sert à se protéger du rejeu : refusez une requête dont l’horodatage s’écarte de plus de 5 minutes de l’heure actuelle.
Signature HMAC-SHA256 au format
sha256=<hex>, calculée sur {X-MED-Timestamp}.{corps brut}.Corps
Le corps est un objet JSON portant l’événement. Le champdata varie selon le type.
Identifiant de l’événement.
Type d’événement (même valeur que l’en-tête
X-MED-Event-Type).Date d’émission de l’événement (ISO 8601).
Payload public de l’événement. Sa forme dépend du
type. Voir le catalogue détaillé sur la page Événements.Vérifier la signature
La signature garantit que la requête provient bien de My Express Driver et que son corps n’a pas été altéré. Elle est calculée ainsi :Livraison et fiabilité
At-least-once
La livraison est au moins une fois : dans de rares cas (timeout réseau, redéploiement de votre service), vous pouvez recevoir deux fois le même événement. C’est attendu — votre consommateur doit être idempotent.Retries avec backoff exponentiel
Si votre endpoint ne répond pas2xx (ou ne répond pas du tout), My Express Driver réessaie automatiquement, en espaçant les tentatives selon un backoff exponentiel. Après un nombre maximal de tentatives, la livraison passe au statut dead et n’est plus retentée automatiquement.
| Statut de livraison | Signification |
|---|---|
pending | En attente de premier envoi. |
delivering | Envoi en cours. |
succeeded | Votre endpoint a répondu 2xx. |
failed | Un essai a échoué ; un nouvel essai est planifié. |
dead | Nombre maximal de tentatives atteint, abandon. |
Circuit breaker
Un endpoint qui échoue de façon répétée est automatiquement désactivé (circuit breaker), afin de ne pas accumuler de livraisons vouées à l’échec. Une fois votre service réparé, réactivez l’endpoint depuis la console ; vous pourrez ensuite réconcilier les événements manqués.Idempotence côté consommateur
Puisque le même événement peut arriver plusieurs fois, dédupliquez surX-MED-Delivery-Id. Cet identifiant reste stable d’un essai à l’autre d’une même livraison.
Vérifier s'il est déjà connu
Si vous l’avez déjà traité, répondez
2xx immédiatement sans rejouer le traitement.Réconciliation
Le modèle étant at-least-once, prévoyez un filet de sécurité pour rattraper les événements qui n’auraient pas été livrés (endpoint indisponible, désactivé par le circuit breaker, etc.). Deux endpoints sont prévus pour cela.GET /events — rejouer le journal d'événements
GET /events — rejouer le journal d'événements
Liste les événements de votre groupe, filtrables par
type et since (ISO 8601), paginés par curseur. Conservez le created_at du dernier événement traité et appelez périodiquement GET /events?since=<dernier> pour combler les trous.GET /webhooks/deliveries — inspecter l'état des livraisons
GET /webhooks/deliveries — inspecter l'état des livraisons
Liste l’état de chaque livraison (un enregistrement par événement × endpoint), filtrable par
status. Idéal pour diagnostiquer les échecs après réactivation d’un endpoint.Stratégie recommandée : (1) gérez le flux temps réel via les webhooks signés, (2) dédupliquez sur
X-MED-Delivery-Id, et (3) faites tourner un job périodique sur GET /events?since=… pour garantir qu’aucun événement n’est perdu.Bonnes pratiques
- Exigez HTTPS public sur votre endpoint ; les URL internes/privées sont refusées.
- Vérifiez systématiquement la signature avec une comparaison à temps constant.
- Rejetez les requêtes dont l’horodatage
X-MED-Timestampdépasse 5 minutes d’écart. - Répondez
2xxvite et déportez le traitement lourd en asynchrone. - Dédupliquez sur
X-MED-Delivery-Id. - Branchez votre logique sur
typeet sur les en-têtes, jamais sur l’ordre des champs du corps.
Étapes suivantes
Catalogue d'événements
La liste complète des types d’événements et la forme de leur payload
data.Vérification de signature
Le détail du calcul HMAC et des exemples dans d’autres langages.
Démarrage rapide
Créez votre première mission et abonnez-vous à ses événements de bout en bout.
