# Notifications

When DNScheck detects a change to a monitored zone, it sends a digest to every verified destination on your team. A change is anything DNScheck records: a record **created**, **updated**, or **deleted**, or a zone **imported** or **removed**. Each change is tagged with its source — `user` when it was made from the DNScheck dashboard, or `sync` when DNScheck detected it on its own.

Every verified destination receives every change digest for the team — destinations aren't filtered per zone or per event type.

DNScheck supports three channels:

- [Email](#email)
- [Telegram](#telegram)
- [Webhook](#webhook)

## Adding a destination

1. Go to **Notifications** and click to add a destination.
2. Choose the **channel**, enter the **target** for that channel (see below), and an optional **label** to recognise it later (for example "On-call alerts").
3. Save, then **verify** the destination (see each channel below). Until a destination is verified it won't receive notifications.

You can send a **test** notification to any verified destination, and the **Recent deliveries** log shows what was sent and whether it succeeded.

## Email

**Target:** an email address.

After you add an email destination, DNScheck emails it a **6-digit verification code**. Enter that code on the Notifications page to verify the address. If the email doesn't arrive, check your spam folder or use **Resend code**.

Email notifications are sent as both plain-text and HTML, so they render nicely in any client.

## Telegram

**Target:** your Telegram **chat ID**.

DNScheck delivers Telegram messages through its bot, so you have to let the bot message you first:

1. Start a chat with the DNScheck bot and send it a message.
2. Find your numeric **chat ID** and enter it as the target.
3. DNScheck sends a **6-digit verification code** to that chat — enter it to verify.

If verification fails, make sure you messaged the bot first and that the chat ID is correct, then use **Resend code**.

## Webhook

**Target:** an HTTPS URL that accepts a `POST`.

Webhooks are verified differently: when you add one, DNScheck immediately sends a ping to the URL. The webhook is verified only if your endpoint returns a **2xx** response to that ping. If it can't be reached or returns a non-2xx status, it stays unverified — fix the endpoint and try again.

For security, webhook URLs are checked before every request: DNScheck refuses to call private/internal addresses (such as localhost, private IP ranges, or cloud metadata endpoints) and does not follow redirects.

Each webhook delivery is a JSON `POST` with this shape:

```json
{
  "zone": "example.com",
  "changes": [
    {
      "type": "record_updated",
      "name": "www.example.com",
      "recordType": "A",
      "source": "sync"
    }
  ],
  "count": 1,
  "at": "2025-06-26T14:23:00Z"
}
```

- `type` — one of `record_created`, `record_updated`, `record_deleted`, `zone_imported`, `zone_removed`.
- `recordType` — the DNS record type (for example `A`, `CNAME`); empty for zone-level events.
- `source` — `user` for changes made in DNScheck, `sync` for changes DNScheck detected.
- `count` — number of changes in this digest.
- `at` — when the digest was generated (UTC).

## Need help?

[Contact us](/contact) if a channel isn't behaving as you expect.
