LegalStack
Гайды

Webhooks

Подписка на события платформы и проверка подписи доставки.

LegalStack доставляет события платформы на ваши HTTPS-эндпойнты. Управление подписками — через API security-service, scope webhooks:write.

Регистрация эндпойнта

POST /api/v1/webhooks HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json

{ "url": "https://example.com/hooks/legalstack", "events": ["task.created", "signature.signed"] }

В ответе придёт секрет эндпойнта с префиксом whsec_ — сохраните его: он нужен для проверки подписи и показывается один раз. Полный CRUD подписок — в API Reference.

Доставка

Каждое событие приходит POST-запросом с JSON-телом { id, type, teamId, timestamp, data } и четырьмя заголовками:

ЗаголовокЗначение
x-legalstack-signatureподпись v1=<hex>
x-legalstack-timestampunix-время отправки в секундах
x-legalstack-event-idидентификатор события
x-legalstack-event-typeтип события

Пример реальной доставки (подпись вычислена боевым кодом платформы):

POST /ваш-endpoint HTTP/1.1
content-type: application/json
x-legalstack-signature: v1=29e7075a454efa9d2fdb5b5d15e1e4e93bfd2b635717bda86931b63566f71c16
x-legalstack-timestamp: 1752307200
x-legalstack-event-id: evt_01hzxamp1e
x-legalstack-event-type: task.created

{"id":"evt_01hzxamp1e","type":"task.created","teamId":"team_01hzxamp1e","timestamp":"2026-07-12T08:00:00.000Z","data":{"taskId":"task_01hzxamp1e","teamId":"team_01hzxamp1e","data":{"title":"Проверить договор"}}}

Проверка подписи

Подпись — HMAC-SHA256 в hex от строки timestamp + "." + payload, ключ — секрет эндпойнта как обычная UTF-8-строка (без декодирования):

secret    = "whsec_2b7e151628aed2a6abf7158809cf4f3c2b7e151628aed2a6abf7158809cf4f3c"
timestamp = "1752307200"  // значение заголовка x-legalstack-timestamp
payload   = тело запроса (сырые байты)

signature = "v1=" + hex(hmac_sha256(secret, timestamp + "." + payload))
          = "v1=29e7075a454efa9d2fdb5b5d15e1e4e93bfd2b635717bda86931b63566f71c16"

Сравнивайте подписи константным по времени сравнением и отклоняйте доставки со старым timestamp (например, старше 5 минут) для защиты от replay.

Повторные доставки

Неуспешные доставки (не-2xx ответ) повторяются с экспоненциальной задержкой. Обрабатывайте события идемпотентно по x-legalstack-event-id — одно событие может прийти более одного раза.

Каталог всех типов событий — на странице События.

На этой странице