Aller au contenu
Docs

Créez des campagnes, choisissez leurs listes de contacts et leurs segments, puis envoyez-les ou programmez-les.

URL de basehttps://api.emailit.com/v2AuthentificationErreursLimites de débit

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.

POST/campaigns

Paramètres du corps

namestringobligatoire
Nom interne de la campagne. Les destinataires ne le voient pas. Les autres endpoints de campagne acceptent le nom à la place de l’ID : gardez des noms uniques si vous les utilisez ainsi.
subjectstring
Ligne d’objet. Prend en charge les balises de fusion comme {{first_name}}.
from_emailstring
Adresse de l’expéditeur. Elle doit appartenir à un domaine d’envoi vérifié de l’espace de travail, par exemple news@acme.com.
from_namestring
Nom d’affichage de l’expéditeur, par exemple Acme. Le message est envoyé depuis Acme <news@acme.com>.
reply_tostring
Adresse de réponse (Reply-To). Vaut from_email par défaut lors de l’envoi de la campagne.
htmlstring
Corps HTML envoyé par Emailit, dont Temple effectue le rendu pour chaque destinataire. Prend en charge les balises de fusion {{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.
textstring
Corps en texte brut. Prend en charge les mêmes balises de fusion que html.
preview_textstring
Texte d’aperçu que les boîtes de réception affichent après l’objet. Prend en charge les balises de fusion. À l’envoi de la campagne, Emailit l’ajoute sous forme de texte masqué en haut du corps HTML, sauf si le HTML contient déjà le même texte dans un élément masqué (par exemple issu d’un <mj-preview> MJML).
contentstring
Source du corps dans l’éditeur (par exemple MJML), enregistrée telle quelle. Si vous ne transmettez ni html ni text et que content_type vaut html ou text, Emailit envoie content comme corps HTML ou en texte brut.
content_typestringpar défaut : html
Format de content : 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 : false
Définissez true 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 | null

Valeurs UTM utilisées quand utm_tracking est activé. Chaque clé définit un paramètre utm_ :

  • source (par défaut emailit), medium (par défaut email) et campaign (par défaut {campaign_name}).
  • content, term et id, 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 | null
Écarte les contacts à qui une autre campagne de l’espace de travail a envoyé un e-mail dans ce nombre d’heures, de 1 à 168. null (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 : false
Définissez true 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[]
Étiquettes pour organiser les campagnes. 20 tags au maximum, de 50 caractères chacun au maximum. Les tags vides sont supprimés et les doublons retirés, sans tenir compte de la casse. Envoyer tags remplace la liste.
send_strategystringpar défaut : immediate
Comment l’envoi est réparti dans le temps : immediate, throttled, local_time ou smart_time. Enregistré avec la campagne et utilisé quand vous l’envoyez sans stratégie.
send_optionsobject | null
Options de send_strategy, enregistrées telles quelles et vérifiées en entier à l’envoi de la campagne. Consultez Envoyer ou programmer une campagne.
ab_testobject | null

Un 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éfaut true) : false désactive le test.
  • winner_metric (chaîne, par défaut opened) : opened, clicked, orders (commandes attribuées par e-mail envoyé) ou revenue (chiffre d’affaires attribué par e-mail envoyé). orders et revenue font partie de Commerce, qui est en alpha : les autres requêtes renvoient 403 avec error: "commerce_alpha".
  • test_size_percent (entier, par défaut 20) : 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éfaut 4) : 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éfinir name (100 caractères au maximum, par défaut A, B, C, etc.), subject, preview_text, from_name, from_email, reply_to, html et text. 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.

POST/campaigns
Terminal
curl -X POST https://api.emailit.com/v2/campaigns \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "October newsletter",
    "subject": "October news for {{first_name}}",
    "from_email": "news@acme.com",
    "from_name": "Acme",
    "reply_to": "support@acme.com",
    "html": "<p>Hi {{first_name}},</p><p>Here is what changed this month.</p><p><a href=\"{{unsubscribe_url}}\">Unsubscribe</a></p>",
    "text": "Hi {{first_name}}, here is what changed this month. Unsubscribe: {{unsubscribe_url}}"
  }'
JSON
{
  "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": []
  }
}

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.

GET/campaigns/{id}

Paramètres de chemin

idstringobligatoire
L’ID de la campagne (cmp_…) 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.

objectstring
Toujours campaign.
idstring
ID de la campagne, préfixé par cmp_.
statusstring
draft, 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.
namestring
Nom interne de la campagne.
subjectstring
Ligne d’objet, avec les balises de fusion non résolues.
from_emailstring
Adresse de l’expéditeur. "" tant qu’elle n’est pas définie.
from_namestring
Nom d’affichage de l’expéditeur. "" tant qu’il n’est pas défini.
reply_tostring
Adresse de réponse (Reply-To). "" signifie que les réponses vont à from_email.
preview_textstring | null
Texte d’aperçu que les boîtes de réception affichent après l’objet.
content_typestring
Libellé du format de la source dans l’éditeur : html, 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 | null
Date d’envoi d’une campagne programmée, en UTC.
sent_atstring | null
Date de début de l’envoi.
utm_trackingboolean
Indique si des paramètres UTM sont ajoutés aux liens de la campagne.
utm_paramsobject | null
Valeurs UTM qui remplacent les valeurs par défaut, ou null. Consultez Créer une campagne.
smart_sending_hoursinteger | null
Les contacts à qui une autre campagne a envoyé un e-mail dans ce nombre d’heures sont écartés. null quand l’envoi intelligent est désactivé.
exclude_unengagedboolean
Indique si 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 sont écartés.
tagsstring[]
Les tags de la campagne.
send_strategystring
immediate, throttled, local_time ou smart_time.
send_optionsobject | null
Options de la stratégie. Consultez Envoyer ou programmer une campagne.
send_completes_atstring | null
Pour un envoi étalé sur plus d’une minute, l’échéance de son dernier lot. La campagne passe ensuite à sent.
send_summaryobject | null

Ce 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 par smart_sending_hours.
  • unengaged_skipped : écartés par exclude_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_testobject

Le 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[]
Listes de contacts et segments ciblés par la campagne. Chaque élément contient soit 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.

GET/campaigns/{id}
Terminal
curl https://api.emailit.com/v2/campaigns/cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "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 }
  ]
}

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.

POST/campaigns/{id}

Paramètres de chemin

idstringobligatoire
L’ID de la campagne (cmp_…) ou son nom.

Paramètres du corps

namestring
Nom interne de la campagne.
subjectstring
Ligne d’objet. Prend en charge les balises de fusion.
from_emailstring
Adresse de l’expéditeur, sur un domaine d’envoi vérifié.
from_namestring
Nom d’affichage de l’expéditeur.
reply_tostring
Adresse de réponse (Reply-To). Une chaîne vide signifie que les réponses vont à from_email.
preview_textstring
Texte d’aperçu que les boîtes de réception affichent après l’objet. Emailit l’ajoute sous forme de texte masqué en haut du corps HTML à l’envoi de la campagne. Consultez Créer une campagne.
contentstring
Source du corps dans l’éditeur, enregistrée telle quelle. Si vous modifiez content ou content_type et que le format est html ou text, Emailit envoie content comme nouveau corps HTML ou en texte brut.
content_typestring
Format de content : 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_trackingboolean
Ajoute des paramètres UTM aux liens de la campagne à son envoi. Consultez Créer une campagne.
utm_paramsobject | null
Valeurs UTM : source, 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 | null
Écarte les contacts à qui une autre campagne a envoyé un e-mail dans ce nombre d’heures, de 1 à 168. null le désactive.
exclude_unengagedboolean
Écarte 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[]
20 tags au maximum, de 50 caractères chacun au maximum. Remplace les tags actuels.
send_strategystring
immediate, throttled, local_time ou smart_time. Utilisé quand vous envoyez la campagne sans stratégie.
send_optionsobject | null
Options de send_strategy, vérifiées en entier à l’envoi de la campagne. Consultez Envoyer ou programmer une campagne.
ab_testobject | null

Le 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 renvoient 403 avec error: "segments_alpha". Les segments que la campagne contient déjà peuvent être conservés.
  • exclude (booléen, par défaut false) : true exclut 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.

POST/campaigns/{id}
Terminal
curl -X POST https://api.emailit.com/v2/campaigns/cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Your October update, {{first_name}}",
    "recipients": [
      { "audience_id": "aud_3Cz7WJ9GpvD7P0PQez50xOmkZSV" },
      { "segment_id": "seg_3Kq8VbN2xYt5Lm9Pw1Rc7Hd4Zf0", "exclude": true }
    ]
  }'
JSON
{
  "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 }
  ]
}

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.

GET/campaigns

Paramètres de requête

pageintegerpar défaut : 1
Numéro de page, à partir de 1.
limitintegerpar défaut : 10
Campagnes par page, de 1 à 100.
statusstring
Filtre de statut raccourci : draft, scheduled, sending (correspond aussi à queued), sent, canceled, archived ou all.
matchstring

all (par défaut) exige que tous les filtres correspondent. Avec or, il suffit qu’un filtre corresponde. Consultez Filtrage et tri.

orderstring

Clé de tri de cette liste. Consultez les clés de tri ci-dessous.

directionstring

asc 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[]
Campagnes de cette page.
total_recordsinteger
Nombre de campagnes correspondant à la requête.
next_page_urlstring | null
Chemin de la page suivante, ou null 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 | null
Chemin de la page précédente, ou null sur la première page.
GET/campaigns
Terminal
curl -G https://api.emailit.com/v2/campaigns \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -d limit=20 \
  -d status=sent \
  -d order=sent_at \
  -d direction=desc
JSON
{
  "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.

POST/campaigns/{id}/send

Paramètres de chemin

idstringobligatoire
L’ID de la campagne (cmp_…) ou son nom.

Paramètres du corps

scheduled_atstring

Date 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_strategystring

Comment é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 de per_hour e-mails, à partir de maintenant ou de scheduled_at.
  • local_time : une heure donnée dans le fuseau horaire de chaque contact. scheduled_at est 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_optionsobject

Options 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 format YYYY-MM-DDTHH:mm, par exemple 2026-10-08T09:00, et timezone (chaîne, par défaut UTC), 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 est scheduled : elle doit donc être un brouillon. Renvoie 422 quand l’heure est passée dans tous les fuseaux horaires.
  • smart_time : window_hours (entier, par défaut 24), 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.
POST/campaigns/{id}/send
Terminal
curl -X POST https://api.emailit.com/v2/campaigns/cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN/send \
  -H "Authorization: Bearer $EMAILIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "scheduled_at": "2026-10-08T09:00:00Z" }'
JSON
{
  "object": "campaign",
  "id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
  "name": "October newsletter",
  "status": "scheduled",
  "scheduled_at": "2026-10-08T09:00:00.000000Z"
}

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.

POST/campaigns/{id}/cancel

Paramètres de chemin

idstringobligatoire
L’ID de la campagne (cmp_…) 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.

POST/campaigns/{id}/cancel
Terminal
curl -X POST https://api.emailit.com/v2/campaigns/cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN/cancel \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "object": "campaign",
  "id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
  "name": "October newsletter",
  "status": "canceled"
}

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.

GET/campaigns/{id}/stats

Paramètres de chemin

idstringObligatoire

L’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

fromstring

Compte uniquement les e-mails créés à partir de cette date, une date ou une date-heure ISO 8601.

tostring

Compte uniquement les e-mails créés jusqu’à cette date incluse.

statusstring

Compte 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

objectstring

Toujours campaign_stats.

campaign_idstring

L’ID de la campagne (cmp_...).

sentinteger

Les e-mails créés pour la campagne. sent_percent vaut 100, ou 0 avant tout envoi.

delivered, delivered_percentinteger, number

Les e-mails dont le statut est delivered, loaded ou clicked.

opened, opened_percentinteger, number

Les e-mails ouverts au moins une fois.

clicked, clicked_percentinteger, number

Les e-mails avec au moins un clic suivi.

click_through_percentnumber

clicked en pourcentage de opened.

bounced, suppressed, complained, attemptedinteger

Les 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, number

Les e-mails encore accepted ou scheduled.

unsubscribed, unsubscribed_percentinteger, number

Dé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.

commerceobject

Ré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) : buyers en pourcentage des e-mails livrés de la campagne.

  • revenue_per_recipient (nombre) : revenue divisé par le nombre d’e-mails livrés de la campagne.

  • by_currency (tableau d’objets) : currency, orders, revenue, buyers et average_order_value pour chaque devise, du chiffre d’affaires le plus élevé au plus faible.

ab_testobject

Uniquement pour les campagnes avec un test A/B.

  • winner_metric (chaîne) : opened, clicked, orders ou revenue.

  • 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) ou inconclusive. Pour revenue, 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, revenue et revenue_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.

GET/campaigns/{id}/stats
Terminal
curl https://api.emailit.com/v2/campaigns/cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN/stats \
  -H "Authorization: Bearer your_api_key"
JSON
{
  "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
      }
    ]
  }
}

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.

DELETE/campaigns/{id}

Paramètres de chemin

idstringobligatoire
L’ID de la campagne (cmp_…) ou son nom.

Réponse

Renvoie object, id, name et deleted: true. Renvoie 404 si la campagne n’existe pas.

DELETE/campaigns/{id}
Terminal
curl -X DELETE https://api.emailit.com/v2/campaigns/cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN \
  -H "Authorization: Bearer $EMAILIT_API_KEY"
JSON
{
  "object": "campaign",
  "id": "cmp_3zNrBaNjAoPK1l0IL2GQ3pDkubN",
  "name": "October newsletter",
  "deleted": true
}

Cette page vous a-t-elle été utile ?

Merci pour votre retour.

Merci, nous lisons chaque message.