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

# Overview

> Configure HTTPS webhooks to receive real-time notifications when events occur in your pipelines.

Webhooks let Artie send **HTTP POST** notifications to an endpoint you control whenever subscribed events happen — replication issues, backfill progress, schema changes, and more.

<Tip>Webhooks are the recommended way to get real-time alerts for pipeline errors. You can subscribe to specific event types to monitor replication failures, skipped rows, backfill status, schema changes, and more.</Tip>

<Note>
  If you want to **mute email alerts for a specific pipeline** without disabling health tracking, use the **Disable alert emails** setting under the pipeline's Advanced settings. See [Disable alert emails](/pipelines/overview#disable-alert-emails) for details. Webhooks and dashboard health cards are unaffected.
</Note>

## Configure a webhook

Create and manage webhooks from [**Settings > Webhooks**](https://app.artie.com/settings?tab=webhooks) in the Artie dashboard. When configuring a webhook, note the following:

* **Webhook URL** — Must be HTTPS. If the URL is a Slack incoming webhook (`hooks.slack.com`), **Format** defaults to **Slack**.
* **Authorization (Bearer token)** — Optional. If set, Artie sends `Authorization: Bearer <token>` on each delivery. This is a shared secret in the header, not an HMAC signature over the body.
* **Format** — **Event Payload** sends the raw JSON event (see [payload structure](#payload-structure) below). **Slack** sends a [Block Kit](https://api.slack.com/block-kit)-style payload for Slack incoming webhooks.

**View-only users** can browse webhooks and logs but cannot create, edit, delete, or test them.

## Verify your endpoint

After saving your webhook, click on it to open its delivery logs, and click **Send test** in the top right. You can also select one or more webhooks in the table and use **Test selected**.

## Delivery behavior

* **Method and content type**: `POST` with `Content-Type: application/json`.
* **Authentication**: If you configured a bearer token, validate the `Authorization` header on your server.
* **Retries**: Your endpoint should return an HTTP **2xx** status. Non-2xx responses are retried; after repeated failures the webhook will show a **Failing** status and you will receive email alerts.

## Payload structure

Every delivery shares a common envelope. The `event`, `message`, `severity`, `timestamp`, `delivery_metadata`, and `properties` fields are always present. The context fields — `source_reader_uuid`, `pipelines`, `source`, `destination`, `environment_uuid`, and `environment_name` — are present on events that have an environment (most pipeline events). `environment_uuid` and `environment_name` are omitted on dashboard-origin events with no environment (e.g. `dek.generated`).

```json theme={null}
{
  "event": "replication.error",
  "message": "An error occurred during replication.",
  "severity": "error",
  "timestamp": "2026-06-20T12:00:00Z",
  "source_reader_uuid": "11111111-1111-1111-1111-111111111111",
  "pipelines": [
    { "uuid": "22222222-2222-2222-2222-222222222222", "name": "Production Postgres → Snowflake" }
  ],
  "source": "postgresql",
  "destination": "snowflake",
  "environment_uuid": "33333333-3333-3333-3333-333333333333",
  "environment_name": "Production",
  "delivery_metadata": { "attempt": 1 },
  "properties": { ... }
}
```

The `properties` field varies by event type — see the individual event pages in the sidebar for field-level details rendered from the OpenAPI spec.

<Note>
  Event Payload deliveries use JSON that is compatible with the [Events API](/sources/events-api/overview), so you can forward webhook events directly to an Events API pipeline for storage and replication.
</Note>

## Event types

| Event                                                      | Severity  | Description                                                  |
| ---------------------------------------------------------- | --------- | ------------------------------------------------------------ |
| [`replication.started`](/api/webhooks/replication-started) | `info`    | The replication process has started.                         |
| [`replication.error`](/api/webhooks/replication-error)     | `error`   | An error occurred during replication.                        |
| [`row.skipped`](/api/webhooks/row-skipped)                 | `warning` | A row was not written due to size limits.                    |
| [`ddl.seen`](/api/webhooks/ddl-seen)                       | `info`    | A DDL statement was detected in the CDC stream (MySQL only). |
| [`ddl.applied`](/api/webhooks/ddl-applied)                 | `info`    | Artie has applied a schema change to the destination.        |
| [`backfill.started`](/api/webhooks/backfill-started)       | `info`    | A backfill has started for a table.                          |
| [`backfill.completed`](/api/webhooks/backfill-completed)   | `info`    | A backfill has finished successfully.                        |
| [`backfill.failed`](/api/webhooks/backfill-failed)         | `error`   | A backfill failed before completing.                         |
| [`dedupe.started`](/api/webhooks/dedupe-started)           | `info`    | A deduplication job has started for a table.                 |
| [`dedupe.completed`](/api/webhooks/dedupe-completed)       | `info`    | A deduplication job has finished successfully.               |
| [`dedupe.failed`](/api/webhooks/dedupe-failed)             | `error`   | A deduplication job failed.                                  |
| [`dek.generated`](/api/webhooks/dek-generated)             | `info`    | A new Data Encryption Key (DEK) was generated.               |

## Deprecated events

These events are still delivered for backward compatibility but will be removed in a future release.

| Event                                                    | Use instead         |
| -------------------------------------------------------- | ------------------- |
| [`replication.failed`](/api/webhooks/replication-failed) | `replication.error` |
| [`connection.failed`](/api/webhooks/connection-failed)   | `replication.error` |

## Troubleshooting

* **2XX required**: Return a successful status from your handler; otherwise Artie will retry and may mark the webhook **Failing**.
* **Bearer mismatch**: If you set a secret in Artie, your server must accept the same value in the `Authorization: Bearer <token>` header.
* **Slack vs Event Payload**: Slack URLs expect Block Kit payloads; use **Event Payload** for generic JSON consumers.
