Produit

Webhooks signés

Événements de livraison signés HMAC.

HMAC-SHA256
// Headers: Postline-Timestamp, Postline-Event-Id, Postline-Signature
signed   = timestamp + "\0" + event_id + "\0" + raw_body
expected = "v1=" + hex(HMAC-SHA256(webhook_secret, signed))
constant_time_compare(expected, Postline-Signature)

// 2xx acknowledges the event. Otherwise up to 6 attempts:
// now, +1m, +5m, +30m, +2h, +8h (15 s timeout each)

Événements

Abonnez chaque endpoint à 1 à 20 de ces types d’événements :

  • email.accepted
  • email.queued
  • email.sent
  • email.delivered
  • email.deferred
  • email.bounced
  • email.complained
  • email.opened
  • email.clicked
  • email.received
  • email.suppressed
  • domain.verified
  • domain.failed

Exigences pour le récepteur

  • Calculez la signature à partir du corps de requête brut exact.
  • Comparez les signatures à temps constant.
  • Rejetez les timestamps en dehors de votre fenêtre autorisée.
  • Stockez event_id et traitez chaque événement une seule fois.
  • Ne présumez pas que les événements arrivent dans l'ordre du cycle de vie.

Contrôles sortants

La création d'un point de terminaison exige HTTPS. Les cibles privées, loopback, link-local, de métadonnées, porteuses d'identifiants et internes sont bloquées et re-résolues au moment de la connexion. Les redirections ne sont pas suivies. La livraison utilise des délais d'expiration et un nombre de tentatives limités.

Délais et nouvelles tentatives

Toute réponse 2xx acquitte l’événement. Un délai dépassé (15 s), une erreur réseau ou tout autre statut est un échec. Postline effectue jusqu’à 6 tentatives : la première, puis après 1 min, 5 min, 30 min, 2 h et 8 h. Chaque tentative est journalisée et toute livraison peut être rejouée manuellement via l’API ou le tableau de bord.