# Set up event notifications

> Send alerts to email, Slack, a webhook, or a streaming platform when gateway events occur.
By the end of this guide, you will have at least one event notification configured and delivering alerts to an external service when a gateway event fires.

Event notifications send structured payloads to email, Slack, a webhook, or a streaming platform when selected gateway events occur. All integration types share the same wizard. For background on the event model and supported categories, see [Event notifications](/products/affinidi-trust-fabric/agent-gateway/concepts/observability.md#event-notifications).

Without notifications, there is no automated alert path for critical gateway events such as connection point changes or user additions. You must poll the dashboard or logs manually to detect them.

Use this guide when:

- You need automated alerts when specific gateway events occur.

- You are routing event data to an external monitoring or communication platform.

## Prerequisites

- Dashboard access with Power User or Administrator role.

- Credentials for the target delivery service: SMTP server details, a Slack incoming webhook URL, an HTTPS endpoint, or streaming platform connection details.

## Steps

All integration types use the same wizard. In the dashboard sidebar, select Integrations, then select Add Integration, then follow the type-specific steps below.

Add an email integration

- 
Select Email as the integration type.

- 
Select the Event Category this integration should respond to.

- 
Fill in the SMTP configuration:

| Field | Required | Description |
| From address | Yes | The sender email address. |
| To addresses | Yes | One or more recipient addresses. |
| SMTP host | Yes | Your SMTP server hostname. |
| SMTP port | Yes | Typically 587 for STARTTLS or 465 for TLS. |
| Username | No | SMTP authentication username, if required. |
| Password | No | SMTP authentication password, if required. |
| Use TLS | No | Enable for connections on port 465. |
| Use STARTTLS | No | Enable for connections on port 587. |

- 
In the Content section, enter the Subject and Body. Use ${VARIABLE_NAME} syntax to include event data. See [Template variables](#template-variables).

- 
Select Test to send a sample message and confirm delivery.

- 
Select Save.

Add a Slack integration

- Select Slack as the integration type.

- Select the Event Category.

- Enter the Slack incoming webhook URL in the Webhook URL field.

- In the Content section, enter the message text. Optionally set a Bot name and Icon emoji.

- Select Test to confirm delivery.

- Select Save.

Add a webhook integration

- 
Select Webhook as the integration type.

- 
Select the Event Category.

- 
Fill in the endpoint configuration:

| Field | Required | Description |
| URL | Yes | The HTTPS endpoint that will receive the event payload. |
| Method | No | POST by default. |
| Signing secret | No | When set, the gateway signs each request with HMAC-SHA256 and includes the signature in a request header so your endpoint can confirm authenticity. |
| Headers | No | Additional HTTP headers to include on each delivery. |

- 
In the Content section, enter the JSON payload template.

- 
Select Test to confirm delivery.

- 
Select Save.

Add a stream integration

- Select Stream as the integration type.

- Select the Event Category.

- Select your Platform: Kafka, Kinesis, Pulsar, or Redis Streams.

- Fill in the platform connection fields: brokers or endpoint, topic, region, and credentials.

- Optionally enter a Content template to shape the event payload written to the stream.

- Select Test to confirm connectivity.

- Select Save.

## Template variables

Content fields support ${VARIABLE_NAME} syntax. The integration editor surfaces the available variables for the selected event category. Variables not available for the selected category resolve to an empty string.

The following variables are available in every category:

| Variable | Description |
| ${EVENT_TYPE} | The specific event that fired, for example user.created or gateway.updated. |
| ${TIMESTAMP} | ISO 8601 timestamp of the event. |
| ${NEW_STATE} | JSON representation of the entity’s state after the event. Empty for delete events. |
| ${OLD_STATE} | JSON representation of the entity’s state before the event. Empty for create events. |

Additional variables are available per category:

| Category | Variables |
| User | ${USERNAME}, ${USER_EMAIL}, ${USER_ROLE}, ${USER_STATUS} |
| Gateway | ${GATEWAY_NAME}, ${GATEWAY_DID}, ${GATEWAY_STATUS} |

## Confirm

### Test 1: integration status shows Active

After saving, open Integrations in the sidebar. The new integration row should show Active in the status column.

### Test 2: test notification is delivered

Select Test on the integration row. The gateway sends a sample payload using the saved configuration.

Expected: the test reports a successful delivery, and the notification appears in the target service: inbox, Slack channel, webhook endpoint, or stream.

If the test fails, the error returned by the target service is shown in the test result. Check the configuration fields and confirm network access from the gateway host to the target service.

Delivery failures in production are retried with increasing back-off, so a transient outage at the destination does not drop a notification.

## Troubleshooting

| Symptom | Likely cause | Fix |
| Test notification is not received | SMTP credentials are incorrect or the target endpoint is unreachable from the gateway host. | Check the configuration fields and confirm network access from the gateway host to the target service. |
| Webhook receives an empty payload | The content template is empty. | Add content to the body template or include at least one template variable. |
| Stream integration fails to connect | Broker address, topic, or credentials are incorrect. | Check the broker address, topic, region, and authentication settings against your platform configuration. |
| Slack messages stop arriving | The Slack incoming webhook URL has been revoked or the app was removed. | Generate a new incoming webhook URL in Slack and update the integration. |

## Next steps

- [Connect two gateways](/products/affinidi-trust-fabric/agent-gateway/how-to-guides/connections/connect-gateways.md): attach the integration to a connection point to receive alerts on connection events.

- [Event notifications](/products/affinidi-trust-fabric/agent-gateway/concepts/observability.md#event-notifications): full list of event categories and the variables available for each.
