Lire les statistiques d'une campagne

GET /api/v1/campaigns/{campaignId}/stats Les performances de la campagne — les mêmes chiffres que l'écran Stats.
ChampDescription
sentE-mails réellement expédiés
deliveredsent moins bounced
bouncedEnvois rejetés par le serveur destinataire
uniqueOpens / openRateContacts ayant ouvert au moins une fois, et leur part de delivered
uniqueClicks / clickRateContacts ayant cliqué au moins une fois, et leur part de delivered
unsubscribed / unsubscribeRateDésabonnements attribués à cette campagne, et leur part de delivered
topicOptOutsDestinataires qui ont désactivé un sujet via cette campagne — ils restent abonnés
clicksByLinkPar URL : {url, uniqueClicks, totalClicks}
clicksOverTimePar jour : {date, clicks}, date au format YYYY-MM-DD
opensOverTimePar jour : {date, opens}, date au format YYYY-MM-DD
clicksByHour / opensByHourPar heure depuis l'envoi : {hour, clicks} / {hour, opens}, hour de 0 à 47
Les quatre séries vont par paires assorties, pour comparer clics et ouvertures sur le même axe. La paire quotidienne est indexée par date calendaire et ne liste que les jours avec de l'activité ; la paire horaire est indexée par heures pleines écoulées depuis sentAt et porte toujours les 48 créneaux, heures creuses comprises. Les ouvertures comptent les premières ouvertures, une par destinataire au plus. unsubscribed et topicOptOuts comptent deux départs différents et ne se recoupent jamais. Quelqu'un qui se désabonne cesse de recevoir tout ce que vous envoyez ; quelqu'un qui désactive un sujet continue de recevoir le reste. Les lire ensemble vous dit si une campagne a perdu une audience ou seulement un sujet. topicOptOuts ne couvre que les campagnes envoyées depuis que les désactivations de sujet sont enregistrées — les plus anciennes affichent 0. Les taux sont des parts de delivered, pas de sent — une adresse en rebond n'a jamais eu l'occasion d'ouvrir. Tant que rien n'est délivré, le dénominateur est nul et chaque taux vaut 0, jamais NaN : interrogez progress sur la campagne elle-même pour savoir si l'envoi est terminé avant d'en tirer la moindre conclusion. Une campagne d'une autre organisation répond 404, comme un id qui n'existe pas.

Autorisation

Rôle dans l'organisationCet endpoint
OWNERAutorisé
ADMINAutorisé
MEMBERAutorisé
Une clé porte le rôle que son créateur détient dans cette organisation — jamais un rôle sur AgentsMail lui-même. Voir Clés d'API.

Exemple

bash
curl -H "x-api-key: $AGENTMAIL_API_KEY" \
  "https://www.agentsmail.io/api/v1/campaigns/$CAMPAIGN_ID/stats"

Réponse

  • 200 OK — l'appel a réussi.
  • 401 Unauthorized — clé absente ou invalide, ou son propriétaire a quitté l'organisation.
  • 404 Not Found — aucune ressource de ce type, ou elle appartient à une autre organisation. L'API ne confirme jamais l'existence d'un id à un appelant qui n'y a pas droit.
  • 429 Too Many Requests — plus de 120 requêtes en une minute pour cette clé.

Champs de la réponse

ChampTypeDescription
successbooleanIndique si l'opération a réussi
data.sentnumberE-mails remis au fournisseur
data.deliverednumberAcceptés par le serveur destinataire
data.bouncednumberRejetés définitivement — l'adresse passe sur la liste de suppression
data.uniqueOpensnumberDestinataires ayant chargé le pixel de suivi au moins une fois
data.openRatenumberCalculé sur les délivrés, pas sur les envoyés
data.uniqueClicksnumberDestinataires ayant suivi au moins un lien suivi
data.clickRatenumberMême base
data.unsubscribednumberDestinataires partis via cette campagne
data.unsubscribeRatenumberMême base
data.topicOptOutsnumberDestinataires ayant désactivé un sujet via cette campagne, toujours abonnés
data.clicksByLinkarrayUne entrée par URL suivie
data.clicksOverTimearrayClics regroupés par période

Exemple de réponse

json
{
  "success": true,
  "data": {
    "sent": 12,
    "delivered": 12,
    "bounced": 12,
    "uniqueOpens": 12,
    "openRate": 12,
    "uniqueClicks": 12,
    "clickRate": 12,
    "unsubscribed": 12,
    "unsubscribeRate": 12,
    "topicOptOuts": 3,
    "clicksByLink": [
      {
        "url": "https://example.com",
        "clicks": 42
      }
    ],
    "clicksOverTime": [
      {
        "at": "2026-08-23T11:00:00.000Z",
        "clicks": 12
      }
    ]
  }
}

Voir aussi