---
title: "Email and webhooks"
description: "Nextvision Status — Email and webhooks"
---

> Documentation Index
> Fetch the complete documentation index at: https://status.nextvisions.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Email and webhooks

## SMTP

Configure `SMTP_ADDR`, `SMTP_USER`, `SMTP_PASSWORD`, `MAIL_FROM` and `CONTACT_EMAIL`. SMTP authenticates only over STARTTLS. Mailpit requires no credentials and captures all development mail locally. Configure sender-domain records with your production mail provider before sending to customers.

## Webhook signature

Create a public HTTPS webhook in Settings. Copy its one-time secret. The signature is:

```text
HMAC-SHA256(secret, timestamp + "." + raw_request_body)
```

Read `X-Nextvision-Timestamp`, `X-Nextvision-Signature` and `X-Nextvision-Event-ID`. Verify the signature in constant time, require a recent timestamp, and deduplicate by event ID. The JSON body contains the event ID and data payload.

## Delivery behavior

Events are committed with the business transaction in a PostgreSQL outbox. Redis carries queue wakeups; the database remains authoritative if Redis restarts. Delivery workers claim leased rows and reclaim expired leases.

Retries use exponential backoff and stop after eight attempts. Inspect Notifications for failed deliveries. Email and webhooks are at-least-once: a crash after external acceptance but before the database acknowledgment can repeat a delivery. Email uses a stable Message-ID; webhook receivers must deduplicate event IDs. Database uniqueness prevents duplicate delivery records for an event/destination pair.

Source: https://status.nextvisions.ai/docs/en/notifications/index.mdx
