Les webhooks d’inspection vous notifient en temps réel de la progression du PV digitalisé (procès-verbal d’état du véhicule) d’une de vos missions : ouverture d’une phase, fin d’une phase, inspection terminée, PV prêt. Le cas d’usage type : recevoir inspection.report_ready, puis récupérer le PV via GET /transports/{id}/inspection.
Ces événements partagent exactement la même mécanique de livraison que les webhooks de transport : même enveloppe { id, type, created_at, data }, mêmes en-têtes X-MED-*, même signature HMAC-SHA256. Si vous avez déjà branché les événements transport.*, vous n’avez rien à changer côté réception — voir Catalogue d’événements et Vérification de signature.

À qui s’adressent ces événements

Vous recevez un événement inspection.* lorsque la mission inspectée appartient à votre groupe. Le rattachement est dérivé côté serveur de l’identifiant de mission (offer_id) — vous ne recevez jamais l’inspection d’une mission d’un autre groupe.
Isolation (BOLA). Le routage s’appuie uniquement sur le groupe propriétaire réel de la mission. Une inspection rattachée à une mission hors de votre groupe n’est jamais livrée à votre endpoint, et GET /transports/{id}/inspection sur une mission qui ne vous appartient pas renvoie 404 (jamais 403).
Le produit d’inspection MED expose aussi ces mêmes événements à deux autres publics — un tenant du produit d’inspection en marque blanche, et une intégration MED globale. Cette page documente le scope groupe, le seul pertinent pour un client de l’API Transport (clé med_live_…).

Charge utile (data)

Tous les événements d’inspection portent la même structure de data. Branchez votre logique sur type (ou l’en-tête X-MED-Event-Type), jamais sur la forme de data.
inspection_id
string
Identifiant de l’inspection.
offer_id
string | null
Identifiant de la mission MED liée (le même id que dans l’API Transport, ex. M-54321). C’est la clé de rattachement et le paramètre de GET /transports/{offer_id}/inspection.
source
string
Origine de l’inspection : med (inspection d’une mission MED) ou iaas (produit d’inspection en marque blanche). Côté groupe, vous voyez med.
external_ref
string | null
Référence externe libre éventuellement posée à la création (binding côté partenaire).
phase
string | null
Phase concernée par l’événement : departure (enlèvement) ou arrival (livraison). null pour les événements non liés à une phase (inspection.created, inspection.completed, inspection.cancelled, inspection.report_ready).
status
string
Statut courant de l’inspection : pending, in_progress, completed ou cancelled.
inspection_type
string
one_way (aller simple) ou round_trip (aller-retour, deux phases).
vehicle
object
Identité minimale du véhicule : { plate, brand, model, vin }.
occurred_at
string
Horodatage de la transition observée, au format ISO 8601.
report_url
string | null
Souvent null. Le PDF du PV n’est pas servi par ce champ : récupérez-le via GET /transports/{offer_id}/inspection après inspection.report_ready (URLs re-signées, TTL 24 h).

Catalogue d’événements

Cycle de l'inspection

inspection.created, inspection.completed, inspection.cancelled

Phases (départ / arrivée)

inspection.departure.started, inspection.departure.completed, inspection.arrival.started, inspection.arrival.completed

PV prêt

inspection.report_ready — le pivot pour récupérer le PV
ÉvénementDéclencheurphase
inspection.createdInspection crééenull
inspection.departure.startedOuverture de la phase d’enlèvementdeparture
inspection.departure.completedPhase d’enlèvement terminéedeparture
inspection.arrival.startedOuverture de la phase de livraisonarrival
inspection.arrival.completedPhase de livraison terminéearrival
inspection.completedInspection terminée (toutes phases)null
inspection.cancelledInspection annuléenull
inspection.report_readyPV (PDF) généré et disponiblenull
Un endpoint peut s’abonner à toute la famille via inspection.*, à * (tous les événements), ou à une liste explicite de types. Pour une inspection one_way, inspection.departure.completed et inspection.completed sont émis tous les deux.

Détail des événements

Émis lorsqu’une inspection est créée pour la mission.
{
  "id": "8f2c1a9e-0b6d-4f2a-9c1e-2a3b4c5d6e7f",
  "type": "inspection.created",
  "created_at": "2026-06-30T09:00:00Z",
  "data": {
    "inspection_id": "insp_8a1c2e",
    "offer_id": "M-54321",
    "source": "med",
    "external_ref": null,
    "phase": null,
    "status": "pending",
    "inspection_type": "round_trip",
    "vehicle": { "plate": "AB-123-CD", "brand": "Renault", "model": "Clio", "vin": "VF1RJ000123456789" },
    "occurred_at": "2026-06-30T09:00:00Z",
    "report_url": null
  }
}
Émis à l’ouverture d’une phase d’inspection dans l’application (le convoyeur démarre le constat). phase vaut departure (enlèvement) ou arrival (livraison).
{
  "id": "c3a7d210-4e9f-4b6a-9f1d-77e0c2b8a1f4",
  "type": "inspection.departure.started",
  "created_at": "2026-06-30T10:05:00Z",
  "data": {
    "inspection_id": "insp_8a1c2e",
    "offer_id": "M-54321",
    "source": "med",
    "external_ref": null,
    "phase": "departure",
    "status": "in_progress",
    "inspection_type": "round_trip",
    "vehicle": { "plate": "AB-123-CD", "brand": "Renault", "model": "Clio", "vin": "VF1RJ000123456789" },
    "occurred_at": "2026-06-30T10:05:00Z",
    "report_url": null
  }
}
Émis lorsqu’une phase d’inspection est terminée (constat sauvegardé).
{
  "id": "5d2c8e91-7a3b-4c1d-9e0f-6b5a4c3d2e1f",
  "type": "inspection.arrival.completed",
  "created_at": "2026-06-30T18:30:00Z",
  "data": {
    "inspection_id": "insp_8a1c2e",
    "offer_id": "M-54321",
    "source": "med",
    "external_ref": null,
    "phase": "arrival",
    "status": "in_progress",
    "inspection_type": "round_trip",
    "vehicle": { "plate": "AB-123-CD", "brand": "Renault", "model": "Clio", "vin": "VF1RJ000123456789" },
    "occurred_at": "2026-06-30T18:30:00Z",
    "report_url": null
  }
}
Émis lorsque l’inspection passe au statut completed (toutes les phases requises sont terminées). Un seul signal « fini », sans détail de phase.
{
  "id": "9f0a1b2c-3d4e-5f6a-7b8c-9d0e1f2a3b4c",
  "type": "inspection.completed",
  "created_at": "2026-06-30T18:31:00Z",
  "data": {
    "inspection_id": "insp_8a1c2e",
    "offer_id": "M-54321",
    "source": "med",
    "external_ref": null,
    "phase": null,
    "status": "completed",
    "inspection_type": "round_trip",
    "vehicle": { "plate": "AB-123-CD", "brand": "Renault", "model": "Clio", "vin": "VF1RJ000123456789" },
    "occurred_at": "2026-06-30T18:31:00Z",
    "report_url": null
  }
}
Émis lorsque l’inspection passe au statut cancelled.
{
  "id": "2e4f6a8c-0b1d-4e3f-8a5c-7b9d0e1f2a3c",
  "type": "inspection.cancelled",
  "created_at": "2026-06-30T11:00:00Z",
  "data": {
    "inspection_id": "insp_8a1c2e",
    "offer_id": "M-54321",
    "source": "med",
    "external_ref": null,
    "phase": null,
    "status": "cancelled",
    "inspection_type": "round_trip",
    "vehicle": { "plate": "AB-123-CD", "brand": "Renault", "model": "Clio", "vin": "VF1RJ000123456789" },
    "occurred_at": "2026-06-30T11:00:00Z",
    "report_url": null
  }
}
L’événement pivot. Émis lorsque le PDF du PV est généré et disponible. Récupérez le contenu du PV via GET /transports/{offer_id}/inspection (le champ report_url du payload est généralement null — il ne sert pas le PDF).
{
  "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d",
  "type": "inspection.report_ready",
  "created_at": "2026-06-30T18:35:00Z",
  "data": {
    "inspection_id": "insp_8a1c2e",
    "offer_id": "M-54321",
    "source": "med",
    "external_ref": null,
    "phase": null,
    "status": "completed",
    "inspection_type": "round_trip",
    "vehicle": { "plate": "AB-123-CD", "brand": "Renault", "model": "Clio", "vin": "VF1RJ000123456789" },
    "occurred_at": "2026-06-30T18:35:00Z",
    "report_url": null
  }
}

Flux : du report_ready au PV

1

Recevez inspection.report_ready

Vérifiez la signature et l’horodatage, puis dédupliquez sur X-MED-Delivery-Id. Lisez data.offer_id.
2

Récupérez le PV

Appelez GET /transports/{offer_id}/inspection avec votre clé X-Api-Key (scope transports:read). La réponse contient les phases, champs, photos validées et le(s) PDF re-signé(s) (URLs valables 24 h).
3

Rattachez le PV à votre référence

Le report_ready signale ; le GET sert le contenu. Stockez ou rattachez le PV à votre mission / référence interne.
Le signal et le contenu sont volontairement séparés : le webhook reste léger et sans donnée volumineuse, et les URLs des PDF ne sont jamais figées dans un payload (elles expirent). Re-signature à la demande via le GET.

S’abonner aux événements d’inspection

Un endpoint webhook s’abonne à inspection.* (toute la famille) ou à une liste explicite de types. Un même groupe peut conserver en parallèle un abonnement transport.* et un abonnement inspection.* — ce sont des abonnements distincts sur le même mécanisme de livraison signé.
L’abonnement d’un groupe partenaire aux événements d’inspection est aujourd’hui provisionné par MED lors de l’onboarding (l’interface self-service ne propose pas encore la famille inspection.*). Contactez le support API (api@myexpressdriver.com) pour activer un endpoint d’inspection sur votre groupe.

Étapes suivantes

Vérification de signature

Recalculez le HMAC-SHA256, comparez à temps constant et bloquez les rejeux.

Catalogue transport

Les événements transport.* et document.* du cycle de vie d’une mission.