Продукт

Подписанные вебхуки

Статусы доставки с 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)

События

Каждый эндпоинт подписывается на 1–20 типов событий:

  • 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

Требования к получателю

  • Считайте подпись из точного «сырого» тела запроса.
  • Сравнивайте подписи constant-time.
  • Отклоняйте timestamp вне допустимого окна.
  • Сохраняйте event_id и обрабатывайте каждое событие один раз.
  • Не считайте, что события приходят в порядке жизненного цикла.

Исходящие ограничения

Создание эндпоинта требует HTTPS. Приватные, loopback, link-local, metadata-адреса и адреса с учётными данными блокируются и повторно резолвятся в момент подключения. Редиректы не выполняются. Доставка использует ограниченные таймауты и число попыток.

Таймауты и повторы

Любой ответ 2xx подтверждает событие. Таймаут (15 с), сетевая ошибка или другой статус считаются неудачей. Postline делает до 6 попыток: первую и повторы через 1 мин, 5 мин, 30 мин, 2 ч и 8 ч. Каждая попытка сохраняется в журнале доставок, любую доставку можно повторить вручную через API или панель.