Campagnes
Créez des campagnes, choisissez leurs listes de contacts et leurs segments, puis envoyez-les ou programmez-les.
Créer une campagne
Crée une campagne au statut draft. Nécessite une clé API avec la portée full. Émet l’événement campaign.created.
Une nouvelle campagne n’a aucun destinataire. Choisissez ses listes de contacts et ses segments avec Mettre à jour une campagne, puis envoyez-la ou programmez-la. Les crédits sont débités à l’envoi de la campagne : 2 crédits par e-mail.
/campaignsParamètres du corps
namestringobligatoiresubjectstring{{first_name}}.from_emailstringnews@acme.com.from_namestringAcme. Le message est envoyé depuis Acme <news@acme.com>.reply_tostringfrom_email par défaut lors de l’envoi de la campagne.htmlstring{{first_name}}, {{last_name}}, {{email}}, {{unsubscribe_url}} et {{cf.<key>}} pour les champs personnalisés, avec des valeurs de repli et des blocs {{#if}}. Définissez le corps lors de la création de la campagne.textstringhtml.preview_textstring<mj-preview> MJML).contentstringhtml ni text et que content_type vaut html ou text, Emailit envoie content comme corps HTML ou en texte brut.content_typestringpar défaut : htmlcontent : html, text ou mjml. Pour l’équipe Emailit, Emailit compile le contenu mjml en html (alpha). Pour tous les autres, mjml est un simple libellé : envoyez le HTML compilé dans html.utm_trackingbooleanpar défaut : falsetrue pour ajouter des paramètres UTM à chaque lien http et https à l’envoi de la campagne, afin que vos outils d’analyse web attribuent les visites à la campagne. Les paramètres qu’un lien contient déjà sont conservés, et les liens de désinscription et de version web ne sont pas modifiés. Consultez Options d’envoi.utm_paramsobject | nullValeurs UTM utilisées quand utm_tracking est activé. Chaque clé définit un paramètre utm_ :
source(par défautemailit),medium(par défautemail) etcampaign(par défaut{campaign_name}).content,termetid, non ajoutés par défaut.
Les valeurs sont du texte de 191 caractères au maximum et peuvent contenir les jetons {campaign_name} (le nom de la campagne en minuscules, avec des tirets), {campaign_id}, {subject}, {variant} (le nom de la version du test A/B) et {send_date} (YYYY-MM-DD). Les clés et jetons inconnus renvoient 422. Les clés que vous ne définissez pas gardent leur valeur par défaut ; null ou {} les réinitialise toutes.
smart_sending_hoursinteger | nullnull (par défaut) désactive l’envoi intelligent. Vérifié au début de l’envoi de la campagne. Les e-mails des automatisations et de l’API e-mail ne comptent pas.exclude_unengagedbooleanpar défaut : falsetrue pour écarter les contacts qui ont reçu au moins 3 e-mails de campagne au cours des 90 derniers jours sans en ouvrir ni en cliquer aucun.tagsstring[]tags remplace la liste.send_strategystringpar défaut : immediateimmediate, throttled, local_time ou smart_time. Enregistré avec la campagne et utilisé quand vous l’envoyez sans stratégie.send_optionsobject | nullsend_strategy, enregistrées telles quelles et vérifiées en entier à l’envoi de la campagne. Consultez Envoyer ou programmer une campagne.ab_testobject | nullUn test A/B de 2 à 5 versions. Une part aléatoire des destinataires est répartie à parts égales entre les versions. Après duration_hours, le reste des destinataires reçoit la version qui a obtenu le meilleur résultat. Pendant le test, la campagne a le statut testing. Les tests A/B sont envoyés avec la stratégie immediate, tout de suite ou à une heure programmée.
enabled(booléen, par défauttrue) :falsedésactive le test.winner_metric(chaîne, par défautopened) :opened,clicked,orders(commandes attribuées par e-mail envoyé) ourevenue(chiffre d’affaires attribué par e-mail envoyé).ordersetrevenuefont partie de Commerce, qui est en alpha : les autres requêtes renvoient403avecerror: "commerce_alpha".test_size_percent(entier, par défaut20) : part des destinataires inclus dans le test, de 10 à 100. À 100, tout le monde fait partie du test et aucune gagnante n’est envoyée.duration_hours(entier, par défaut4) : durée du test avant l’envoi de la gagnante, de 1 à 168.variants(tableau d’objets, obligatoire) : de 2 à 5 versions. Chacune peut définirname(100 caractères au maximum, par défautA,B,C, etc.),subject,preview_text,from_name,from_email,reply_to,htmlettext. Les champs qu’une version omet proviennent de la campagne. Au moins une version doit définir un objet, un texte d’aperçu, un nom ou une adresse d’expéditeur, ou un corps.
Réponse
Renvoie 201 Created avec l’objet campagne. status vaut draft. La réponse ne renvoie pas html, text ni content. Elle contient les paramètres ci-dessus, send_completes_at et send_summary (tous deux null jusqu’à l’envoi de la campagne), et ab_test avec les versions et leurs ID (cvr_…). Consultez Récupérer une campagne.
Renvoie 400 si name est absent, 403 si la clé API n’a pas la portée full, et 422 si un paramètre ou le test A/B n’est pas valide.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "draft",
"subject": "October news for {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"created_at": "2026-10-01T09:30:12.482193Z",
"updated_at": "2026-10-01T09:30:12.482193Z",
"utm_tracking": false,
"utm_params": null,
"smart_sending_hours": null,
"exclude_unengaged": false,
"tags": [],
"send_strategy": "immediate",
"send_options": null,
"send_completes_at": null,
"send_summary": null,
"ab_test": {
"enabled": false,
"variants": []
}
}{
"error": "Bad Request"
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Permission denied: campaigns:create"
}{
"message": "Validation failed. ab_test.variants: Send 2 to 5 variants.",
"errors": {
"ab_test.variants": ["Send 2 to 5 variants."]
}
}Récupérer une campagne
Récupère une campagne par son ID ou son nom. Nécessite une clé API avec la portée full.
/campaigns/{id}Paramètres de chemin
idstringobligatoirecmp_…) ou son nom. Encodez pour l’URL les noms qui contiennent des espaces ou des caractères spéciaux.Réponse
Renvoie l’objet campagne.
objectstringcampaign.idstringcmp_.statusstringdraft, scheduled, queued, sending, testing, sent, canceled ou archived. queued signifie qu’une campagne programmée a atteint son heure d’envoi et attend un worker. testing signifie qu’un test A/B est en cours et que la gagnante n’a pas encore été envoyée. Un envoi étalé dans le temps reste sending jusqu’à l’échéance de son dernier lot.namestringsubjectstringfrom_emailstring"" tant qu’elle n’est pas définie.from_namestring"" tant qu’il n’est pas défini.reply_tostring"" signifie que les réponses vont à from_email.preview_textstring | nullcontent_typestringhtml, text ou mjml pour les campagnes créées via l’API. Les campagnes dont Emailit a compilé le MJML (alpha) renvoient aussi un objet mjml avec les versions du document.scheduled_atstring | nullsent_atstring | nullutm_trackingbooleanutm_paramsobject | nullnull. Consultez Créer une campagne.smart_sending_hoursinteger | nullnull quand l’envoi intelligent est désactivé.exclude_unengagedbooleantagsstring[]send_strategystringimmediate, throttled, local_time ou smart_time.send_optionsobject | nullsend_completes_atstring | nullsent.send_summaryobject | nullCe qu’a fait le dernier envoi, ou null avant l’envoi de la campagne :
recipients: les contacts des listes et des segments, une seule fois par adresse.suppressed: écartés parce que l’adresse est bloquée.smart_sending_skipped: écartés parsmart_sending_hours.unengaged_skipped: écartés parexclude_unengaged.sent: les contacts à qui la campagne a été envoyée. Pour un test A/B, uniquement le groupe de test.batches: nombre de lots d’envoi.completes_at: identique àsend_completes_at.
ab_testobjectLe test A/B. Sans test : { "enabled": false, "variants": [] }. Avec un test : enabled, winner_metric, test_size_percent, duration_hours et variants. Chaque version a id (cvr_…), name, subject, preview_text, from_name, from_email, reply_to, html, text (null quand la version utilise la valeur de la campagne) et is_winner. Consultez Créer une campagne.
recipientsobject[]audience_id (aud_…), soit segment_id (seg_…), ainsi que exclude (true pour une exclusion).Le corps (html, text et content) n’est pas inclus dans la réponse. Pour l’engagement et le chiffre d’affaires, utilisez Récupérer les statistiques d’une campagne ou le rapport du tableau de bord, sous Email MarketingCampaigns.
Renvoie 404 si aucune campagne de l’espace de travail ne correspond à id.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "scheduled",
"subject": "October news for {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"sent_at": null,
"scheduled_at": "2026-10-08 09:00:00+00",
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-01 10:02:47.118204+00",
"utm_tracking": true,
"utm_params": {
"campaign": "{campaign_name}-{send_date}"
},
"smart_sending_hours": 16,
"exclude_unengaged": true,
"tags": ["newsletter", "q4"],
"send_strategy": "throttled",
"send_options": {
"per_hour": 5000
},
"send_completes_at": null,
"send_summary": null,
"ab_test": {
"enabled": false,
"variants": []
},
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "segment_id": "seg_3Kq8VbN2xYt5Lm9Pw1Rc7Hd4Zf0", "exclude": true }
]
}{
"error": "Campaign not found"
}Mettre à jour une campagne
Met à jour les champs transmis et laisse les autres inchangés. Utilisez cet endpoint pour choisir les listes de contacts et les segments de la campagne avant de l’envoyer. Nécessite une clé API avec la portée full. Émet l’événement campaign.updated.
Une campagne programmée envoie le contenu enregistré à son heure d’envoi : vous pouvez donc encore la modifier après l’avoir programmée.
/campaigns/{id}Paramètres de chemin
idstringobligatoirecmp_…) ou son nom.Paramètres du corps
namestringsubjectstringfrom_emailstringfrom_namestringreply_tostringfrom_email.preview_textstringcontentstringcontent ou content_type et que le format est html ou text, Emailit envoie content comme nouveau corps HTML ou en texte brut.content_typestringcontent : html, text ou mjml. Pour l’équipe Emailit, Emailit compile le contenu mjml en html (alpha). Pour tous les autres, mjml est un simple libellé.utm_trackingbooleanutm_paramsobject | nullsource, medium, campaign, content, term et id. Remplace l’objet enregistré ; null rétablit les valeurs par défaut. Consultez Créer une campagne.smart_sending_hoursinteger | nullnull le désactive.exclude_unengagedbooleantagsstring[]send_strategystringimmediate, throttled, local_time ou smart_time. Utilisé quand vous envoyez la campagne sans stratégie.send_optionsobject | nullsend_strategy, vérifiées en entier à l’envoi de la campagne. Consultez Envoyer ou programmer une campagne.ab_testobject | nullLe test A/B, avec les champs décrits dans Créer une campagne. Envoyer ab_test remplace le test et ses versions. Pour conserver l’ID d’une version, et avec lui ses résultats, incluez son id (cvr_…) dans la version. null ou "enabled": false désactive le test et supprime les versions.
recipientsobject[]Les listes de contacts et les segments à cibler, 100 éléments au maximum. Remplace la liste actuelle. Incluez au moins un élément avec exclude défini sur false. Chaque élément contient soit audience_id, soit segment_id, pas les deux :
audience_id(chaîne) : un ID de liste (aud_…) de cet espace de travail.segment_id(chaîne) : un ID de segment (seg_…) de cet espace de travail. Les segments sont en alpha : seule l’équipe Emailit peut en ajouter un, et les autres requêtes renvoient403avecerror: "segments_alpha". Les segments que la campagne contient déjà peuvent être conservés.exclude(booléen, par défautfalse) :trueexclut les abonnés de la liste ou les contacts du segment, même s’ils figurent aussi dans un élément inclus.
Les éléments en double sont ignorés. Au moment de l’envoi, Emailit envoie un e-mail une seule fois à chaque contact abonné à une liste incluse ou correspondant à un segment inclus, s’il ne figure dans aucun élément exclu, n’est pas désinscrit de toutes les listes, est abonné à au moins une liste et n’est pas bloqué. Les segments sont évalués au moment de l’envoi. Si une liste ou un segment exclu n’existe plus à ce moment-là, la campagne n’est pas envoyée.
Le corps HTML et le corps texte sont définis lors de la création de la campagne. Les champs inconnus du corps de la requête sont ignorés.
Réponse
Renvoie l’objet campagne mis à jour, avec recipients et ab_test. Consultez Récupérer une campagne.
Renvoie 422 si recipients ne contient aucune liste ni aucun segment inclus, compte plus de 100 éléments, contient un élément avec les deux ID ou fait référence à une liste ou à un segment extérieur à l’espace de travail. Renvoie aussi 422 quand un paramètre ou le test A/B n’est pas valide, ou quand vous envoyez ab_test pour une campagne qui n’est ni un brouillon ni programmée, et 404 si la campagne n’existe pas.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "draft",
"subject": "Your October update, {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"reply_to": "support@acme.com",
"preview_text": null,
"content_type": "html",
"scheduled_at": null,
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-01 10:02:47.118204+00",
"utm_tracking": false,
"utm_params": null,
"smart_sending_hours": null,
"exclude_unengaged": false,
"tags": [],
"send_strategy": "immediate",
"send_options": null,
"send_completes_at": null,
"send_summary": null,
"ab_test": {
"enabled": false,
"variants": []
},
"recipients": [
{ "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV", "exclude": false },
{ "segment_id": "seg_3Kq8VbN2xYt5Lm9Pw1Rc7Hd4Zf0", "exclude": true }
]
}{
"message": "Validation failed.",
"errors": {
"recipients": ["One or more segments are invalid."]
}
}{
"error": "Campaign not found"
}Lister les campagnes
Renvoie les campagnes de l’espace de travail, de la plus récente à la plus ancienne. Nécessite une clé API avec la portée full.
/campaignsParamètres de requête
pageintegerpar défaut : 1limitintegerpar défaut : 10searchstringstatusstringdraft, scheduled, sending (correspond aussi à queued), sent, canceled, archived ou all.matchstringall (par défaut) exige que tous les filtres correspondent. Avec or, il suffit qu’un filtre corresponde. Consultez Filtrage et tri.
orderstringClé de tri de cette liste. Consultez les clés de tri ci-dessous.
directionstringasc ou desc.
Clés de filtre
Les filtres utilisent des paramètres de requête key.condition=value, par exemple status.exact=sent ou created_at.after=2026-09-01. Pour les conditions propres à chaque type, consultez Filtrage et tri.
| Clé | Type | Remarques |
|---|---|---|
name |
chaîne | |
subject |
chaîne | |
status |
énumération | draft, scheduled, queued, sending, sent, archived |
created_at |
date | |
sent_at |
date |
Clés de tri pour order : name, subject, status, created_at, sent_at.
Réponse
Renvoie une page d’objets campagne sans reply_to, preview_text, content_type ni recipients, et avec seulement tags, send_strategy et send_completes_at parmi les options d’envoi. Pour le reste, utilisez Récupérer une campagne.
dataobject[]total_recordsintegernext_page_urlstring | nullnull sur la dernière page. Il ne contient que page et limit : ajoutez de nouveau votre recherche et vos filtres quand vous le suivez.previous_page_urlstring | nullnull sur la première page.{
"data": [
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "sent",
"subject": "Your October update, {{first_name}}",
"from_email": "news@acme.com",
"from_name": "Acme",
"sent_at": "2026-10-08 09:00:04+00",
"scheduled_at": "2026-10-08 09:00:00+00",
"created_at": "2026-10-01 09:30:12.482193+00",
"updated_at": "2026-10-08 09:00:31+00",
"tags": ["newsletter"],
"send_strategy": "immediate",
"send_completes_at": null
}
],
"total_records": 34,
"next_page_url": "/v2/campaigns?page=2&limit=20",
"previous_page_url": null
}Envoyer ou programmer une campagne
Envoie la campagne immédiatement, ou la programme si vous transmettez un scheduled_at dans le futur. Nécessite une clé API avec la portée full et un espace de travail vérifié : les espaces de travail non vérifiés ne peuvent pas envoyer de campagnes et reçoivent 403. Seules les campagnes en brouillon ou programmées peuvent être envoyées : une campagne en cours d’envoi ou déjà envoyée renvoie 422, de sorte qu’une requête relancée n’envoie pas de nouveau l’e-mail à tout le monde.
Avant l’envoi, vérifiez que la campagne a une adresse from_email sur un domaine vérifié, un objet, un corps html ou text et au moins une liste de contacts ou un segment inclus (définis avec Mettre à jour une campagne). Chaque e-mail coûte 2 crédits.
/campaigns/{id}/sendParamètres de chemin
idstringobligatoirecmp_…) ou son nom.Paramètres du corps
scheduled_atstringDate d’envoi. Accepte le format ISO 8601 (2026-10-08T09:00:00Z), un horodatage Unix en secondes ou du langage naturel comme tomorrow at 9am (interprété en UTC). L’heure doit être dans le futur et la campagne doit être au statut draft.
Omettez-le pour envoyer immédiatement. Pour envoyer une campagne programmée plus tôt que prévu, appelez cet endpoint sans scheduled_at.
send_strategystringComment étaler l’envoi dans le temps. Par défaut, la stratégie enregistrée sur la campagne, sinon immediate. La stratégie et ses options sont enregistrées sur la campagne. Consultez Options d’envoi.
immediate: tout le monde en une seule fois, immédiatement ou àscheduled_at.throttled: un rythme régulier deper_houre-mails, à partir de maintenant ou descheduled_at.local_time: une heure donnée dans le fuseau horaire de chaque contact.scheduled_atest ignoré.smart_time: chaque contact à l’heure à laquelle il ouvre ou clique habituellement, dans une fenêtre comptée à partir du début.
Les campagnes avec un test A/B ne sont envoyées qu’avec immediate.
send_optionsobjectOptions de la stratégie. Par défaut, les options enregistrées sur la campagne.
throttled:per_hour(entier, obligatoire), de 100 à 1 000 000 e-mails par heure.local_time:local_time(chaîne, obligatoire), l’heure au formatYYYY-MM-DDTHH:mm, par exemple2026-10-08T09:00, ettimezone(chaîne, par défautUTC), le fuseau horaire IANA des contacts dont le fuseau horaire n’est pas connu. Les fuseaux horaires des contacts proviennent du script de suivi. L’envoi commence quand l’heure arrive dans le fuseau le plus en avance (UTC+14) ; les contacts des fuseaux où elle est déjà passée reçoivent l’e-mail immédiatement. Jusque-là, la campagne estscheduled: elle doit donc être un brouillon. Renvoie422quand l’heure est passée dans tous les fuseaux horaires.smart_time:window_hours(entier, par défaut24), de 1 à 48. Chaque contact reçoit l’e-mail à l’heure de la journée (UTC) à laquelle il a le plus ouvert ou cliqué au cours des 90 derniers jours, un clic comptant trois fois plus qu’une ouverture, quand cette heure tombe dans la fenêtre. Les contacts sans cet historique reçoivent l’e-mail à l’heure la plus fréquente parmi les autres destinataires. Ceux qui n’ont ni l’un ni l’autre, ou dont l’heure tombe hors de la fenêtre, le reçoivent au début.
timezone est accepté avec toutes les stratégies et doit être un fuseau horaire IANA valide, mais seul local_time l’utilise.
Réponse
Envoi immédiat : le statut passe à sending et Emailit émet campaign.sending. Emailit détermine ensuite les destinataires : chaque contact abonné des listes incluses et chaque contact correspondant aux segments inclus, une seule fois par adresse, sans les contacts des listes ou segments exclus, les contacts désinscrits de toutes les listes ou inscrits à aucune liste, ni les adresses bloquées. Les segments sont évalués à ce moment-là. Il ignore aussi les contacts écartés par smart_sending_hours et exclude_unengaged. Les e-mails sont créés aux heures fixées par la stratégie d’envoi. Une fois chaque destinataire transmis à la chaîne d’envoi, le statut passe à sent et Emailit émet campaign.sent. Un envoi étalé dans le temps reste sending jusqu’à l’échéance de son dernier lot (send_completes_at). Le send_summary de la campagne indique à combien de contacts la campagne a été envoyée et combien ont été écartés. Suivez la livraison dans le tableau de bord, avec Récupérer les statistiques d’une campagne ou avec les événements d’e-mail.
Test A/B : le groupe de test reçoit les versions et le statut passe à testing. Après duration_hours, le reste des destinataires reçoit la version gagnante et le statut passe à sent.
Programmation : le statut passe à scheduled et Emailit émet campaign.scheduled. À l’heure prévue, la campagne passe à queued (campaign.queued), puis est envoyée comme ci-dessus. Si une liste ou un segment exclu a été supprimé entre-temps, la campagne repasse à draft au lieu d’être envoyée.
La réponse contient object, id, name et le nouveau status, ainsi que scheduled_at en cas de programmation.
| Statut | Cas |
|---|---|
403 |
L’espace de travail n’est pas vérifié, ou la clé API n’a pas la portée full. |
404 |
Aucune campagne ne correspond à id. |
422 |
La campagne n’est ni un brouillon ni programmée (par exemple, elle est en cours d’envoi ou déjà envoyée), scheduled_at ne peut pas être analysé ou n’est pas dans le futur, vous avez tenté de programmer une campagne qui n’est pas un brouillon, la campagne n’a pas de corps html ou text, elle n’a pas de destinataires (définissez-les avec Mettre à jour une campagne), elle exclut une liste ou un segment qui n’existe plus, ou send_strategy et send_options ne sont pas valides. L’erreur liée à la stratégie nomme le champ dans message. |
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "scheduled",
"scheduled_at": "2026-10-08T09:00:00.000000Z"
}{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "sending"
}{
"code": "unverified_workspace_recipient",
"error": "Workspace not verified",
"message": "Unverified workspaces cannot send campaigns. You can send individual emails only to workspace members' account emails."
}{
"error": "Campaign cannot be sent",
"message": "Campaign status is 'sent'. Only draft or scheduled campaigns can be sent."
}{
"error": "Campaign excludes a deleted audience or segment",
"message": "This campaign excludes an audience or segment that no longer exists. Update its recipients before sending."
}{
"error": "Invalid send strategy",
"message": "send_options.per_hour: Send between 100 and 1,000,000 emails per hour."
}Annuler une campagne
Passe le statut de la campagne à canceled et émet l’événement campaign.canceled. Nécessite une clé API avec la portée full.
Seules les campagnes au statut draft ou sending peuvent être annulées ; tout autre statut renvoie 422. L’annulation d’une campagne en cours d’envoi ne rappelle pas les e-mails déjà en file d’attente de livraison.
/campaigns/{id}/cancelParamètres de chemin
idstringobligatoirecmp_…) ou son nom.Réponse
Renvoie object, id, name et status (canceled).
Renvoie 422 si le statut de la campagne n’est ni draft ni sending, et 404 si la campagne n’existe pas.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"status": "canceled"
}{
"error": "Campaign cannot be canceled",
"message": "Campaign status is 'scheduled'. Only 'draft' or 'sending' campaigns can be canceled."
}{
"error": "Campaign not found"
}Récupérer les statistiques d’une campagne
Récupère le rapport d’une campagne : combien d’e-mails ont été envoyés, livrés, ouverts et cliqués, les résultats par fournisseur de messagerie, le chiffre d’affaires des commandes attribuées à la campagne (Commerce, alpha) et, pour les tests A/B, les résultats par version. Le rapport du tableau de bord, sous Email MarketingCampaigns, affiche les mêmes chiffres. Nécessite une clé API avec la portée full.
Chaque décompte est un nombre d’e-mails : un e-mail ouvert trois fois compte une seule fois dans opened. Sauf indication contraire, les pourcentages sont relatifs à sent et ont deux décimales.
/campaigns/{id}/statsParamètres de chemin
idstringObligatoireL’ID de la campagne (cmp_...) ou son nom. Encodez pour l’URL les noms qui contiennent des espaces ou des caractères spéciaux.
Paramètres de requête
fromstringCompte uniquement les e-mails créés à partir de cette date, une date ou une date-heure ISO 8601.
tostringCompte uniquement les e-mails créés jusqu’à cette date incluse.
statusstringCompte uniquement les e-mails dont le statut actuel est celui-ci : accepted, scheduled, delivered, loaded, clicked, attempted, bounced, failed, rejected, suppressed ou complained. Les autres valeurs sont ignorées.
Les filtres s’appliquent aux décomptes d’e-mails, aux fournisseurs et aux décomptes du test A/B, et from et to s’appliquent aussi à unsubscribed. Le chiffre d’affaires, les commandes et les acheteurs couvrent toujours toutes les commandes attribuées à la campagne, et leurs taux utilisent tous les e-mails livrés de la campagne.
Réponse
objectstringToujours campaign_stats.
campaign_idstringL’ID de la campagne (cmp_...).
sentintegerLes e-mails créés pour la campagne. sent_percent vaut 100, ou 0 avant tout envoi.
delivered, delivered_percentinteger, numberLes e-mails dont le statut est delivered, loaded ou clicked.
opened, opened_percentinteger, numberLes e-mails ouverts au moins une fois.
clicked, clicked_percentinteger, numberLes e-mails avec au moins un clic suivi.
click_through_percentnumberclicked en pourcentage de opened.
bounced, suppressed, complained, attemptedintegerLes e-mails dont le statut est bounced, suppressed, complained ou attempted (en attente d’une nouvelle tentative). Chacun a aussi un champ _percent.
not_processed, not_processed_percentinteger, numberLes e-mails encore accepted ou scheduled.
unsubscribed, unsubscribed_percentinteger, numberDésinscriptions depuis les e-mails de la campagne.
providersobject[]Résultats par fournisseur de messagerie des destinataires, pour les fournisseurs qui ont reçu au moins un e-mail. key vaut gmail, outlook.com, live.com, hotmail.com, yahoo, icloud ou other, et label est son nom d’affichage. Chacun a sent, delivered, opened, clicked et bounced avec leurs champs _percent. sent_percent est la part du fournisseur dans l’ensemble des e-mails ; les autres pourcentages sont relatifs au sent du fournisseur.
commerceobjectRéservé à l’équipe Emailit tant que Commerce est en alpha : les autres requêtes ne reçoivent pas ce champ, et leurs variants A/B omettent orders, revenue et revenue_per_recipient. Les commandes attribuées à la campagne. Le chiffre d’affaires correspond au total des commandes moins les remboursements, et les commandes annulées ne comptent pas. Les montants dans des devises différentes ne sont pas additionnés : la devise principale est celle qui a le plus de chiffre d’affaires.
-
currency(chaîne ou null) : la devise principale. -
revenue(nombre) : le chiffre d’affaires dans la devise principale. -
orders(entier) : les commandes attribuées, toutes devises confondues. -
buyers(entier) : les acheteurs distincts, toutes devises confondues. Un acheteur qui a payé dans deux devises compte une seule fois. -
average_order_value(nombre) : dans la devise principale. -
conversion_percent(nombre) :buyersen pourcentage des e-mails livrés de la campagne. -
revenue_per_recipient(nombre) :revenuedivisé par le nombre d’e-mails livrés de la campagne. -
by_currency(tableau d’objets) :currency,orders,revenue,buyersetaverage_order_valuepour chaque devise, du chiffre d’affaires le plus élevé au plus faible.
ab_testobjectUniquement pour les campagnes avec un test A/B.
-
winner_metric(chaîne) :opened,clicked,ordersourevenue. -
leader_variant_id(chaîne ou null) : la version qui a le meilleur taux jusqu’ici (ouvertures, clics ou commandes par e-mail envoyé, ou chiffre d’affaires par e-mail envoyé). -
win_probability(nombre ou null) : la probabilité, en pourcentage, que la version en tête batte réellement la deuxième. -
significance(chaîne) :significant(90 % ou plus, avec au moins 50 e-mails par version),promising(75 % ou plus, même minimum),not_significant(moins de 75 % avec au moins 1 800 e-mails par version) ouinconclusive. Pourrevenue, la probabilité est calculée à partir des commandes. -
variants(tableau d’objets) : pour chaque version,variant_id,name,subject,is_winner,sent,delivered,opened,opened_percent,clicked,clicked_percent,orders,revenueetrevenue_per_recipient. Une fois la gagnante envoyée au reste de la liste, les décomptes de la version gagnante incluent ces e-mails.
Renvoie 404 si aucune campagne ne correspond à id, et 503 quand le stockage des statistiques n’est pas disponible.
{
"object": "campaign_stats",
"campaign_id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"sent": 12480,
"sent_percent": 100,
"delivered": 12302,
"delivered_percent": 98.57,
"opened": 5021,
"opened_percent": 40.23,
"clicked": 1187,
"clicked_percent": 9.51,
"click_through_percent": 23.64,
"bounced": 98,
"bounced_percent": 0.79,
"suppressed": 42,
"suppressed_percent": 0.34,
"complained": 3,
"complained_percent": 0.02,
"attempted": 0,
"attempted_percent": 0,
"not_processed": 38,
"not_processed_percent": 0.3,
"unsubscribed": 27,
"unsubscribed_percent": 0.22,
"providers": [
{
"key": "gmail",
"label": "Gmail",
"sent": 7310,
"sent_percent": 58.57,
"delivered": 7236,
"delivered_percent": 98.99,
"opened": 3102,
"opened_percent": 42.44,
"clicked": 741,
"clicked_percent": 10.14,
"bounced": 41,
"bounced_percent": 0.56
},
{
"key": "other",
"label": "Other",
"sent": 5170,
"sent_percent": 41.43,
"delivered": 5066,
"delivered_percent": 97.99,
"opened": 1919,
"opened_percent": 37.12,
"clicked": 446,
"clicked_percent": 8.63,
"bounced": 57,
"bounced_percent": 1.1
}
],
"commerce": {
"currency": "USD",
"revenue": 17311.9,
"orders": 214,
"buyers": 198,
"average_order_value": 86.13,
"conversion_percent": 1.61,
"revenue_per_recipient": 1.41,
"by_currency": [
{
"currency": "USD",
"orders": 201,
"revenue": 17311.9,
"buyers": 186,
"average_order_value": 86.13
},
{
"currency": "EUR",
"orders": 13,
"revenue": 1052.4,
"buyers": 12,
"average_order_value": 80.95
}
]
}
}{
"object": "campaign_stats",
"campaign_id": "cmp_37WtKnTZIi4ZbdQ8057IgW0Pbjk",
"sent": 2496,
"sent_percent": 100,
"delivered": 2461,
"delivered_percent": 98.6,
"opened": 1004,
"opened_percent": 40.22,
"clicked": 231,
"clicked_percent": 9.25,
"click_through_percent": 23.01,
"bounced": 21,
"bounced_percent": 0.84,
"suppressed": 9,
"suppressed_percent": 0.36,
"complained": 1,
"complained_percent": 0.04,
"attempted": 0,
"attempted_percent": 0,
"not_processed": 5,
"not_processed_percent": 0.2,
"unsubscribed": 6,
"unsubscribed_percent": 0.24,
"providers": [
{
"key": "gmail",
"label": "Gmail",
"sent": 1460,
"sent_percent": 58.49,
"delivered": 1447,
"delivered_percent": 99.11,
"opened": 612,
"opened_percent": 41.92,
"clicked": 139,
"clicked_percent": 9.52,
"bounced": 9,
"bounced_percent": 0.62
},
{
"key": "other",
"label": "Other",
"sent": 1036,
"sent_percent": 41.51,
"delivered": 1014,
"delivered_percent": 97.88,
"opened": 392,
"opened_percent": 37.84,
"clicked": 92,
"clicked_percent": 8.88,
"bounced": 12,
"bounced_percent": 1.16
}
],
"commerce": {
"currency": "USD",
"revenue": 3297.4,
"orders": 38,
"buyers": 36,
"average_order_value": 86.77,
"conversion_percent": 1.46,
"revenue_per_recipient": 1.34,
"by_currency": [
{
"currency": "USD",
"orders": 38,
"revenue": 3297.4,
"buyers": 36,
"average_order_value": 86.77
}
]
},
"ab_test": {
"winner_metric": "clicked",
"leader_variant_id": "cvr_3uzJsNMbJopoPIZCgLl7zcXxALw",
"win_probability": 99.5,
"significance": "significant",
"variants": [
{
"variant_id": "cvr_3qM7nyKvTUlnBLzE9vtnG03baRV",
"name": "A",
"subject": "New trail shoes are here",
"is_winner": false,
"sent": 1248,
"delivered": 1231,
"opened": 468,
"opened_percent": 37.5,
"clicked": 97,
"clicked_percent": 7.77,
"orders": 14,
"revenue": 1188.6,
"revenue_per_recipient": 0.97
},
{
"variant_id": "cvr_3uzJsNMbJopoPIZCgLl7zcXxALw",
"name": "B",
"subject": "Your next trail shoe is 25% off",
"is_winner": false,
"sent": 1248,
"delivered": 1230,
"opened": 536,
"opened_percent": 42.95,
"clicked": 134,
"clicked_percent": 10.74,
"orders": 24,
"revenue": 2108.8,
"revenue_per_recipient": 1.71
}
]
}
}{
"error": "Campaign not found"
}{
"error": "analytics unavailable"
}Supprimer une campagne
Supprime définitivement une campagne. Nécessite une clé API avec la portée full. Émet l’événement campaign.deleted.
La suppression d’une campagne n’a aucun effet sur les e-mails déjà envoyés ou en file d’attente. Pour arrêter une campagne en cours d’envoi, annulez-la d’abord.
/campaigns/{id}Paramètres de chemin
idstringobligatoirecmp_…) ou son nom.Réponse
Renvoie object, id, name et deleted: true. Renvoie 404 si la campagne n’existe pas.
{
"object": "campaign",
"id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
"name": "October newsletter",
"deleted": true
}{
"error": "Campaign not found"
}