Un transfert n'est utile que s'il est réellement récupéré. Entre l'envoi et le téléchargement, plusieurs étapes peuvent faire décrocher un destinataire : l'e-mail n'arrive pas, le lien n'est jamais ouvert, le mot de passe bloque, une restriction géographique s'applique. L'endpoint GET /v1/analytics/funnel reconstitue cet entonnoir pour votre espace de travail et chiffre, étape par étape, combien de transferts avancent et combien se perdent. Vous obtenez à la fois les volumes, les taux de conversion et des indices sur les points d'abandon, de quoi diagnostiquer un problème de diffusion sans interroger vos destinataires un par un.
Les quatre étapes
L'entonnoir suit quatre étapes ordonnées, de la création du transfert jusqu'au téléchargement effectif par un destinataire. Chaque étape porte un volume (count) et un taux de conversion (conversion_pct) calculé par rapport à l'étape précédente, la première étant à 100 %.
| Étape (stage) | Signification | Lecture côté destinataire |
|---|---|---|
| created | Le transfert a été créé dans l'espace de travail. | Point de départ, toujours 100 %. |
| uploaded | Les fichiers du transfert ont été déposés (sortie du brouillon). | L'envoi est prêt à être partagé. |
| opened | Le lien de partage a été ouvert. | Le destinataire a cliqué et atteint la page de téléchargement (passage du mot de passe si protégé). |
| downloaded | Au moins un fichier a été téléchargé. | Objectif atteint : le contenu est récupéré. |
Requête
GET/v1/analytics/funnelRenvoie l'entonnoir création → dépôt → ouverture → téléchargement pour l'espace de travail, avec les points d'abandon.L'appel exige le scope analytics:read sur votre clé. Un seul paramètre de requête est accepté : range_days, la fenêtre d'analyse en jours. Sa valeur va de 1 à 365 (les valeurs hors plage sont ramenées dans ces bornes) et vaut 30 par défaut. C'est une lecture seule : aucun en-tête Idempotency-Key n'est requis.
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
| range_days | entier (1–365) | 30 | Nombre de jours analysés, en remontant à partir d'aujourd'hui. |
Réponse
La réponse contient la fenêtre appliquée (range_days), le tableau stages des quatre étapes, et dropoff_points, la liste des transitions d'une étape à la suivante avec le nombre de transferts perdus (lost) et un indice de cause (reason_hint, ou null si la perte reste normale).
| Champ | Type | Description |
|---|---|---|
| range_days | entier | Fenêtre réellement appliquée, en jours. |
| stages[].stage | chaîne | created, uploaded, opened ou downloaded. |
| stages[].count | entier | Nombre de transferts ayant atteint cette étape. |
| stages[].conversion_pct | entier | Pourcentage par rapport à l'étape précédente (100 pour created). |
| dropoff_points[].from | chaîne | Étape de départ de la transition. |
| dropoff_points[].to | chaîne | Étape d'arrivée de la transition. |
| dropoff_points[].lost | entier | Transferts perdus entre les deux étapes. |
| dropoff_points[].reason_hint | chaîne ou null | Indice de cause quand la perte dépasse un seuil, sinon null. |
Comprendre les abandons
Le champ reason_hint n'apparaît que lorsqu'une perte sort de l'ordinaire ; il oriente le diagnostic vers la bonne cause. À partir des trois transitions, vous savez immédiatement où agir.
- created → uploaded : une perte ici signale des transferts restés en brouillon, fichiers jamais déposés. Vérifiez le déroulé de l'envoi côté client.
- uploaded → opened : c'est l'étape de diffusion. Une perte forte pointe vers un e-mail non reçu ou non cliqué : contrôlez la délivrabilité, l'objet du message et le bon destinataire.
- opened → downloaded : le lien est ouvert mais le fichier n'est pas récupéré. Un mot de passe, une restriction géographique ou une étape de vérification peuvent bloquer le destinataire au dernier moment.
Construire un suivi
L'exemple suivant calcule un taux de bout en bout (transferts téléchargés rapportés aux transferts créés) et met en avant la première transition qui dépasse un seuil d'abandon, pour alimenter un tableau de bord ou une alerte interne.
Erreurs
Si la clé ne porte pas le scope analytics:read, l'API répond 403 avec le code scope_missing. Comme partout, le corps d'erreur suit le format standard avec un request_id à citer en cas de support.