> For the complete documentation index, see [llms.txt](https://docs.decube.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decube.io/data-quality-v2/alerts/alert-channels/webhook.md).

# Webhook

Send Data Quality alerts to your own endpoint, with the payload Decube posts.

A webhook action posts each matching incident to an endpoint you control, so you can route alerts into an incident management tool, a ticketing system, or your own service.

## What your endpoint needs

* An `https://` URL reachable from the public internet.
* A quick `2xx` response. Do your processing after you respond rather than while Decube waits.
* Tolerance for new fields. Decube may add fields to the payload over time, so parse what you need and ignore the rest.

## Add a webhook to a rule

1. In **Set up alert channels**, select **Webhook** on a channel row.
2. Enter the endpoint in **Webhook URL**.
3. Add an **HTTP header** if your endpoint expects one, for example `Authorization` with a value of `Bearer <your token>`. Use **Add** for additional headers.
4. Click **Test alert** and confirm your endpoint received the request.

{% hint style="info" %}
Headers are the place for credentials. Keeping a token in the URL means it appears in your endpoint's logs.
{% endhint %}

<figure><img src="https://1779874722-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTw0qpCVzfrIXqS4FEg4T%2Fuploads%2FvqJhpdEJLtRVw5tLEpWX%2FSCR-20260917-owdd.png?alt=media&amp;token=30e76945-d97e-442b-be64-f7d3c7fcfdf3" alt=""><figcaption></figcaption></figure>

## The payload

Decube posts JSON. `asset` is the primary asset the monitor watches, `attribution_assets` carries the other assets involved where a monitor spans more than one, and `evidence` describes what the run measured and why it failed.

{% code overflow="wrap" %}

```json
{
  "organization_id": "abc1234",
  "asset": {
    "asset": { "id": 1506, "type": "dataset", "name": "orders" },
    "parents": [
      { "id": 11, "type": "source", "name": "snowflake-prod" },
      { "id": 42, "type": "collection", "name": "analytics" }
    ]
  },
  "attribution_assets": null,
  "monitor": {
    "id": 318,
    "name": "orders freshness",
    "type": "freshness_staleness",
    "description": "Orders table should update hourly",
    "dimension": "timeliness"
  },
  "incident": {
    "id": 17,
    "case_id": 9,
    "scheduled_at": "2026-09-30T17:00:00Z",
    "type": "freshness_staleness",
    "evidence": { }
  }
}
```

{% endcode %}

The shape of `evidence` depends on the monitor type, since a Freshness failure and a Null failure describe themselves differently.

## Frequently Asked Questions

**How do I tell which rule sent a request?**

Add a header that identifies the rule when you configure the action, for example `X-Decube-Rule` with the rule name. Decube sends the headers you configure with every delivery from that action.
