---
schema_version: "1"
id: 99a07354ccf3d6bfcdeccd365a79d970c75d1ccf6b70358a952889e4ea4d9502
title: Notifications Methods
collection: tableau
version: current
locale: en-us
portal_url: https://docs.salesforce.com/tableau/current/en-us/api/rest_api/REST/rest_api_ref_notifications.md
canonical_url: https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_ref_notifications.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 99fe930e8d0e6e3149dc8c1e50506acab5767af1bd93df5afb78db23614b0d2b
description: Notification methods consists of data-driven alerts, user notification preferences, and webhooks
---
[Skip to main content](#main-content)

# Notifications Methods

Notification methods consists of data-driven alerts, user notification preferences, and webhooks.

Using the notification methods of the Tableau Server REST API you can:

- Create,list, update, or delete the data-driven alerts of a site
- Get the details of a specific data-driven alert
- Add or delete the users of a specific data-driven alert
- Create a new Webhook for a site.
- Delete a Webhook.
- Get a list of Webhooks for a specific site.
- Get the notification preferences for a specified site, filtered by channel and notification type.
- Update user notifications preferences to enabled or disabled on a specified site.

## Use Postman

Our Postman collection of requests enables you to construct, send, and examine HTTP requests to the Tableau Server or Tableau Cloud API without writing initial code. Postman is a free online app used by many developers for prototyping API calls, investigating issues, and generating request code in a variety of languages.

[Postman: Notifications](https://www.postman.com/salesforce-developers/salesforce-developers/folder/wlsh5ga/notifications)

## Add User to Data-Driven Alert

Adds a specified user to the recipients list for a data-driven alert.

#### URI

POST /api/api-version/sites/site-id/dataAlerts/data-alert-id/users

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the specified data-driven alert.</td></tr><tr><td><span class="api-placeholder">data-alert-id</span></td><td>The ID of the data-driven alert. You can obtain this ID by calling <a href="#query_data-driven_alerts">Query Data-Driven Alerts</a>.</td></tr></tbody></table>

**Version:** Available in API 3.2 (Tableau Cloud / Tableau Server 2018.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.>

**Permissions:** This method can only be called by server administrators and site administrators, and by users who are owners of the specified alert.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:update

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Request Body

```
<tsRequest>
  <user id="user-id"/>
</tsRequest>
```

#### Response Code

200

#### Response Body

```
<tsResponse>
  <user id="user-id"
    name="user-name"
    siteRole="site-role"
    externalAuthUserId="external-user-id"/>
</tsResponse>
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Write forbidden</td><td>A user called this method who does not have the required permissions.</td></tr><tr><td>403</td><td>409028</td><td>Adding recipient to data-driven alert forbidden</td><td>The user is not authorized to add the recipient to the data-driven alert.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Resource Not Found</td><td>The user ID specified in the request body is invalid.</td></tr><tr><td>404</td><td>409023</td><td>Resource Not Found</td><td>The data-driven alert ID specified in the URI is invalid.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">POST</span>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/13020592-762f-4de4-a25e-f4beb005836e/dataAlerts/e5a4b73e-5cbb-412d-907e-f31cc31684f7/users" -X POST -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @add-user-to-alert.xml`

**Content of add-user-to-alert.xml:**

```
<tsRequest>
  <user id="8eda27d9-5ad2-42cd-a39a-61bc01a423af"/>
</tsRequest>
```

**Example response:**

```

<tsResponse>
  <user id="8eda27d9-5ad2-42cd-a39a-61bc01a423af"
        name="admin"
        siteRole="ServerAdministrator"
        externalAuthUserId=""/>
</tsresponse>
```

## Create Data Driven Alert

Create a data driven alert (DDA) for a view with a single data axis.

**Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Not available for Tableau Server. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.

**Permissions:** Users with the Administrator, Creator, or Explorer role can add DDAs to views they have permissions to.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:create

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### URI

POST /api/api-version/sites/site-luid/dataAlerts

#### URI Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-luid</span></td><td>The LUID for the site.</td></tr></tbody></table>

#### Request Body

Copy

```
<tsRequest>  <dataAlertCreateAlert    alertCondition="above"    alertThreshold="14000"    subject="Data Driven Alert for Forecast"    frequency="daily"        visibility="public"    device="desktop"    worksheetName="one_measure_no_dimension"    viewId="my-view-id"    <!-- OR customViewId="my-custom-view-id"> -->  /> </tsRequest>
```

Copy

```
{  "dataAlertCreateAlert": {    "alertCondition": "above",    "alertThreshold": "14000",    "subject": "Data Driven Alert for Forecast",    "frequency": "daily",    "visibility": "public",    "device": "desktop",    "worksheetName": "one_measure_no_dimension",    "viewId": "my-view-id"    // can be "customViewId" instead  }}
```

#### Request Attributes

<table class="api-parameters-table">
                                <colgroup>
                                    <col width="30%">
                                    <col width="70%">
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert alertCondition</code>
                                        </td>
                                        <td>
                                            <p><i>(Required) Enumeration:</i> The condition that triggers the DDA. Used in conjunction with the threshold to determine when to trigger an alert. For example, an alert can be triggered if on the condition that data is above or equal to a threshold of 1000 orders.  The value can be:</p>
                                            <ul>
                                                <li><code>above</code>
                                                </li>
                                                <li><code>above-equal</code>
                                                </li>
                                                <li><code>below</code>
                                                </li>
                                                <li><code>below-equal</code>
                                                </li>
                                                <li><code>equal</code>
                                                </li>
                                            </ul>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert alertThreshold</code>
                                        </td>
                                        <td><i>(Required) Int:</i> The data value where an alert should be triggered when that value drops below or rises above the alert threshold value.</td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert subject</code>
                                        </td>
                                        <td><i>(Required) String:</i> The name of the data driven alert.</td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert frequency</code>
                                        </td>
                                        <td>
                                            <p><i>(Required) Enumeration:</i> The time period between attempts by Tableau to assess whether the alert threshold has been crossed. The value can be one of:</p>
                                            <ul>
                                                <li><code>once</code> Sends the alert only the first time the alert threshold is crossed.</li>
                                                <li><code>freguently</code> As frequently as possible given server conditions.</li>
                                                <li><code>hourly</code>
                                                </li>
                                                <li><code>daily</code>
                                                </li>
                                                <li><code>weekly</code>
                                                </li>
                                            </ul>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert visibility</code>
                                        </td>
                                        <td><i>(Required) Enumeration:</i> Determines whether the alert can be seen by only its creator (<code>private</code>), or by any user with permissions to the worksheet where the alert resides (<code>public</code>) . The value can be one of:<ul><li><code>private</code></li><li><code>public</code> </li></ul></td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert device</code>
                                        </td>
                                        <td>
                                            <p><i>(Optional) Enumeration:</i> The type of device the alert is formatted for.
									If no <code>device</code> is provided then the default device setting of the underlying view is used.
									Values can be one of:</p>
                                            <ul>
                                                <li><code>desktop</code>
                                                </li>
                                                <li><code>phone</code> </li>
                                                <li><code>tablet</code>
                                                </li>
                                            </ul>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert worksheetName</code>
                                        </td>
                                        <td>
                                            <p><i>(Required) String:</i> The name of the worksheet that the DDA will be created on. </p>
                                            <p><span style="font-weight: bold;font-style: normal;">For dashboards</span>, this is the name of the underlying sheet that contains the data whose value can trigger the alert, not the name of the dashboard that presents that sheet. </p>
                                            <p><b>For custom views</b>, the name of the original view that was used to form the custom view.
</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td style="line-height:100%"><code>dataAlertCreateAlert viewId</code>
                                            <p>OR</p>
                                            <p><code>dataAlertCreateAlert customViewId</code>
                                            </p>
                                        </td>
                                        <td><i>(Required) LUID:</i> The LUID of either the <code>viewId</code> or <code>customViewId</code> that contains the data that can trigger an alert. </td>
                                    </tr>
                                </tbody>
                            </table>

#### cURL Request Example

`curl http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/datasources/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d/connections" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

#### Response Code

200

#### Response Body

Copy

```
<tsRequest>  <dataAlertCreateAlert    alertCondition="above"    alertThreshold="14000"    subject="Data Driven Alert for Forecast"    frequency="daily"        visibility="public"    device="desktop"    worksheetName="one_measure_no_dimension"    viewId="my-view-id"    <!-- OR customViewId="my-custom-view-id"> -->  /> </tsRequest>
```

Copy

```
{  "dataAlertCreateAlert": {    "alertCondition": "above",    "alertThreshold": "14000",    "subject": "Data Driven Alert for Forecast",    "frequency": "daily",    "visibility": "public",    "device": "desktop",    "worksheetName": "one_measure_no_dimension",    "viewId": "my-view-id"    // can be "customViewId" instead  }}
```

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400000</td><td>Bad Request</td><td>The content of the request body is missing or incomplete, or contains malformed XML.</td></tr><tr><td>400</td><td>403165</td><td>DDA creation failed</td><td>A data driven alert could not be created because there is a missing value in the request body.</td></tr><tr><td>401</td><td>401002</td><td>Unauthorized Access</td><td>The user does not have permissions to create a data driven alert. Causes may include: authentication token provided in the request header was invalid or has expired; the user does not have administrator, creator, or explorer permissions; the user does not have permissions to view the sheet.</td></tr><tr><td>403</td><td>403164</td><td>DDA not enabled</td><td>Data driven alerts are not enabled for the site, or the user visibility site setting is configured as <code>limited</code>.</td></tr><tr><td>404</td><td>404011</td><td>View not found</td><td>The view specified in the request could not be found.</td></tr><tr><td>404</td><td>409004</td><td>Request is malformed</td><td>A data driven alert could not be created because there is an unexpected value in the request body.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

## Create a Webhook

Creates a new webhook for a site.

#### URI

POST /api/3.6/sites/<site-id>/webhooks

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site in which you want to create the webhook.</td></tr></tbody></table>

#### Request Body

<tsRequest>
  <webhook
    name="webhook-name"
    isEnabled="webhook-enabled-flag"
    event="api-event-name">
      <webhook-source>
        <webhook-source-api-event-name />
      </webhook-source>
      <webhook-destination>
        <webhook-destination-http method="POST" url="url"/>
     </webhook-destination>
  </webhook>
</tsRequest>

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-extra-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">webhook-name</span>
                                        </td>
                                        <td>This is required. A name for the webhook.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">api-event-name | webhook-source-api-event-name</span>
                                        </td>
                                        <td>
                                            <p>You must specify one of these attribute values. The name of the Tableau event that triggers your webhook. The event name must be one of the supported events listed in the Trigger Events table. The event and webhook-source use different name values for the same event. </p>
                                            <p><b>Recommended:</b> Use the event attribute of the webhook to specify the triggering API event for the webhook. The webhook-source element serves the same purpose but is being deprecated in future versions of Tableau webhooks. If both events and webhook-source are specified, their events specified must match. If either are specified, with the other being NULL, then the specified event becomes the webhook trigger, whether the element containing the event name is event or webhook-source.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">url</span>
                                        </td>
                                        <td>Required. The destination URL for the webhook. The webhook destination URL must be https and have a valid certificate.
							</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">webhook-enabled-flag</span>
                                        </td>
                                        <td>(Optional) Boolean. If <b>true</b> (default), the newly created webhook is enabled. If <b>false</b> then the webhook will be disabled.  </td>
                                    </tr>
                                </tbody>
                            </table>

#### Permissions

This method can only be called by server and site administrators.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:webhooks:create
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

201

#### Response Body

<tsResponse>
  <webhook
    id="webhook-id"
    name="webhook-name"
    isEnabled="true-or-false"
    statusChangeReason="status-change-reason"
    event="api-event-name">
      <webhook-source>
        <webhook-source-api-event-name />
      </webhook-source>
      <webhook-destination>
        <webhook-destination-http method="POST" url="url"/>
      </webhook-destination>
        <owner id="webhook\_owner\_luid" name="webhook\_owner\_name"/>
  </webhook>
</tsResponse>

#### Response Headers

Location: /api/3.29/sites/site-id/webhooks/<new-webhook-id\>

## Delete Data-Driven Alert

Deletes the specified data-driven alert from the specified site.

#### URI

DELETE /api/_api-version_/sites/_site-id_/dataAlerts/_data-alert-id_

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><i>api-version</i></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><i>site-id</i></td><td>The ID of the site that contains the specified data-driven alert.</td></tr><tr><td><i>data-alert-id</i></td><td>The ID of the data-driven alert. You can obtain this ID by calling <a href="#query_data-driven_alerts">Query Data-Driven Alerts</a>.</td></tr></tbody></table>

**Version:** Available in API 3.2 (Tableau Cloud / Tableau Server 2018.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.>

**Permissions:** This method can be called by server and site administrators, and by users who are owners or recipients of the specified data-driven alert.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:delete

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Request Body

None

#### Response Code

204

#### Response Body

None

#### Version

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Delete forbidden</td><td>A user called this method who does not have the required permissions</td></tr><tr><td>404</td><td>409023</td><td>Resource Not Found</td><td>The data-driven alert ID specified in the URI is invalid.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>DELETE</b>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/13020592-762f-4de4-a25e-f4beb005836e/dataAlerts/e5a4b73e-5cbb-412d-907e-f31cc31684f7" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

## Delete User from Data-Driven Alert

Removes a specified user from the recipients list for a data-driven alert.

#### URI

DELETE /api/_api-version_/sites/_site-id_/dataAlerts/_data-alert-id_/users/_user-id_

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><i>api-version</i></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><i>site-id</i></td><td>The ID of the site that contains the specified data-driven alert.</td></tr><tr><td><i>data-alert-id</i></td><td>The ID of the data-driven alert. You can obtain this ID by calling <a href="#query_data-driven_alerts">Query Data-Driven Alerts</a>.</td></tr><tr><td><i>user-id</i></td><td>The ID (not name) of the user to remove from the data-driven alert.</td></tr></tbody></table>

**Version:** Available in API 3.2 (Tableau Cloud / Tableau Server 2018.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.>

**Permissions:** This method can only be called by server administrators and site administrators, and by users who are owners of the specified alert.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:update

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Request Body

None

#### Response Code

204

#### Response Body

None

#### Version

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Delete forbidden</td><td>A user called this method who does not have the required permissions.</td></tr><tr><td>403</td><td>409029</td><td>Deleting recipient from data-driven alert forbidden</td><td>The user is not authorized to remove the recipient from the data-driven alert.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Resource Not Found</td><td>The user ID specified in the request body is invalid.</td></tr><tr><td>404</td><td>409023</td><td>Resource Not Found</td><td>The data-driven alert ID specified in the URI is invalid.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>DELETE</b>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/13020592-762f-4de4-a25e-f4beb005836e/dataAlerts/e5a4b73e-5cbb-412d-907e-f31cc31684f7/users/ff43cb47-f208-4d2f-9a22-0fbb6d29f7f1" -X DELETE -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

## Delete a Webhook

Deletes the specified webhook.

#### URI

DELETE /api/3.6/sites/<site-id>/webhooks/<webhook-id>

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the workbook to be deleted.  </td></tr><tr><td><span class="api-placeholder">webhook-id</span></td><td>The ID of the webhook.  </td></tr></tbody></table>

#### Request Body

None.

#### Permissions

This method can only be called by server and site administrators.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:webhooks:delete
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

204

#### Response Body

None.

## Get User Notification Preferences

Returns the notification preferences for the specified site. You can filter by channel and notification type. For more information about notifications, see [Manage Your Account Settings](https://help.tableau.com/current/pro/desktop/en-us/useracct.htm#change-notification-settings).

#### URI

GET /api/api-version/sites/site-id/settings/notifications

GET /api/api-version/sites/site-id/settings/notifications?filter=filter-expression

#### Parameter Values

<table class="api-parameters-table">
                            <colgroup>
                                <col class="api-parameters-table-col-1-wide">
                                <col>
                            </colgroup>
                            <tbody>
                                <tr>
                                    <td><span class="api-placeholder">api-version</span>
                                    </td>
                                    <td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">site-id</span>
                                    </td>
                                    <td>The ID of the site that contains the users.</td>
                                </tr>
                                <tr>
                                    <td><span class="api-placeholder">filter-expression</span>
                                    </td>
                                    <td>
                                        <p>(Optional) An expression that lets you specify a subset of notification preferences to return. You can filter on the following fields and corresponding options:</p>
                                        <ul>
                                            <li><span class="api-command-ref">channel</span>: <span class="api-command-ref">email</span>, <span class="api-command-ref">in_app</span>, and <span class="api-command-ref">slack</span></li>
                                            <li><span class="api-command-ref">notificationType</span>: <span class="api-command-ref">comments</span>, <span class="api-command-ref">webhooks</span>, <span class="api-command-ref">prepflow</span>, <span class="api-command-ref">share</span>, <span class="api-command-ref">dataalerts</span>,and <span class="api-command-ref">extractrefresh</span></li>
                                        </ul>
                                        <p>You can
                                    include multiple filter expressions. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_filtering_and_sorting.htm">Filtering and Sorting</a>.
                                    </p>
                                    </td>
                                </tr>
                            </tbody>
                        </table>

#### Request Body

None

#### Permissions

This method can only be called by a Server Administrator, a Site Administrator Creator, or a Site Administrator Explorer.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:user_notifications:read
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

200

#### Response Body

```
<tsResponse>
  <userNotificationsPreferences>
    <userNotificationsPreference channel="channel"
      notificationType="notification-type"
      enabled="true-or-false"
      disabledByOverride="true-or-false"/>
    <userNotificationsPreference channel="channel"
      notificationType="notification-type"
      enabled="true-or-false"
      disabledByOverride="true-or-false"/>
   <!-- ... additional notification preferences ... -->
  </userNotificationsPreferences>
</tsResponse>
```

#### Version

Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>409109</td><td>Invalid request</td><td>Invalid notification type.</td></tr><tr><td>400</td><td>409100</td><td>Invalid request</td><td>Invalid channel.</td></tr><tr><td>403</td><td>403004</td><td>Invalid permissions</td><td>Invalid permission to update site user notification settings.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>The request type was not <span class="api-command-ref">GET</span>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

**Example response:**

```
<tsResponse>
  <userNotificationsPreferences>
    <userNotificationsPreference channel="email"
      notificationType="comments"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="email"
      notificationType="webhooks"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="email"
      notificationType="prepflow" enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="email"
      notificationType="share"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="email"
      notificationType="dataalerts"
      enabled="true"
      disabledByOverride="true"/>
    <userNotificationsPreference channel="email"
      notificationType="extractrefresh"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="in_app"
      notificationType="comments"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="in_app"
      notificationType="prepflow"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="in_app"
      notificationType="share"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="in_app"
      notificationType="extractrefresh"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="slack"
      notificationType="comments"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="slack"
      notificationType="prepflow"
      enabled="true"
      disabledByOverride="false"/>
    <userNotificationsPreference channel="slack"
      notificationType="share"
      enabled="true"
      disabledByOverride="false"/>
     <userNotificationsPreference channel="slack"
      notificationType="dataalerts"
      enabled="true"
      disabledByOverride="false"/>
  </userNotificationsPreferences>
</tsResponse>
			
```

## Get a Webhook

Returns information about the specified webhook.

#### URI

GET /api/3.6/sites/<site-id>/webhooks/<webhook-id>

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the webhook.</td></tr><tr><td><span class="api-placeholder">webhook-id</span></td><td>The ID of the webhook.</td></tr></tbody></table>

#### Request Body

None

#### Permissions

This method can only be called by server administrators.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:webhooks:read
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

200

#### Response Body

<tsResponse>
  <webhook
    id="webhook-id"
    name="webhook-name"
    isEnabled="true"
    statusChangeReason=""
    event="api-event-name">
      <webhook-source>
        <webhook-source-api-event-name />
      </webhook-source>
      <webhook-destination>
        <webhook-destination-http method="POST" url="url"/>
      </webhook-destination>
      <owner id="webhook\_owner\_luid" name="webhook\_owner\_name"/>
  </webhook>
</tsResponse>

## List Webhooks

Returns a list of all the webhooks on the specified site.

#### URI

GET /api/3.6/sites/<site-id>/webhooks

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the webhooks.   </td></tr></tbody></table>

#### Request Body

None

#### Permissions

This method can only be called by server and site administrators.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:webhooks:read
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

200

#### Response Body

<tsResponse>
  <webhooks>
    <webhook
      id="webhook-id"
      name="webhook-name"
      isEnabled="true"
      statusChangeReason=""
      event="api-event-name">
        <webhook-source>
          <webhook-source-api-event-name />
        </webhook-source>
        <webhook-destination>
          <webhook-destination-http method="POST" url="url"/>
        </webhook-destination>
        <owner id="webhook\_owner\_luid" name="webhook\_owner\_name"/>
  </webhook>
  <!--  ... additional webhooks ...  -->
  </webhooks>
</tsResponse>

## List Data-Driven Alerts on Site

Returns a list of data-driven alerts in use on the specified site.

#### URI

GET /api/_api-version_/sites/_site-id_/dataAlerts

#### URI

GET /api/_api-version_/sites/_site-id_/dataAlerts?pageSize=_page-size_&pageNumber=_page-number_

#### URI

GET /api/_api-version_/sites/_site-id_/dataAlerts?filter=viewId:eq:_view-luid_

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><i>api-version</i></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><i>site-id</i></td><td>The ID of the site that contains data-driven alerts.</td></tr></tbody></table>

**Version:** Available in API 3.2 (Tableau Cloud / Tableau Server 2018.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.>

**Permissions:** This method can only be called by server administrators and site administrators, and by users who are owners of the specified alert.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:read

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
  <pagination pageNumber="1" pageSize="100" totalAvailable="1"/>
  <dataAlerts>
    <dataAlert id="alert-id" subject="alert-subject" creatorId="creator-id" createdAt="created-date" updatedAt="updated-date" frequency="alert-frequency" public="is-public-flag">
      <owner id="owner-id" name="username"/>
      <view id="view-id" name="view-name">
        <workbook id="workbook-id" name="workbook-name"/>
        <project id="project-id" name="project-name"/>
      </view>
    </dataAlert>
  </dataAlerts>
</tsResponse>
```

The **createdAt** and **updatedAt** values are dates and times in UTC format (YYYY-MM-DDTHH:MM:SSZ).

#### Version

Version 3.2 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400006</td><td>Invalid page number</td><td>The page number parameter is not an integer, is less than one, or is greater than the final page number for the sites at the requested page size.</td></tr><tr><td>400</td><td>400007</td><td>Invalid page size</td><td>The page size parameter is not an integer, or is less than one.</td></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A user queried this method who does not have the required permissions</td></tr><tr><td>403</td><td>403014</td><td>Page size limit exceeded</td><td>The specified page size is larger than the maximum page size.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>GET</b>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/13020592-762f-4de4-a25e-f4beb005836e/dataAlerts" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse>
  <dataAlerts>
    <dataAlert id="e5a4b73e-5cbb-412d-907e-f31cc31684f7" subject="Data alert - Shipping" creatorId="8eda27d9-5ad2-42cd-a39a-61bc01a423af" createdAt="2018-08-13T20:55:29Z" updatedAt="2018-08-21T00:05:34Z" frequency="daily" public="true">
      <owner id="8eda27d9-5ad2-42cd-a39a-61bc01a423af" name="admin"/>
      <view id="defbf126-5e8b-4c12-9c55-6e772c91bf62" name="Shipping">
        <workbook id="4c384398-085c-4236-91a0-4f92bee1c9ba" name="Superstore"/>
        <project id="291de556-9f2b-11e8-a25f-631b5eb7ad77" name="Default"/>
      </view>
    </dataAlert>
  </dataAlerts>
</tsResponse>
```

## Get Data-Driven Alert

Returns details on a specified data-driven alert, including the recipients of the alert.

#### URI

GET /api/_api-version_/sites/_site-id_/dataAlerts/_data-alert-id_

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><i>api-version</i></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><i>site-id</i></td><td>The ID of the site that contains the specified data-driven alert.</td></tr><tr><td><i>data-alert-id</i></td><td>The ID of the data-driven alert. You can obtain this ID by calling <a href="#query_data-driven_alerts">Query Data-Driven Alerts</a>.</td></tr></tbody></table>

**Version:** Available in API 3.20 (Tableau Cloud June 2023) and later. Not available for Tableau Server. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.

**Permissions:** Users with the Administrator, Creator, or Explorer role can add DDAs to views they have permissions to.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:read

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Request Body

None

#### Response Code

200

#### Response Body

```
<tsResponse>
  <dataAlert id="alert-id" subject="alert-subject" creatorId="creator-id" createdAt="created-date" updatedAt="updated-date" frequency="alert-frequency" public="is-public-flag">
    <owner id="owner-id" name="username"/>
      <view id="view-id" name="view-name">
        <workbook id="workbook-id" name="workbook-name"/>
        <project id="project-id" name="project-name"/>
      </view>
      <recipients>
        <recipient id="recipient-id"/>
      </recipients>
  </dataAlert>
</tsResponse>
```

The **createdAt** and **updatedAt** values are dates and times in UTC format (YYYY-MM-DDTHH:MM:SSZ).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Read forbidden</td><td>A user queried this method who does not have the required permissions</td></tr><tr><td>404</td><td>409023</td><td>Resource Not Found</td><td>The data-driven alert ID specified in the URI is invalid.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <b>GET</b>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/13020592-762f-4de4-a25e-f4beb005836e/dataAlerts/e5a4b73e-5cbb-412d-907e-f31cc31684f7" -X GET -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd"`

**Example response:**

```
<tsResponse>
  <dataAlert id="e5a4b73e-5cbb-412d-907e-f31cc31684f7" subject="Data alert - Shipping" creatorId="8eda27d9-5ad2-42cd-a39a-61bc01a423af" createdAt="2018-08-13T20:55:29Z" updatedAt="2018-08-21T00:05:34Z" frequency="daily" public="true">
    <owner id="8eda27d9-5ad2-42cd-a39a-61bc01a423af" name="admin"/>
    <view id="defbf126-5e8b-4c12-9c55-6e772c91bf62" name="Shipping">
      <workbook id="4c384398-085c-4236-91a0-4f92bee1c9ba" name="Superstore"/>
      <project id="291de556-9f2b-11e8-a25f-631b5eb7ad77" name="Default"/>
    </view>
    <recipients>
      <recipient id="4"/>
    </recipients>
  </dataAlert>
</tsResponse>
```

## Test a Webhook

Tests the specified webhook. Sends an empty payload to the configured destination URL of the webhook and returns the response from the server. This is useful for testing, to ensure that things are being sent from Tableau and received back as expected.

#### URI

GET /api/3.6/sites/<site-id>/webhooks/<webhook-id>/test

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the webhook.  </td></tr><tr><td><span class="api-placeholder">webhook-id</span></td><td>The ID of the webhook.  </td></tr></tbody></table>

#### Request Body

None.

#### Permissions

This method can only be called by server and site administrators.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:webhooks:test
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

200

#### Response Body

<tsResponse>
  <webhookTestResult id="9f9bcaf8-8c4c-403c-b7e1-10dd85620f00" status="200">
    <body></body>
  </webhookTestResult>
</tsResponse>

## Update Data-Driven Alert

Update one or more settings for the specified data-driven alert; including the alert subject, frequency, and owner.

#### URI

PUT /api/api-version/sites/site-id/dataAlerts/data-alert-id

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the data-driven alert.</td></tr><tr><td><span class="api-placeholder">data-alert-id</span></td><td>The ID of the data-driven alert. You can obtain this ID by calling <a href="#query_data-driven_alerts">Query Data-Driven Alerts</a>.</td></tr></tbody></table>

**Version:** Available in API 3.2 (Tableau Cloud / Tableau Server 2018.3) and later. _[Version Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm)_

**License:** No additional license required.>

**Permissions:** This method can only be called by server administrators and site administrators, and by users who are owners of the specified alert.  _[Permissions Overview](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_permissions.htm)_

**JWT Access Scope**: tableau:data\_driven\_alerts:update

- For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Request Body

```
<tsRequest>
    <dataAlert subject="data-alert-subject"
        frequency="data-alert-frequency" public="is-public-flag">
            <owner id="data-alert-owner-id"/>
    </dataAlert>
 </tsRequest>
```

#### Attribute Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-extra-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">data-alert-subject</span></td><td>(Optional) The string to set as the new subject of the alert.</td></tr><tr><td><span class="api-placeholder">data-alert-frequency</span></td><td>(Optional) The frequency of the data-driven alert: <span class="api-command-ref">once</span>, <span class="api-command-ref">frequently</span>, <span class="api-command-ref">hourly</span>, <span class="api-command-ref">daily</span>, or <span class="api-command-ref">weekly</span>.</td></tr><tr><td><span class="api-placeholder">data-alert-owner-id</span></td><td>(Optional) The ID of the user to assign as owner of the data-driven alert.</td></tr><tr><td><span class="api-placeholder">is-public-flag</span></td><td>(Optional) Determines the visibility of the data-driven alert. If the flag is true, users with access to the view containing the alert can see the alert and add themselves as recipients. If the flag is false, then the alert is only visible to the owner, site or server administrators, and specific users they add as recipients. (Optional) Determines the visibility of the data-driven alert. If the flag is true, users with access to the view containing the alert can see the alert and add themselves as recipients. If the flag is false, then the alert is only visible to the owner, site or server administrators, and specific users they add as recipients.</td></tr></tbody></table>

#### Response Code

200

#### Response Body

```
<tsResponse>
  <dataAlert id="data-alert-id" subject="data-alert-subject" creatorId="user-id"
    createdAt="created-date" updatedAt="updated-date" frequency="data-alert-frequency" public="is-public-flag">
    <owner id="user-id" name="user-name" />
    <view id="view-id" name="view-name" >
      <workbook id="workbook-id" name="workbook-name" />
      <project id="project-id" name="project-name" />
    </view>
  </dataAlert>
</tsResponse>
```

The createdAt and updatedAt attribute values are returned in UTC format (YYYY-MM-DDTHH:MM:SSZ).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Write forbidden</td><td>A user called this method who does not have the required permissions.</td></tr><tr><td>403</td><td>409030</td><td>Updating data-driven alert forbidden</td><td>The user is not authorized to update the data-driven alert.</td></tr><tr><td>404</td><td>409023</td><td>Resource Not Found</td><td>The data-driven alert ID specified in the URI is invalid.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID or URL namespace in the URI doesn't correspond to an existing site.</td></tr><tr><td>404</td><td>404002</td><td>Resource Not Found</td><td>The user ID specified in the request body is invalid.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>Request type was not <span class="api-command-ref">PUT</span>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example

`curl "http://MY-SERVER/api/3.29/sites/9a8b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d/dataAlerts/1a1b1c1d-2e2f-2a2b-3c3d-3e3f4a4b4c4d" -X PUT -H "X-Tableau-Auth:12ab34cd56ef78ab90cd12ef34ab56cd" -d @update-alert.xml`

**Content of update-alert.xml:**

```
<tsRequest>
    <dataAlert subject="Data alert - Shipping" frequency="daily" public="true">
        <owner id="8eda27d9-5ad2-42cd-a39a-61bc01a423af"/>
    </dataAlert>
</tsRequest>
```

**Example response:**

```
<tsResponse>
  <dataAlert id="c60bbd4e-dd98-469f-bf71-83c42378f427" subject="Data alert - Shipping"
    creatorId="8eda27d9-5ad2-42cd-a39a-61bc01a423af" createdAt="2018-08-22T23:16:41Z"
    updatedAt="2018-08-24T20:27:14Z" frequency="daily" public="true">
    <owner id="8eda27d9-5ad2-42cd-a39a-61bc01a423af" name="admin"/>
    <view id="defbf126-5e8b-4c12-9c55-6e772c91bf62" name="Shipping">
      <workbook id="4c384398-085c-4236-91a0-4f92bee1c9ba" name="Superstore"/>
      <project id="291de556-9f2b-11e8-a25f-631b5eb7ad77" name="Default"/>
    </view>
  </dataAlert>
</tsResponse>
```

## Update User Notification Preferences

Updates user notifications preferences to enabled or disabled on the specified site. For more information about notifications, see [Manage Your Account Settings](https://help.tableau.com/current/pro/desktop/en-us/useracct.htm#change-notification-settings).

#### URI

PATCH /api/api\_version/sites/site-id/settings/notifications

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1"> <col></colgroup><tbody><tr><td><span class="api-placeholder">api-version</span></td><td>The version of the API to use, such as <code><span class="mc-variable Variables.REST-API-Version variable">3.29</span></code>. For more information, see <a href="https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm" class="xref">REST API and Resource Versions</a>.</td></tr><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the user.</td></tr></tbody></table>

#### Request Body

```
<tsRequest>
  <userNotificationsPreferences>
    <userNotificationsPreference
      enabled="enabled-flag"
      channel="channel"
      notificationType="notification-type"/>
    <userNotificationsPreference
      enabled="enabled-flag"
      channel="channel"
      notificationType="notification-type"/>
  <userNotificationsPreferences>
</tsRequest>
```

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-extra-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">enabled-flag</span>
                                        </td>
                                        <td>(Required, boolean) If <code>true</code>, the specified site notifications will be on. If <code>false</code>, the specified site notifications will be off.
                                </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">channel</span>
                                        </td>
                                        <td>(Required, string) Specifies the channel that the notification preferences are to be updated (turned on or off). Valid channels are: <span class="api-command-ref">email</span>, <span class="api-command-ref">in_app</span>, and <span class="api-command-ref">slack</span>.


                                </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">notification-type</span>
                                        </td>
                                        <td>
                                            <p>Specifies the notification type for which the notification preferences are to be updated (turned on or off). Valid notification types are: <span class="api-command-ref">comments</span>, <span class="api-command-ref">webhooks</span>, <span class="api-command-ref">prepflow</span>, <span class="api-command-ref">share</span>, <span class="api-command-ref">dataalerts</span>,and<span class="api-command-ref"> extractrefresh</span>.
								</p>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Permissions

This method can only be called by a Server Administrator, a Site Administrator Creator, or a Site Administrator Explorer.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:user_notifications:update
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

- 200: The request was successful
- 207: One or more of the updates in the request resulted in an error. See details in the the response body.

#### Response Body

```
<tsResponse>
  <notificationUpdateResult>
    <notificationUpdateStatus>
      <status>Success</status>
        <userNotificationsPreference channel="channel"
          notificationType="notification-type"
          enabled="enabled-flag"/>
        </notificationUpdateStatus>
    <notificationUpdateStatus>
      <status>Success</status>
        <userNotificationsPreference channel="channel"
          notificationType="notification-type"
          enabled="enabled-flag"/>
    </notificationUpdateStatus>
  </notificationUpdateResult>
</tsResponse>
```

#### Version

Version 3.15 and later. For more information, see [REST API and Resource Versions](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_versions.htm).

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>403</td><td>403004</td><td>Invalid Permissions</td><td>Invalid permission to update site user notification settings.</td></tr><tr><td>404</td><td>404000</td><td>Site not found</td><td>The site ID in the URI doesn't correspond to an existing site.</td></tr><tr><td>405</td><td>405000</td><td>Invalid request method</td><td>The request type was not <span class="api-command-ref">PATCH</span>.</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Example response

```
<tsResponse>
  <notificationUpdateResult>
    <notificationUpdateStatus>
      <status>Success</status>
        <userNotificationsPreference channel="slack"
          notificationType="comments"
          enabled="false"/>
      </notificationUpdateStatus>
      <notificationUpdateStatus>
        <status>Success</status>
        <userNotificationsPreference channel="email"
          notificationType="comments"
          enabled="false"/>
      </notificationUpdateStatus>
  </notificationUpdateResult>
</tsResponse>
```

## Update a Webhook

Modify the properties of an existing webhook.

#### URI

PUT /api/3.8/sites/<site-id>/webhooks/<webhook-id>

#### Parameter Values

<table class="api-parameters-table"><colgroup><col class="api-parameters-table-col-1-wide"> <col></colgroup><tbody><tr><td><span class="api-placeholder">site-id</span></td><td>The ID of the site that contains the webhook to be updated.  </td></tr><tr><td><span class="api-placeholder">webhook-id</span></td><td>The ID of the webhook.  </td></tr></tbody></table>

#### Request Body

<tsRequest>
  <webhook name="webhook-name"
    isEnabled="webhook-enabled-flag"
    statusChangeReason="reason-for-disablement"
    event="api-event-name">
      <webhook-source>
        <webhook-source-api-event-name />
      </webhook-source>
      <webhook-destination>
        <webhook-destination-http method="POST" url="url" />
      </webhook-destination>
  </webhook>
</tsRequest>

#### Attribute Values

<table class="api-parameters-table">
                                <colgroup>
                                    <col class="api-parameters-table-col-1-extra-wide">
                                    <col>
                                </colgroup>
                                <tbody>
                                    <tr>
                                        <td><span class="api-placeholder">webhook-name</span>
                                        </td>
                                        <td>This is required. A name for the webhook.</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">api-event-name | webhook-source-api-event-name</span>
                                        </td>
                                        <td>
                                            <p>You must specify one of these attribute values. The name of the Tableau event that triggers your webhook. The event name must be one of the supported events listed in the Trigger Events table. The event and webhook-source use different name values for the same event. </p>
                                            <p><b>Recommended:</b> Use the event attribute of the webhook to specify the triggering API event for the webhook. The webhook-source element serves the same purpose but is being deprecated in future versions of Tableau webhooks. If both events and webhook-source are specified, their events specified must match. If either are specified, with the other being NULL, then the specified event becomes the webhook trigger, whether the element containing the event name is event or webhook-source.</p>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">url</span>
                                        </td>
                                        <td>(Optional) The destination URL for the webhook. The webhook destination URL must be https and have a valid certificate.
							</td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">webhook-enabled-flag</span>
                                        </td>
                                        <td>(Optional) Boolean. If <b>true</b> (default), the newly created webhook is enabled. If <b>false</b> then the webhook will be disabled.  </td>
                                    </tr>
                                    <tr>
                                        <td><span class="api-placeholder">reason-for-disablement</span>
                                        </td>
                                        <td>
                                            <p>The reason a webhook is disabled.</p>
                                            <ul>
                                                <li>If <b>isEnabled</b> set to <b>true</b>, omit this parameter from your request to create a webhook, or set the value of <b>statusChangeReason</b> to an empty string. Providing a reason value when creating an enabled webhook will result in an error (400127).</li>
                                                <li>If <b>isEnabled</b> set to <b>false</b>, then unless you provide a value for <b>statusChangeReason</b> it will default to "Webhook disabled by user".</li>
                                            </ul>
                                        </td>
                                    </tr>
                                </tbody>
                            </table>

#### Permissions

This method can only be called by server and site administrators.

#### Access Scope

Scope added in API 3.27 (Tableau Cloud December 2025 / Server 2025.3).

```
tableau:webhooks:update
```

For more information, see [Access scopes for UATs](https://help.tableau.com/current/api/cloud-manager/en-us/docs/unified_access_tokens.html#scopes) (Cloud) and access scopes for connected apps: [Cloud](https://help.tableau.com/current/online/en-us/connected_apps_scopes.htm), [Server-Windows](https://help.tableau.com/current/server/en-us/connected_apps_scopes.htm), or [Server-Linux](https://help.tableau.com/current/server-linux/en-us/connected_apps_scopes.htm).

#### Response Code

200

#### Response Body

<tsResponse>
  <webhook
    id="webhook-id"
    name="webhook-name"
    isEnabled="true"
    statusChangeReason=""
    event="api-event-name">
      <webhook-source>
        <webhook-source-api-event-name />
      </webhook-source>
      <webhook-destination>
        <webhook-destination-http method="POST" url="url"/>
      </webhook-destination>
      <owner id="webhook\_owner\_luid" name="webhook\_owner\_name"/>
  </webhook>
</tsResponse>

#### Errors

<table class="api-error-table"><colgroup><col class="api-error-table-col-1"> <col class="api-error-table-col-2"> <col class="api-error-table-col-3"> <col></colgroup><tbody><tr><th>HTTP status</th><th><code>error</code> Code</th><th>Condition</th><th>Details</th></tr><tr><td>400</td><td>400127</td><td>Bad request</td><td><b>statusChangeReason</b> was provided with isEnabled = true</td></tr></tbody></table>

For more information, see [Handling Errors](https://help.tableau.com/current/api/rest_api/en-us/REST/rest_api_concepts_errors.htm).

#### Response Headers

```
Location: /api/3.29/sites/site-id/webhooks/new-webhook-id
```