Chaque mission de transport produit des documents : procès-verbaux (PV) d’inspection au départ et à l’arrivée, PV signé, bons de livraison, factures. Ce guide explique comment les lister, suivre leur statut de validation, repérer ceux qui doivent encore être signés, et joindre vos propres pièces.
Seuls les documents à visibilité client sont exposés par l’API. Les documents internes (pièces convoyeur, justificatifs RH, etc.) ne sont jamais renvoyés, quel que soit votre scope.
Tous les endpoints de ce guide sont scopés au groupe de votre clé API. Une mission qui n’appartient pas à votre groupe renvoie 404 (jamais 403). Les requêtes GET exigent le scope transports:read ; l’ajout de documents (POST) exige transports:write.

Lister les documents d’une mission

Renvoie la liste des documents visibles client de la mission. Chaque entrée décrit un document (PV, bon, facture…) avec son lien de téléchargement et son statut de validation.
string
requis
Identifiant de la mission (offer_id).
boolean
Filtre les documents rattachés à la jambe retour de la mission (aller-retour). Omettez ce paramètre pour récupérer tous les documents.
Réponse 200

Champs d’un document

string | null
Clé technique stable du document (document_key). Utilisez-la pour identifier un type de document (PV de départ, PV signé, bon, facture…) plutôt que le label, qui est un libellé d’affichage.
string | null
Libellé lisible du document, destiné à l’affichage.
string | null
Lien de téléchargement du fichier (PDF généralement). Peut être null tant que le document n’a pas encore été produit.
string | null
Statut de validation du document. Voir le tableau ci-dessous.
boolean
true si le document concerne la jambe retour de la mission.
string | null
Nom de fichier d’origine.
string | null
Date de dépôt du document (ISO 8601).

Statuts d’un document

Branchez votre logique métier sur key et status, pas sur label. Le label est un texte d’affichage susceptible d’évoluer, tandis que key et status sont des valeurs stables.

Documents à signer

Renvoie uniquement les documents qui nécessitent une signature (typiquement les PV à faire contresigner). Utile pour piloter un rappel ou un flux de signature côté client.
string
requis
Identifiant de la mission (offer_id).
Réponse 200
La structure de chaque entrée est identique à celle de GET /transports/{id}/documents (voir Champs d’un document). Cet endpoint applique simplement un filtre supplémentaire sur les documents qui attendent une signature.

Récupérer le PV signé

Le PV signé est exposé comme tout autre document, via GET /transports/{id}/documents. Pour le récupérer :
1

Listez les documents de la mission

Appelez GET /transports/{id}/documents et repérez l’entrée dont la key correspond au PV signé.
2

Vérifiez le statut

Attendez que status vaille accepted pour être sûr que le PV signé est finalisé et validé.
3

Téléchargez le fichier

Suivez l’url de l’entrée pour récupérer le PDF.
Node.js
Plutôt que d’interroger l’endpoint en boucle (polling), abonnez-vous aux webhooks document.added et document.accepted. Vous serez notifié dès que le PV signé est déposé puis validé. Voir Vue d’ensemble des webhooks.

Joindre un document à une mission

Attache un ou plusieurs documents à la mission. Chaque document est décrit par un name (libellé) et un link (URL HTTPS publiquement accessible depuis laquelle MED récupère le fichier).
string
requis
Identifiant de la mission (offer_id).
array
requis
Tableau d’au moins un document. Chaque élément contient :
L’ajout de documents est une opération mutante : pensez à fournir un en-tête Idempotency-Key pour la rendre rejouable sans doublon. Après un 502 avec code: relay_timeout, le dépôt a pu aboutir : réessayez avec la même clé et le même corps, ce nouvel essai ne devrait pas dupliquer les documents. Voir Idempotence.

Réponse 200, 207 Multi-Status ou 422

Chaque document est traité indépendamment, et la réponse détaille le résultat document par document dans data. Un document peut échouer (lien injoignable, format invalide…) sans faire échouer les autres. Le code HTTP résume l’ensemble :
Réponse 207
array
Résultat par document, dans l’ordre de la requête.
Avec un 207, le code HTTP ne reflète pas le succès de chaque document : inspectez toujours le champ success de chaque entrée du tableau data, et rejouez sélectivement les documents en échec (avec une nouvelle clé, le corps ayant changé).

Erreurs

Comme partout dans l’API, les erreurs suivent la RFC 9457 (application/problem+json).
Exemple 422

Étapes suivantes

Suivi en temps réel

Positions GPS du convoyeur et étapes planifiées avec ETA.

Webhooks

Recevez document.added, document.accepted et document.rejected en temps réel.