Webhook¶
Webhook-интеграция отправляет уведомления во внешнюю систему при тестировании интеграции или срабатывании триггера.
Тело запроса передаётся в формате JSON. Структура JSON зависит от типа события.
Значения идентификаторов, имён, email, IP-адресов и доменов в примерах являются демонстрационными.
Особенности¶
-
В рабочих уведомлениях
timestampсодержит Unix timestamp в секундах. -
Тип системного события определяется полем
event_type. -
Тип изменения структуры API определяется верхнеуровневым полем
change_type. -
Поля
node_link,trigger_linkиintegration_linkсодержат относительные ссылки. -
Порядок полей в JSON не гарантируется.
-
В новые версии уведомлений могут добавляться поля. Принимающей системе рекомендуется игнорировать неизвестные поля.
-
Уведомление считается принятым, если принимающая система вернула HTTP-код
2xx.
Webhook может содержать имена, email и IP-адреса пользователей.
Учитывайте это при выборе принимающей системы, настройке доступа и журналировании запросов.
Тестирование интеграции¶
При нажатии кнопки Протестировать отправляется следующий JSON:
{
"message": "API Firewall Manager webhook test",
"test": true,
"timestamp": "2026-08-24T13:54:58Z"
}
В тестовом уведомлении
timestamp передаётся строкой в формате ISO 8601, UTC.Получение HTTP-ответа подтверждает, что соединение установлено. Уведомление считается принятым только при получении HTTP-кода
2xx.Ответы
4xx означают, что принимающая система отклонила запрос. Ответы 5xx означают, что принимающая система не смогла обработать запрос.Некоторые внешние системы принимают только JSON определённой структуры. В таком случае может потребоваться промежуточный сервис, преобразующий webhook в формат принимающей системы.
Системные события¶
Большинство системных событий содержит:
-
user_id– идентификатор пользователя, выполнившего действие -
caused_by_usernameиcaused_by_email– данные пользователя, выполнившего действие -
client_name– название клиента -
timestamp– время события -
event_type– тип события
События аутентификации имеют отдельную структуру.
Создание, изменение и удаление ноды¶
Поддерживаемые значения event_type:
-
node_create -
node_change -
node_delete
{
"user_id": "u-123",
"event_type": "node_create",
"node_name": "node-1",
"node_link": "/nodes/1",
"timestamp": 1711447300,
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
Для всех трёх событий используется одинаковый набор полей. Событие
node_change сообщает о факте изменения ноды, но не содержит перечень изменённых параметров. Создание, изменение и удаление приложения¶
Поддерживаемые значения event_type:
-
application_create -
application_change -
application_delete
{
"user_id": "u-123",
"event_type": "application_change",
"application_id": 101,
"application_name": "billing",
"spec_name": "openapi.yaml",
"timestamp": 1711447300,
"old_params": {
"name": "old-name"
},
"changed_params": {
"name": "new-name"
},
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
Особенности:
-
spec_nameсодержит название API-спецификации и может приниматьnull -
old_paramsсодержит значения параметров до изменения -
changed_paramsсодержит значения параметров после изменения -
Состав
old_paramsиchanged_paramsзависит от выполненного действия
Очистка структуры API¶
Событие отправляется с event_type: "clear_endpoints".
{
"user_id": "u-123",
"event_type": "clear_endpoints",
"application_id": 101,
"application_name": "billing",
"spec_name": null,
"clear_endpoints": true,
"timestamp": 1711447300,
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
Поле
clear_endpoints содержит признак очистки эндпоинтов приложения. Создание и удаление пользователя¶
Поддерживаемые значения event_type:
-
create_user -
delete_user
{ "user_id": "u-123", "event_type": "create_user", "user_name": "Bob Smith", "user_email": "bob@example.com", "role": "admin", "timestamp": 1711447300, "caused_by_username": "Alice Example", "caused_by_email": "alice@example.com", "client_name": "Acme" }
Поляuser_name,user_emailиroleотносятся к пользователю, над которым выполнено действие. Поляcaused_by_usernameиcaused_by_emailотносятся к пользователю, выполнившему действие.
Изменение пользователя¶
Событие отправляется с event_type: "user_change".
{
"user_id": "u-123",
"event_type": "user_change",
"user_name": "Bob Smith",
"user_email": "bob@example.com",
"old_role": "viewer",
"new_role": "admin",
"timestamp": 1711447300,
"changed_attributes": [
"role"
],
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
Особенности:
-
old_roleсодержит роль до изменения -
new_roleсодержит роль после изменения -
changed_attributesсодержит список изменённых атрибутов
Включение и отключение пользователя¶
Событие отправляется с event_type: "user_toggle".
{
"user_id": "u-123",
"event_type": "user_toggle",
"action": "enable",
"user_name": "Bob Smith",
"user_email": "bob@example.com",
"role": "admin",
"timestamp": 1711447300,
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
Поле action содержит выполненное действие:
-
enable– пользователь включён -
disable– пользователь отключён
События триггера¶
Поддерживаемые значения event_type:
-
trigger_create -
trigger_change -
trigger_delete -
trigger_toggle
{
"user_id": "u-123",
"event_type": "trigger_change",
"trigger_name": "Too many validation errors",
"application_ids": [
101,
102
],
"trigger_link": "/triggers/1",
"timestamp": 1711447300,
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
application_ids содержит идентификаторы приложений, связанных с триггером.
Событие trigger_toggle сообщает об изменении статуса триггера. Отдельное поле с новым статусом в уведомлении отсутствует.
События интеграции¶
Поддерживаемые значения event_type:
-
integration_create -
integration_change -
integration_delete -
integration_toggle
{
"user_id": "u-123",
"event_type": "integration_change",
"integration_name": "External webhook",
"integration_type": "webhook",
"integration_link": "/integrations/1",
"timestamp": 1711447300,
"caused_by_username": "Alice Example",
"caused_by_email": "alice@example.com",
"client_name": "Acme"
}
Событие integration_toggle сообщает об изменении статуса интеграции. Отдельное поле с новым статусом в уведомлении отсутствует.
События аутентификации¶
Успешный вход¶
Событие отправляется с event_type: "login_success".
{
"event_type": "login_success",
"user_name": "Alice Example",
"user_email": "alice@example.com",
"ip_address": "203.0.113.10",
"timestamp": 1711447300
}
Неуспешный вход¶
Событие отправляется с event_type: "login_failure".
{
"event_type": "login_failure",
"user_email": "alice@example.com",
"reason": "invalid password",
"ip_address": "203.0.113.10",
"timestamp": 1711447300
}
Поле
reason содержит причину неуспешного входа. Изменение пароля¶
Событие отправляется с event_type: "password_change".
{
"event_type": "password_change",
"user_name": "Alice Example",
"user_email": "alice@example.com",
"timestamp": 1711447300
}
Изменение структуры API¶
Webhook отправляется при создании или изменении эндпоинта.
Поддерживаемые значения верхнеуровневого change_type:
-
endpoint_created -
endpoint_changed
{
"client_name": "Acme",
"application": "billing",
"domain": "api.example.com",
"endpoint_path": "/v1/users/{id}",
"http_method": "PATCH",
"change_type": "endpoint_changed",
"changed_parameters": [
{
"point": "request_body.email",
"name": "email",
"change_type": "added",
"pii": [],
"type": "string"
},
{
"point": "query.expand",
"name": "expand",
"change_type": "removed",
"pii": [],
"type": "string"
}
]
}
Особенности:
-
верхнеуровневый
change_typeопределяет тип изменения эндпоинта; -
changed_parameters[].change_typeопределяет тип изменения отдельного параметра; -
pointсодержит расположение параметра в запросе или ответе; -
piiсодержит обнаруженные категории персональных или чувствительных данных; -
typeсодержит тип данных параметра.
Для endpoint_created в changed_parameters передаются все обнаруженные параметры нового эндпоинта с change_type: "added".
{
"client_name": "Acme",
"application": "billing",
"domain": "api.example.com",
"endpoint_path": "/v1/users",
"http_method": "POST",
"change_type": "endpoint_created",
"changed_parameters": [
{
"point": "request_body.email",
"name": "email",
"change_type": "added",
"pii": [],
"type": "string"
}
]
}
Если новый эндпоинт не содержит обнаруженных параметров, передаётся пустой массив:
{
"changed_parameters": []
}
Для
endpoint_changed в changed_parameters передаются только добавленные, удалённые или изменённые параметры. Количество событий за период¶
Webhook отправляется, когда количество событий выбранного типа превышает установленный порог за заданный период.
Поддерживаемые значения event_type:
-
unknown_path– запрос к неизвестному эндпоинту -
request_validation_error– ошибка валидации входящего запроса -
response_validation_error– ошибка валидации ответа сервиса -
undefined_parameters– переданы параметры, отсутствующие в API-описании -
shadow_api– обнаружен Shadow API эндпоинт -
shadow_api_response– обнаружен ответ Shadow API
{
"trigger_id": "550e8400-e29b-41d4-a716-446655440000",
"event_type": "request_validation_error",
"timestamp": 1711447300,
"period": 300,
"events_count": 25,
"same_ip": true,
"source_ip": "203.0.113.10"
}
Особенности:
-
trigger_idсодержит идентификатор сработавшего триггера -
periodсодержит период подсчёта событий в секундах -
events_countсодержит количество событий за период -
same_ipпоказывает, учитывались ли события с одного IP-адреса
Если учитываются события с одного IP-адреса:
{
"same_ip": true,
"source_ip": "203.0.113.10"
}
Если условие одного IP-адреса не используется:
{
"same_ip": false,
"source_ip": null
}
Поле
source_ip присутствует в обоих случаях. При same_ip: false оно принимает значение null.