Documentation API

Webhooks

Recevez les événements e-mail en temps réel.

Aperçu

En configurant un webhook, une requête HTTP POST sera envoyée à l'URL spécifiée lorsqu'un événement se produit (envoi, ouverture, clic, etc.).

Les webhooks peuvent être configurés dans Tableau de bord > Webhooks.

Types d'événements

Event Description
email.sent Lorsqu'un e-mail est envoyé
email.delivered Lorsqu'un e-mail est livré au destinataire
email.opened Lorsque le destinataire ouvre l'e-mail
email.clicked Lorsque le destinataire clique sur un lien dans l'e-mail
email.bounced Lorsqu'un e-mail est rejeté (rebond)
email.complained Lorsque le destinataire signale un spam
subscriber.created Lorsqu'un nouvel abonné est ajouté
subscriber.unsubscribed Lorsqu'un abonné se désabonne
campaign.sent Lorsque l'envoi d'une campagne commence
campaign.completed Lorsque l'envoi d'une campagne est terminé

Format du payload

Toutes les requêtes webhook contiennent un payload JSON au format suivant :

{
  "event": "email.opened",
  "timestamp": "2026-01-10T12:00:00+00:00",
  "data": {
    "campaign_id": 123,
    "campaign_uuid": "abc-123...",
    "campaign_name": "January Newsletter",
    "subscriber_id": 456,
    "subscriber_uuid": "def-456...",
    "subscriber_email": "user@example.com",
    "ip_address": "1.2.3.4",
    "user_agent": "Mozilla/5.0...",
    "occurred_at": "2026-01-10T12:00:00+00:00"
  }
}

En-têtes de requête

Header Description
Content-Type application/json
X-Webhook-ID UUID du webhook
X-Webhook-Event Type d'événement (ex : email.opened)
X-Webhook-Signature Signature HMAC-SHA256

Vérification de la signature

Pour vérifier l'authenticité d'une requête webhook, validez l'en-tête X-Webhook-Signature. La signature est un hash HMAC-SHA256 utilisant le secret du webhook et le corps de la requête.

Exemple PHP

<?php
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'];
$secret = 'your_webhook_secret';

$expected = 'sha256=' . hash_hmac('sha256', $payload, $secret);

if (!hash_equals($expected, $signature)) {
    http_response_code(401);
    die('Invalid signature');
}

$data = json_decode($payload, true);
// Process the event...

Exemple Node.js

const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}

// Express.js example
app.post('/webhook', (req, res) => {
  const signature = req.headers['x-webhook-signature'];
  const payload = JSON.stringify(req.body);

  if (!verifySignature(payload, signature, 'your_secret')) {
    return res.status(401).send('Invalid signature');
  }

  // Process the event...
  res.status(200).send('OK');
});

Politique de relance

  • • En cas d'échec d'envoi du webhook (réponse non-2xx), aucune relance automatique n'est effectuée.
  • • Après 5 échecs consécutifs, le webhook est automatiquement désactivé.
  • • Les webhooks désactivés peuvent être réactivés depuis le tableau de bord.
  • • Le temps de réponse doit être inférieur à 10 secondes.

Bonnes pratiques

  • • Vérifiez toujours la signature pour confirmer l'authenticité de la requête.
  • • Traitez les webhooks le plus rapidement possible (moins de 5 secondes).
  • • Mettez les tâches longues en file d'attente et retournez immédiatement 200 OK.
  • • Utilisez des endpoints HTTPS pour transmettre les données en toute sécurité.

Nous utilisons des cookies

Nous utilisons des cookies pour améliorer votre expérience. Vous pouvez choisir les catégories de cookies à autoriser. En savoir plus